Mangatsu / server

🌕 Media server for storing, tagging and viewing doujinshi, manga, art collections and other galleries with API and user control. Written in Go.
GNU General Public License v3.0
43 stars 6 forks source link

Migrate gallery.go and validations.go to goqu #23

Open CrescentKohana opened 2 years ago

CrescentKohana commented 2 years ago

This one might be the most challenging part of the goqu rework.

CrescentKohana commented 2 years ago

Raw SQL by Jet can be seen with println(stmt.DebugSql())

Example for /galleries?tag=female:swimsuit&tag=female:bikini&sortby=original:

SELECT galleries.`gallery.uuid` AS "gallery.uuid",
     galleries.`gallery.library_id` AS "gallery.library_id",
     galleries.`gallery.archive_path` AS "gallery.archive_path",
     galleries.`gallery.title` AS "gallery.title",
     galleries.`gallery.title_native` AS "gallery.title_native",
     galleries.`gallery.title_translated` AS "gallery.title_translated",
     galleries.`gallery.category` AS "gallery.category",
     galleries.`gallery.series` AS "gallery.series",
     galleries.`gallery.released` AS "gallery.released",
     galleries.`gallery.language` AS "gallery.language",
     galleries.`gallery.translated` AS "gallery.translated",
     galleries.`gallery.nsfw` AS "gallery.nsfw",
     galleries.`gallery.hidden` AS "gallery.hidden",
     galleries.`gallery.image_count` AS "gallery.image_count",
     galleries.`gallery.archive_size` AS "gallery.archive_size",
     galleries.`gallery.archive_hash` AS "gallery.archive_hash",
     galleries.`gallery.thumbnail` AS "gallery.thumbnail",
     galleries.`gallery.created_at` AS "gallery.created_at",
     galleries.`gallery.updated_at` AS "gallery.updated_at",
     tag.namespace AS "tag.namespace",
     tag.name AS "tag.name",
     reference.exh_gid AS "reference.exh_gid",
     reference.exh_token AS "reference.exh_token",
     reference.urls AS "reference.urls"
FROM (
          SELECT gallery.uuid AS "gallery.uuid",
               gallery.library_id AS "gallery.library_id",
               gallery.archive_path AS "gallery.archive_path",
               gallery.title AS "gallery.title",
               gallery.title_native AS "gallery.title_native",
               gallery.title_translated AS "gallery.title_translated",
               gallery.category AS "gallery.category",
               gallery.series AS "gallery.series",
               gallery.released AS "gallery.released",
               gallery.language AS "gallery.language",
               gallery.translated AS "gallery.translated",
               gallery.nsfw AS "gallery.nsfw",
               gallery.hidden AS "gallery.hidden",
               gallery.image_count AS "gallery.image_count",
               gallery.archive_size AS "gallery.archive_size",
               gallery.archive_hash AS "gallery.archive_hash",
               gallery.thumbnail AS "gallery.thumbnail",
               gallery.created_at AS "gallery.created_at",
               gallery.updated_at AS "gallery.updated_at"
          FROM gallery
          WHERE TRUE AND (EXISTS (
                     SELECT NULL
                     FROM gallery_tag AS gt
                          INNER JOIN tag AS t ON (t.id = gt.tag_id)
                     WHERE ((t.namespace IN ('female', 'female')) AND (t.name IN ('swimsuit', 'bikini'))) AND (gt.gallery_uuid = gallery.uuid)
                     GROUP BY gt.gallery_uuid
                     HAVING COUNT(t.name) = 2
                ))
          ORDER BY gallery.title ASC
          LIMIT 50
          OFFSET 0
     ) AS galleries
     LEFT JOIN gallery_tag ON (gallery_tag.gallery_uuid = galleries.`gallery.uuid`)
     LEFT JOIN tag ON (tag.id = gallery_tag.tag_id)
     LEFT JOIN reference ON (reference.gallery_uuid = galleries.`gallery.uuid`);