feat(users/Profpatsch/whatcd-resolver): allow more than albums
When searching for an artist, we only put albums before, but now let’s fetch all releases and group them by release type. I group & sort on the backend instead of the database, cause it’s a lot easier to express in Haskell code and the amount of data stays the same (except for the filter for singles which I might move into the SQL at one point?) Adds a prelude module for better dealing with comparisons. Change-Id: Iff235af611b6e1bac71b118a8a04fc73cacd169f Reviewed-on: https://cl.tvl.fyi/c/depot/+/12951 Reviewed-by: Profpatsch <mail@profpatsch.de> Tested-by: BuildkiteCI
This commit is contained in:
parent
c7fa114295
commit
0319b5e6c0
5 changed files with 127 additions and 11 deletions
|
|
@ -4,6 +4,7 @@ module Redacted where
|
|||
|
||||
import AppT
|
||||
import Arg
|
||||
import Comparison
|
||||
import Control.Monad.Logger.CallStack
|
||||
import Control.Monad.Reader
|
||||
import Data.Aeson qualified as Json
|
||||
|
|
@ -365,6 +366,7 @@ assertOneUpdated span name x = case x.numberOfRowsAffected of
|
|||
data TorrentData transmissionInfo = TorrentData
|
||||
{ groupId :: Int,
|
||||
torrentId :: Int,
|
||||
releaseType :: ReleaseType,
|
||||
seedingWeight :: Int,
|
||||
artists :: [T2 "artistId" Int "artistName" Text],
|
||||
torrentGroupJson :: TorrentGroupJson,
|
||||
|
|
@ -372,6 +374,34 @@ data TorrentData transmissionInfo = TorrentData
|
|||
torrentFormat :: Text
|
||||
}
|
||||
|
||||
-- | https://redacted.sh/wiki.php?action=article&id=455#_1804298149
|
||||
newtype ReleaseType = ReleaseType {unReleaseType :: Text}
|
||||
deriving stock (Eq, Show)
|
||||
|
||||
releaseTypeComparison :: Comparison ReleaseType
|
||||
releaseTypeComparison = listIndexComparison [releaseTypeAlbum, releaseTypeSoundtrack, releaseTypeEP, releaseTypeAnthology, releaseTypeCompilation, releaseTypeSingle, releaseTypeLiveAlbum, releaseTypeRemix, releaseTypeBootleg, releaseTypeInterview, releaseTypeMixtape, releaseTypeDemo, releaseTypeConcertRecording, releaseTypeDJMix, releaseTypeUnknown, releaseTypeProducedBy, releaseTypeComposition, releaseTypeRemixedBy, releaseTypeGuestAppearance]
|
||||
|
||||
releaseTypeAlbum, releaseTypeSoundtrack, releaseTypeEP, releaseTypeAnthology, releaseTypeCompilation, releaseTypeSingle, releaseTypeLiveAlbum, releaseTypeRemix, releaseTypeBootleg, releaseTypeInterview, releaseTypeMixtape, releaseTypeDemo, releaseTypeConcertRecording, releaseTypeDJMix, releaseTypeUnknown, releaseTypeProducedBy, releaseTypeComposition, releaseTypeRemixedBy, releaseTypeGuestAppearance :: ReleaseType
|
||||
releaseTypeAlbum = ReleaseType "Album"
|
||||
releaseTypeSoundtrack = ReleaseType "Soundtrack"
|
||||
releaseTypeEP = ReleaseType "EP"
|
||||
releaseTypeAnthology = ReleaseType "Anthology"
|
||||
releaseTypeCompilation = ReleaseType "Compilation"
|
||||
releaseTypeSingle = ReleaseType "Single"
|
||||
releaseTypeLiveAlbum = ReleaseType "Live album"
|
||||
releaseTypeRemix = ReleaseType "Remix"
|
||||
releaseTypeBootleg = ReleaseType "Bootleg"
|
||||
releaseTypeInterview = ReleaseType "Interview"
|
||||
releaseTypeMixtape = ReleaseType "Mixtape"
|
||||
releaseTypeDemo = ReleaseType "Demo"
|
||||
releaseTypeConcertRecording = ReleaseType "Concert Recording"
|
||||
releaseTypeDJMix = ReleaseType "DJ Mix"
|
||||
releaseTypeUnknown = ReleaseType "Unknown"
|
||||
releaseTypeProducedBy = ReleaseType "Produced By"
|
||||
releaseTypeComposition = ReleaseType "Composition"
|
||||
releaseTypeRemixedBy = ReleaseType "Remixed By"
|
||||
releaseTypeGuestAppearance = ReleaseType "Guest Appearance"
|
||||
|
||||
data TorrentGroupJson = TorrentGroupJson
|
||||
{ groupName :: Text,
|
||||
groupYear :: Natural
|
||||
|
|
@ -427,6 +457,7 @@ getBestTorrents opts = do
|
|||
tg.group_id,
|
||||
t.torrent_id,
|
||||
t.seeding_weight,
|
||||
tg.full_json_result->>'releaseType' AS release_type,
|
||||
t.full_json_result->'artists' AS artists,
|
||||
tg.full_json_result->>'groupName' AS group_name,
|
||||
tg.full_json_result->>'groupYear' AS group_year,
|
||||
|
|
@ -451,6 +482,7 @@ getBestTorrents opts = do
|
|||
groupId <- Dec.fromField @Int
|
||||
torrentId <- Dec.fromField @Int
|
||||
seedingWeight <- Dec.fromField @Int
|
||||
releaseType <- ReleaseType <$> Dec.text
|
||||
artists <- Dec.json $
|
||||
Json.eachInArray $ do
|
||||
id_ <- Json.keyLabel @"artistId" "id" (Json.asIntegral @_ @Int)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue