debshots/doc/README.DeveloperNotes.md
2021-02-13 23:22:25 +01:00

3 KiB

This file collects various notes about how certain aspects are implemented.

Full text search

The pg_search Ruby gem is used for full-text searched in Rails. See: https://github.com/Casecommons/pg_search

Reformatted SQL query for fulltext search:

SELECT COUNT(*) FROM "packages" WHERE ( ( ( to_tsvector('simple', coalesce("packages"."name"::text, '')) || to_tsvector('simple', coalesce("packages"."description"::text, '')) || to_tsvector('simple', coalesce("packages"."long_description"::text, '')) ) @@ ( to_tsquery('simple', '''' || 'browser' || ' ''') ) ) )

Create search index to speed up searches significantly

CREATE INDEX packages_gin ON packages USING GIN( (to_tsvector('simple', coalesce("packages"."name"::text, '')) || to_tsvector('simple', coalesce("packages"."description"::text, '')) || to_tsvector('simple', coalesce("packages"."long_description"::text, ''))) );


Used: https://github.com/semaperepelitsa/jquery.fileupload-rails Which is a gem for: https://github.com/blueimp/jQuery-File-Upload


Paperclip for attachment/screenshot file handlind within ActiveRecord https://github.com/thoughtbot/paperclip

Rails 5 is said to contain functionality like that already. Might be worth migrating to that at some time.


Importer

How Debian repositories are organized: https://wiki.debian.org/RepositoryFormat


Logging from within the application into the database's "log" table:

Log.log "foo" or with section (default='frontend'): Log.log "foo", "importer"


To create admin users

rails c

User.new(email: 'email@christoph-haas.de', password: 'secret').save


Multiple distributions (e.g. Ubuntu, Debian)

  • new table: distributions

    • id
    • name (e.g. "Debian")
    • description (e.g. "The Debian GNU/Linux distribution")
    • url (http://www.debian.org/)
    • type (apt, later: rpm)
    • logo
  • screenshots: new field for source_id

Admin interface to manage sources


AppStream data

  • screenshots: new field for type ('user-generated', 'upstream', 'logo') user-generated: uploaded by a random user upstream: official screenshot from the developer logo: not a screenshot - just a logo

debshots used to use the 'paperclip' gem for file handling of images. Paperclip was deprecated so something new was needed. At the same time Rails 6.0 was released and offered file handling using ActiveStorage. However ActiveStorage was so seriously flawed and incomplete in 2020 that I decided to go for the 'shrine' gem.

There is a Rake task that converts Paperclip attachments to Shrine attachments. This is a one-time conversion.

Images are saved in four ways:

  • original image
  • thumb image (to be used in packages.debian.org)
  • large image (original image with watermark on the right edge)
  • medium image (up to 800x600)
  • small image (up to 320x240) for gallery/grid views

Screenshot.image was the Paperclip image attachment. Screenshot.simage is the Shring image attachment. I used two different attributes to avoid confusion.