{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedLabels #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE NoFieldSelectors #-}
{-# OPTIONS_GHC -fno-warn-ambiguous-fields #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}

module WikiMusic.Sqlite.GenreCommand () where

import Data.Map qualified as Map
import Data.UUID qualified as UUID
import Database.Beam
import Database.Beam.Sqlite
import Relude
import WikiMusic.Beam.Database
import WikiMusic.Beam.Genre
import WikiMusic.Free.GenreCommand
import WikiMusic.Interaction.Model.Genre
import WikiMusic.Model.Artwork
import WikiMusic.Model.Comment
import WikiMusic.Model.Genre
import WikiMusic.Model.Opinion
import WikiMusic.Protolude

insertGenres' :: (MonadIO m) => Env -> [Genre] -> m (Map UUID Genre)
insertGenres' :: forall (m :: * -> *).
MonadIO m =>
Env -> [Genre] -> m (Map UUID Genre)
insertGenres' Env
env [Genre]
genres = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any)) -> IO ())
-> SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any))
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any))
    -> SqliteM ())
-> SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any))
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlInsert Sqlite GenreT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlInsert be table -> m ()
runInsert
    (SqlInsert Sqlite GenreT -> SqliteM ())
-> (SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any))
    -> SqlInsert Sqlite GenreT)
-> SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any))
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
-> SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any))
-> SqlInsert Sqlite GenreT
forall be (table :: (* -> *) -> *) s (db :: (* -> *) -> *).
(BeamSqlBackend be,
 ProjectibleWithPredicate AnyType () Text (table (QField s))) =>
DatabaseEntity be db (TableEntity table)
-> SqlInsertValues be (table (QExpr be s)) -> SqlInsert be table
insert ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
-> DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
#genres) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
    (SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any)) -> m ())
-> SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any)) -> m ()
forall a b. (a -> b) -> a -> b
$ [GenreT Identity]
-> SqlInsertValues Sqlite (GenreT (QExpr Sqlite Any))
forall be (table :: (* -> *) -> *) s.
(BeamSqlBackend be, Beamable table,
 FieldsFulfillConstraint (BeamSqlBackendCanSerialize be) table) =>
[table Identity] -> SqlInsertValues be (table (QExpr be s))
insertValues ((Genre -> GenreT Identity) -> [Genre] -> [GenreT Identity]
forall a b. (a -> b) -> [a] -> [b]
map Genre -> GenreT Identity
toPersistenceGenre [Genre]
genres)

  [GenreExternalSourcesT Identity]
externalContents <-
    (Genre -> m (GenreExternalSourcesT Identity))
-> [Genre] -> m [GenreExternalSourcesT Identity]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM
      ( \Genre
s -> do
          UUID
newIdentifier <- IO UUID -> m UUID
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UUID
nextRandom
          GenreExternalSourcesT Identity
-> m (GenreExternalSourcesT Identity)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (GenreExternalSourcesT Identity
 -> m (GenreExternalSourcesT Identity))
-> GenreExternalSourcesT Identity
-> m (GenreExternalSourcesT Identity)
forall a b. (a -> b) -> a -> b
$ Genre -> UUID -> GenreExternalSourcesT Identity
toPersistenceGenreExternalContents Genre
s UUID
newIdentifier
      )
      [Genre]
genres
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlInsertValues
      Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
    -> IO ())
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlInsertValues
      Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
    -> SqliteM ())
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlInsert Sqlite GenreExternalSourcesT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlInsert be table -> m ()
runInsert
    (SqlInsert Sqlite GenreExternalSourcesT -> SqliteM ())
-> (SqlInsertValues
      Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
    -> SqlInsert Sqlite GenreExternalSourcesT)
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity
  Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> SqlInsert Sqlite GenreExternalSourcesT
forall be (table :: (* -> *) -> *) s (db :: (* -> *) -> *).
(BeamSqlBackend be,
 ProjectibleWithPredicate AnyType () Text (table (QField s))) =>
DatabaseEntity be db (TableEntity table)
-> SqlInsertValues be (table (QExpr be s)) -> SqlInsert be table
insert ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
#genreExternalSources) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
    (SqlInsertValues Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
 -> m ())
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> m ()
forall a b. (a -> b) -> a -> b
$ [GenreExternalSourcesT Identity]
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
forall be (table :: (* -> *) -> *) s.
(BeamSqlBackend be, Beamable table,
 FieldsFulfillConstraint (BeamSqlBackendCanSerialize be) table) =>
[table Identity] -> SqlInsertValues be (table (QExpr be s))
insertValues [GenreExternalSourcesT Identity]
externalContents
  Map UUID Genre -> m (Map UUID Genre)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map UUID Genre
forall k a. Map k a
Map.empty

insertGenreComments' :: (MonadIO m) => Env -> [GenreComment] -> m (Map UUID GenreComment)
insertGenreComments' :: forall (m :: * -> *).
MonadIO m =>
Env -> [GenreComment] -> m (Map UUID GenreComment)
insertGenreComments' Env
env [GenreComment]
comments = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
    -> IO ())
-> SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
    -> SqliteM ())
-> SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlInsert Sqlite GenreCommentT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlInsert be table -> m ()
runInsert
    (SqlInsert Sqlite GenreCommentT -> SqliteM ())
-> (SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
    -> SqlInsert Sqlite GenreCommentT)
-> SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreCommentT)
-> SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
-> SqlInsert Sqlite GenreCommentT
forall be (table :: (* -> *) -> *) s (db :: (* -> *) -> *).
(BeamSqlBackend be,
 ProjectibleWithPredicate AnyType () Text (table (QField s))) =>
DatabaseEntity be db (TableEntity table)
-> SqlInsertValues be (table (QExpr be s)) -> SqlInsert be table
insert ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreCommentT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreCommentT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreCommentT))
#genreComments) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
    (SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any)) -> m ())
-> SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
-> m ()
forall a b. (a -> b) -> a -> b
$ [GenreCommentT Identity]
-> SqlInsertValues Sqlite (GenreCommentT (QExpr Sqlite Any))
forall be (table :: (* -> *) -> *) s.
(BeamSqlBackend be, Beamable table,
 FieldsFulfillConstraint (BeamSqlBackendCanSerialize be) table) =>
[table Identity] -> SqlInsertValues be (table (QExpr be s))
insertValues ((GenreComment -> GenreCommentT Identity)
-> [GenreComment] -> [GenreCommentT Identity]
forall a b. (a -> b) -> [a] -> [b]
map GenreComment -> GenreCommentT Identity
mkGenreCommentP [GenreComment]
comments)
  Map UUID GenreComment -> m (Map UUID GenreComment)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map UUID GenreComment
forall k a. Map k a
Map.empty

insertGenreExternalSources' :: (MonadIO m) => Env -> [GenreExternalSources] -> m (Map UUID GenreExternalSources)
insertGenreExternalSources' :: forall (m :: * -> *).
MonadIO m =>
Env -> [GenreExternalSources] -> m (Map UUID GenreExternalSources)
insertGenreExternalSources' Env
env [GenreExternalSources]
externalSources = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlInsertValues
      Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
    -> IO ())
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlInsertValues
      Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
    -> SqliteM ())
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlInsert Sqlite GenreExternalSourcesT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlInsert be table -> m ()
runInsert
    (SqlInsert Sqlite GenreExternalSourcesT -> SqliteM ())
-> (SqlInsertValues
      Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
    -> SqlInsert Sqlite GenreExternalSourcesT)
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity
  Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> SqlInsert Sqlite GenreExternalSourcesT
forall be (table :: (* -> *) -> *) s (db :: (* -> *) -> *).
(BeamSqlBackend be,
 ProjectibleWithPredicate AnyType () Text (table (QField s))) =>
DatabaseEntity be db (TableEntity table)
-> SqlInsertValues be (table (QExpr be s)) -> SqlInsert be table
insert ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
#genreExternalSources) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
    (SqlInsertValues Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
 -> m ())
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
-> m ()
forall a b. (a -> b) -> a -> b
$ [GenreExternalSourcesT Identity]
-> SqlInsertValues
     Sqlite (GenreExternalSourcesT (QExpr Sqlite Any))
forall be (table :: (* -> *) -> *) s.
(BeamSqlBackend be, Beamable table,
 FieldsFulfillConstraint (BeamSqlBackendCanSerialize be) table) =>
[table Identity] -> SqlInsertValues be (table (QExpr be s))
insertValues ((GenreExternalSources -> GenreExternalSourcesT Identity)
-> [GenreExternalSources] -> [GenreExternalSourcesT Identity]
forall a b. (a -> b) -> [a] -> [b]
map GenreExternalSources -> GenreExternalSourcesT Identity
toPersistenceGenreExternalSources [GenreExternalSources]
externalSources)
  Map UUID GenreExternalSources -> m (Map UUID GenreExternalSources)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map UUID GenreExternalSources
forall k a. Map k a
Map.empty

insertGenreArtworks' :: (MonadIO m) => Env -> [GenreArtwork] -> m (Map UUID GenreArtwork)
insertGenreArtworks' :: forall (m :: * -> *).
MonadIO m =>
Env -> [GenreArtwork] -> m (Map UUID GenreArtwork)
insertGenreArtworks' Env
env [GenreArtwork]
artworks = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
    -> IO ())
-> SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
    -> SqliteM ())
-> SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlInsert Sqlite GenreArtworkT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlInsert be table -> m ()
runInsert
    (SqlInsert Sqlite GenreArtworkT -> SqliteM ())
-> (SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
    -> SqlInsert Sqlite GenreArtworkT)
-> SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
-> SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
-> SqlInsert Sqlite GenreArtworkT
forall be (table :: (* -> *) -> *) s (db :: (* -> *) -> *).
(BeamSqlBackend be,
 ProjectibleWithPredicate AnyType () Text (table (QField s))) =>
DatabaseEntity be db (TableEntity table)
-> SqlInsertValues be (table (QExpr be s)) -> SqlInsert be table
insert ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
#genreArtworks) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
    (SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any)) -> m ())
-> SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
-> m ()
forall a b. (a -> b) -> a -> b
$ [GenreArtworkT Identity]
-> SqlInsertValues Sqlite (GenreArtworkT (QExpr Sqlite Any))
forall be (table :: (* -> *) -> *) s.
(BeamSqlBackend be, Beamable table,
 FieldsFulfillConstraint (BeamSqlBackendCanSerialize be) table) =>
[table Identity] -> SqlInsertValues be (table (QExpr be s))
insertValues ((GenreArtwork -> GenreArtworkT Identity)
-> [GenreArtwork] -> [GenreArtworkT Identity]
forall a b. (a -> b) -> [a] -> [b]
map GenreArtwork -> GenreArtworkT Identity
mkGenreArtworkP [GenreArtwork]
artworks)
  Map UUID GenreArtwork -> m (Map UUID GenreArtwork)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map UUID GenreArtwork
forall k a. Map k a
Map.empty

upsertGenreOpinions' :: (MonadIO m) => Env -> [GenreOpinion] -> m (Map UUID GenreOpinion)
upsertGenreOpinions' :: forall (m :: * -> *).
MonadIO m =>
Env -> [GenreOpinion] -> m (Map UUID GenreOpinion)
upsertGenreOpinions' Env
env [GenreOpinion]
opinions = do
  (GenreOpinion -> m ()) -> [GenreOpinion] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_
    ( \GenreOpinion
o -> do
        Maybe (GenreOpinionT Identity)
exOpinion <- IO (Maybe (GenreOpinionT Identity))
-> m (Maybe (GenreOpinionT Identity))
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe (GenreOpinionT Identity))
 -> m (Maybe (GenreOpinionT Identity)))
-> IO (Maybe (GenreOpinionT Identity))
-> m (Maybe (GenreOpinionT Identity))
forall a b. (a -> b) -> a -> b
$ (String -> IO ())
-> Connection
-> SqliteM (Maybe (GenreOpinionT Identity))
-> IO (Maybe (GenreOpinionT Identity))
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM (Maybe (GenreOpinionT Identity))
 -> IO (Maybe (GenreOpinionT Identity)))
-> SqliteM (Maybe (GenreOpinionT Identity))
-> IO (Maybe (GenreOpinionT Identity))
forall a b. (a -> b) -> a -> b
$ do
          SqlSelect Sqlite (GenreOpinionT Identity)
-> SqliteM (Maybe (GenreOpinionT Identity))
forall be (m :: * -> *) a.
(MonadBeam be m, BeamSqlBackend be, FromBackendRow be a) =>
SqlSelect be a -> m (Maybe a)
runSelectReturningOne (SqlSelect Sqlite (GenreOpinionT Identity)
 -> SqliteM (Maybe (GenreOpinionT Identity)))
-> SqlSelect Sqlite (GenreOpinionT Identity)
-> SqliteM (Maybe (GenreOpinionT Identity))
forall a b. (a -> b) -> a -> b
$ Q Sqlite
  WikiMusicDatabase
  QBaseScope
  (GenreOpinionT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite (QExprToIdentity (GenreOpinionT (QExpr Sqlite QBaseScope)))
forall be (db :: (* -> *) -> *) res.
(BeamSqlBackend be, HasQBuilder be, Projectible be res) =>
Q be db QBaseScope res -> SqlSelect be (QExprToIdentity res)
select (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreOpinionT (QExpr Sqlite QBaseScope))
 -> SqlSelect
      Sqlite (QExprToIdentity (GenreOpinionT (QExpr Sqlite QBaseScope))))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreOpinionT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite (QExprToIdentity (GenreOpinionT (QExpr Sqlite QBaseScope)))
forall a b. (a -> b) -> a -> b
$ do
            (GenreOpinionT (QExpr Sqlite QBaseScope)
 -> QExpr Sqlite QBaseScope Bool)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreOpinionT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreOpinionT (QExpr Sqlite QBaseScope))
forall r be (db :: (* -> *) -> *) s.
BeamSqlBackend be =>
(r -> QExpr be s Bool) -> Q be db s r -> Q be db s r
filter_
              ( \GenreOpinionT (QExpr Sqlite QBaseScope)
s ->
                  (GenreOpinionT (QExpr Sqlite QBaseScope)
s GenreOpinionT (QExpr Sqlite QBaseScope)
-> Optic'
     A_Lens
     NoIx
     (GenreOpinionT (QExpr Sqlite QBaseScope))
     (PrimaryKey GenreT (QExpr Sqlite QBaseScope))
-> PrimaryKey GenreT (QExpr Sqlite QBaseScope)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreOpinionT (QExpr Sqlite QBaseScope))
  (PrimaryKey GenreT (QExpr Sqlite QBaseScope))
#genreIdentifier)
                    PrimaryKey GenreT (QExpr Sqlite QBaseScope)
-> PrimaryKey GenreT (QExpr Sqlite QBaseScope)
-> QExpr Sqlite QBaseScope Bool
forall (expr :: * -> *) a. SqlEq expr a => a -> a -> expr Bool
==. HaskellLiteralForQExpr
  (PrimaryKey GenreT (QExpr Sqlite QBaseScope))
-> PrimaryKey GenreT (QExpr Sqlite QBaseScope)
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (Columnar Identity Text -> PrimaryKey GenreT Identity
forall (f :: * -> *). Columnar f Text -> PrimaryKey GenreT f
GenreId (Columnar Identity Text -> PrimaryKey GenreT Identity)
-> Columnar Identity Text -> PrimaryKey GenreT Identity
forall a b. (a -> b) -> a -> b
$ UUID -> Text
UUID.toText (UUID -> Text) -> UUID -> Text
forall a b. (a -> b) -> a -> b
$ GenreOpinion
o GenreOpinion -> Optic' A_Lens NoIx GenreOpinion UUID -> UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx GenreOpinion UUID
#genreIdentifier)
                    QExpr Sqlite QBaseScope Bool
-> QExpr Sqlite QBaseScope Bool -> QExpr Sqlite QBaseScope Bool
forall be context s.
BeamSqlBackend be =>
QGenExpr context be s Bool
-> QGenExpr context be s Bool -> QGenExpr context be s Bool
&&. (GenreOpinionT (QExpr Sqlite QBaseScope)
s GenreOpinionT (QExpr Sqlite QBaseScope)
-> Optic'
     A_Lens
     NoIx
     (GenreOpinionT (QExpr Sqlite QBaseScope))
     (QGenExpr QValueContext Sqlite QBaseScope Text)
-> QGenExpr QValueContext Sqlite QBaseScope Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreOpinionT (QExpr Sqlite QBaseScope))
  (QGenExpr QValueContext Sqlite QBaseScope Text)
#createdBy)
                    QGenExpr QValueContext Sqlite QBaseScope Text
-> QGenExpr QValueContext Sqlite QBaseScope Text
-> QExpr Sqlite QBaseScope Bool
forall (expr :: * -> *) a. SqlEq expr a => a -> a -> expr Bool
==. HaskellLiteralForQExpr
  (QGenExpr QValueContext Sqlite QBaseScope Text)
-> QGenExpr QValueContext Sqlite QBaseScope Text
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (UUID -> Text
UUID.toText (UUID -> Text) -> UUID -> Text
forall a b. (a -> b) -> a -> b
$ GenreOpinion
o GenreOpinion -> Optic' A_Lens NoIx GenreOpinion UUID -> UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic A_Lens NoIx GenreOpinion GenreOpinion Opinion Opinion
#opinion Optic A_Lens NoIx GenreOpinion GenreOpinion Opinion Opinion
-> Optic A_Lens NoIx Opinion Opinion UUID UUID
-> Optic' A_Lens NoIx GenreOpinion UUID
forall k l m (is :: IxList) (js :: IxList) (ks :: IxList) s t u v a
       b.
(JoinKinds k l m, AppendIndices is js ks) =>
Optic k is s t u v -> Optic l js u v a b -> Optic m ks s t a b
% Optic A_Lens NoIx Opinion Opinion UUID UUID
#createdBy)
              )
              (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreOpinionT (QExpr Sqlite QBaseScope))
 -> Q Sqlite
      WikiMusicDatabase
      QBaseScope
      (GenreOpinionT (QExpr Sqlite QBaseScope)))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreOpinionT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreOpinionT (QExpr Sqlite QBaseScope))
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreOpinionT (QExpr Sqlite QBaseScope))
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *) s.
(Database be db, BeamSqlBackend be) =>
DatabaseEntity be db (TableEntity table)
-> Q be db s (table (QExpr be s))
all_ ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
#genreOpinions) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
        case Maybe (GenreOpinionT Identity)
exOpinion of
          Maybe (GenreOpinionT Identity)
Nothing ->
            IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
              (IO () -> m ())
-> (SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
    -> IO ())
-> SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
              (SqliteM () -> IO ())
-> (SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
    -> SqliteM ())
-> SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlInsert Sqlite GenreOpinionT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlInsert be table -> m ()
runInsert
              (SqlInsert Sqlite GenreOpinionT -> SqliteM ())
-> (SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
    -> SqlInsert Sqlite GenreOpinionT)
-> SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
-> SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
-> SqlInsert Sqlite GenreOpinionT
forall be (table :: (* -> *) -> *) s (db :: (* -> *) -> *).
(BeamSqlBackend be,
 ProjectibleWithPredicate AnyType () Text (table (QField s))) =>
DatabaseEntity be db (TableEntity table)
-> SqlInsertValues be (table (QExpr be s)) -> SqlInsert be table
insert ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
#genreOpinions) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
              (SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any)) -> m ())
-> SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
-> m ()
forall a b. (a -> b) -> a -> b
$ [GenreOpinionT Identity]
-> SqlInsertValues Sqlite (GenreOpinionT (QExpr Sqlite Any))
forall be (table :: (* -> *) -> *) s.
(BeamSqlBackend be, Beamable table,
 FieldsFulfillConstraint (BeamSqlBackendCanSerialize be) table) =>
[table Identity] -> SqlInsertValues be (table (QExpr be s))
insertValues [GenreOpinion -> GenreOpinionT Identity
mkGenreOpinionP GenreOpinion
o]
          Just GenreOpinionT Identity
oo -> do
            let newO :: GenreOpinionT Identity
newO =
                  ( GenreOpinionT Identity
oo
                      { isLike = o ^. #opinion % #isLike,
                        isDislike = o ^. #opinion % #isDislike,
                        lastEditedAt = o ^. #opinion % #lastEditedAt
                      }
                  ) ::
                    GenreOpinion'
            IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
              (IO () -> m ())
-> (SqlUpdate Sqlite GenreOpinionT -> IO ())
-> SqlUpdate Sqlite GenreOpinionT
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
              (SqliteM () -> IO ())
-> (SqlUpdate Sqlite GenreOpinionT -> SqliteM ())
-> SqlUpdate Sqlite GenreOpinionT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlUpdate Sqlite GenreOpinionT -> SqliteM ()
forall be (m :: * -> *) (tbl :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlUpdate be tbl -> m ()
runUpdate
              (SqlUpdate Sqlite GenreOpinionT -> m ())
-> SqlUpdate Sqlite GenreOpinionT -> m ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
-> GenreOpinionT Identity -> SqlUpdate Sqlite GenreOpinionT
forall (table :: (* -> *) -> *) be (db :: (* -> *) -> *).
(Table table, BeamSqlBackend be,
 SqlValableTable be (PrimaryKey table), SqlValableTable be table,
 HasTableEquality be (PrimaryKey table)) =>
DatabaseEntity be db (TableEntity table)
-> table Identity -> SqlUpdate be table
save ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
#genreOpinions) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase) GenreOpinionT Identity
newO
        () -> m ()
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
    )
    [GenreOpinion]
opinions

  Map UUID GenreOpinion -> m (Map UUID GenreOpinion)
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map UUID GenreOpinion
forall k a. Map k a
Map.empty

uberDeleteGenres :: (MonadIO m) => Env -> [UUID] -> m (Either GenreCommandError ())
uberDeleteGenres :: forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
uberDeleteGenres Env
env [UUID]
identifiers = do
  Either GenreCommandError ()
deleteArtworksOfGenresResult <- IO (Either GenreCommandError ()) -> m (Either GenreCommandError ())
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> (Free GenreCommand (Either GenreCommandError ())
    -> IO (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. Exec f => Free f a -> IO a
exec @GenreCommand (Free GenreCommand (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ Env -> [UUID] -> Free GenreCommand (Either GenreCommandError ())
forall (f :: * -> *).
(GenreCommand :<: f) =>
Env -> [UUID] -> Free f (Either GenreCommandError ())
deleteArtworksOfGenres Env
env [UUID]
identifiers
  Either GenreCommandError ()
deleteOpinionsOfGenresResult <- IO (Either GenreCommandError ()) -> m (Either GenreCommandError ())
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> (Free GenreCommand (Either GenreCommandError ())
    -> IO (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. Exec f => Free f a -> IO a
exec @GenreCommand (Free GenreCommand (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ Env -> [UUID] -> Free GenreCommand (Either GenreCommandError ())
forall (f :: * -> *).
(GenreCommand :<: f) =>
Env -> [UUID] -> Free f (Either GenreCommandError ())
deleteOpinionsOfGenres Env
env [UUID]
identifiers
  Either GenreCommandError ()
deleteCommentsOfGenresResult <- IO (Either GenreCommandError ()) -> m (Either GenreCommandError ())
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> (Free GenreCommand (Either GenreCommandError ())
    -> IO (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. Exec f => Free f a -> IO a
exec @GenreCommand (Free GenreCommand (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ Env -> [UUID] -> Free GenreCommand (Either GenreCommandError ())
forall (f :: * -> *).
(GenreCommand :<: f) =>
Env -> [UUID] -> Free f (Either GenreCommandError ())
deleteCommentsOfGenres Env
env [UUID]
identifiers
  Either GenreCommandError ()
deleteGenreExternalSourcesResult <- IO (Either GenreCommandError ()) -> m (Either GenreCommandError ())
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> (Free GenreCommand (Either GenreCommandError ())
    -> IO (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (f :: * -> *) a. Exec f => Free f a -> IO a
exec @GenreCommand (Free GenreCommand (Either GenreCommandError ())
 -> m (Either GenreCommandError ()))
-> Free GenreCommand (Either GenreCommandError ())
-> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ Env -> [UUID] -> Free GenreCommand (Either GenreCommandError ())
forall (f :: * -> *).
(GenreCommand :<: f) =>
Env -> [UUID] -> Free f (Either GenreCommandError ())
deleteGenreExternalSources Env
env [UUID]
identifiers
  Either GenreCommandError ()
deleteGenresResult <- Env -> [UUID] -> m (Either GenreCommandError ())
forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
doDeleteGenres' Env
env [UUID]
identifiers
  Either GenreCommandError () -> m (Either GenreCommandError ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Either GenreCommandError () -> m (Either GenreCommandError ()))
-> Either GenreCommandError () -> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ Either GenreCommandError ()
deleteArtworksOfGenresResult
    Either GenreCommandError ()
-> Either GenreCommandError () -> Either GenreCommandError ()
forall a. Semigroup a => a -> a -> a
<> Either GenreCommandError ()
deleteOpinionsOfGenresResult
    Either GenreCommandError ()
-> Either GenreCommandError () -> Either GenreCommandError ()
forall a. Semigroup a => a -> a -> a
<> Either GenreCommandError ()
deleteGenreExternalSourcesResult
    Either GenreCommandError ()
-> Either GenreCommandError () -> Either GenreCommandError ()
forall a. Semigroup a => a -> a -> a
<> Either GenreCommandError ()
deleteCommentsOfGenresResult
    Either GenreCommandError ()
-> Either GenreCommandError () -> Either GenreCommandError ()
forall a. Semigroup a => a -> a -> a
<> Either GenreCommandError ()
deleteGenresResult

doDeleteGenres' :: (MonadIO m) => Env -> [UUID] -> m (Either GenreCommandError ())
doDeleteGenres' :: forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
doDeleteGenres' Env
env [UUID]
identifiers = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlDelete Sqlite GenreT -> IO ())
-> SqlDelete Sqlite GenreT
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreT -> SqliteM ())
-> SqlDelete Sqlite GenreT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
    (SqlDelete Sqlite GenreT -> m ())
-> SqlDelete Sqlite GenreT -> m ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
-> (forall s.
    (forall s'. GenreT (QExpr Sqlite s')) -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete
      ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
-> DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
#genres) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
      (\forall s'. GenreT (QExpr Sqlite s')
c -> (GenreT (QGenExpr QValueContext Sqlite s)
forall s'. GenreT (QExpr Sqlite s')
c GenreT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreT (QGenExpr QValueContext Sqlite s))
     (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreT (QGenExpr QValueContext Sqlite s))
  (QGenExpr QValueContext Sqlite s Text)
#identifier) QGenExpr QValueContext Sqlite s Text
-> [QGenExpr QValueContext Sqlite s Text] -> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlIn expr a => a -> [a] -> expr Bool
`in_` (UUID -> QGenExpr QValueContext Sqlite s Text)
-> [UUID] -> [QGenExpr QValueContext Sqlite s Text]
forall a b. (a -> b) -> [a] -> [b]
map (Text -> QGenExpr QValueContext Sqlite s Text
HaskellLiteralForQExpr (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (Text -> QGenExpr QValueContext Sqlite s Text)
-> (UUID -> Text) -> UUID -> QGenExpr QValueContext Sqlite s Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText) [UUID]
identifiers)
  Either GenreCommandError () -> m (Either GenreCommandError ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either GenreCommandError () -> m (Either GenreCommandError ()))
-> (() -> Either GenreCommandError ())
-> ()
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right (() -> m (Either GenreCommandError ()))
-> () -> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ ()

updateGenreArtworkOrder' :: (MonadIO m) => Env -> [GenreArtworkOrderUpdate] -> m (Either a ())
updateGenreArtworkOrder' :: forall (m :: * -> *) a.
MonadIO m =>
Env -> [GenreArtworkOrderUpdate] -> m (Either a ())
updateGenreArtworkOrder' Env
env [GenreArtworkOrderUpdate]
orderUpdates = do
  (GenreArtworkOrderUpdate -> m ())
-> [GenreArtworkOrderUpdate] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_
    ( \GenreArtworkOrderUpdate
ou -> do
        Maybe (GenreArtworkT Identity)
art <- IO (Maybe (GenreArtworkT Identity))
-> m (Maybe (GenreArtworkT Identity))
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe (GenreArtworkT Identity))
 -> m (Maybe (GenreArtworkT Identity)))
-> IO (Maybe (GenreArtworkT Identity))
-> m (Maybe (GenreArtworkT Identity))
forall a b. (a -> b) -> a -> b
$ (String -> IO ())
-> Connection
-> SqliteM (Maybe (GenreArtworkT Identity))
-> IO (Maybe (GenreArtworkT Identity))
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM (Maybe (GenreArtworkT Identity))
 -> IO (Maybe (GenreArtworkT Identity)))
-> SqliteM (Maybe (GenreArtworkT Identity))
-> IO (Maybe (GenreArtworkT Identity))
forall a b. (a -> b) -> a -> b
$ do
          SqlSelect Sqlite (GenreArtworkT Identity)
-> SqliteM (Maybe (GenreArtworkT Identity))
forall be (m :: * -> *) a.
(MonadBeam be m, BeamSqlBackend be, FromBackendRow be a) =>
SqlSelect be a -> m (Maybe a)
runSelectReturningOne (SqlSelect Sqlite (GenreArtworkT Identity)
 -> SqliteM (Maybe (GenreArtworkT Identity)))
-> SqlSelect Sqlite (GenreArtworkT Identity)
-> SqliteM (Maybe (GenreArtworkT Identity))
forall a b. (a -> b) -> a -> b
$ Q Sqlite
  WikiMusicDatabase
  QBaseScope
  (GenreArtworkT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite (QExprToIdentity (GenreArtworkT (QExpr Sqlite QBaseScope)))
forall be (db :: (* -> *) -> *) res.
(BeamSqlBackend be, HasQBuilder be, Projectible be res) =>
Q be db QBaseScope res -> SqlSelect be (QExprToIdentity res)
select (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreArtworkT (QExpr Sqlite QBaseScope))
 -> SqlSelect
      Sqlite (QExprToIdentity (GenreArtworkT (QExpr Sqlite QBaseScope))))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreArtworkT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite (QExprToIdentity (GenreArtworkT (QExpr Sqlite QBaseScope)))
forall a b. (a -> b) -> a -> b
$ do
            (GenreArtworkT (QExpr Sqlite QBaseScope)
 -> QExpr Sqlite QBaseScope Bool)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreArtworkT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreArtworkT (QExpr Sqlite QBaseScope))
forall r be (db :: (* -> *) -> *) s.
BeamSqlBackend be =>
(r -> QExpr be s Bool) -> Q be db s r -> Q be db s r
filter_
              (\GenreArtworkT (QExpr Sqlite QBaseScope)
s -> (GenreArtworkT (QExpr Sqlite QBaseScope)
s GenreArtworkT (QExpr Sqlite QBaseScope)
-> Optic'
     A_Lens
     NoIx
     (GenreArtworkT (QExpr Sqlite QBaseScope))
     (QGenExpr QValueContext Sqlite QBaseScope Text)
-> QGenExpr QValueContext Sqlite QBaseScope Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreArtworkT (QExpr Sqlite QBaseScope))
  (QGenExpr QValueContext Sqlite QBaseScope Text)
#identifier) QGenExpr QValueContext Sqlite QBaseScope Text
-> QGenExpr QValueContext Sqlite QBaseScope Text
-> QExpr Sqlite QBaseScope Bool
forall (expr :: * -> *) a. SqlEq expr a => a -> a -> expr Bool
==. HaskellLiteralForQExpr
  (QGenExpr QValueContext Sqlite QBaseScope Text)
-> QGenExpr QValueContext Sqlite QBaseScope Text
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (UUID -> Text
UUID.toText (UUID -> Text) -> UUID -> Text
forall a b. (a -> b) -> a -> b
$ GenreArtworkOrderUpdate
ou GenreArtworkOrderUpdate
-> Optic' A_Lens NoIx GenreArtworkOrderUpdate UUID -> UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx GenreArtworkOrderUpdate UUID
#identifier))
              (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreArtworkT (QExpr Sqlite QBaseScope))
 -> Q Sqlite
      WikiMusicDatabase
      QBaseScope
      (GenreArtworkT (QExpr Sqlite QBaseScope)))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreArtworkT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreArtworkT (QExpr Sqlite QBaseScope))
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreArtworkT (QExpr Sqlite QBaseScope))
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *) s.
(Database be db, BeamSqlBackend be) =>
DatabaseEntity be db (TableEntity table)
-> Q be db s (table (QExpr be s))
all_ ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
#genreArtworks) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
        case Maybe (GenreArtworkT Identity)
art of
          Maybe (GenreArtworkT Identity)
Nothing -> () -> m ()
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
          Just GenreArtworkT Identity
foundArt -> do
            let a :: GenreArtworkT Identity
a = GenreArtworkT Identity
foundArt {orderValue = fromIntegral $ ou ^. #orderValue} :: GenreArtwork'
            IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ())
-> (GenreArtworkT Identity -> IO ())
-> GenreArtworkT Identity
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM () -> IO ())
-> (GenreArtworkT Identity -> SqliteM ())
-> GenreArtworkT Identity
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlUpdate Sqlite GenreArtworkT -> SqliteM ()
forall be (m :: * -> *) (tbl :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlUpdate be tbl -> m ()
runUpdate (SqlUpdate Sqlite GenreArtworkT -> SqliteM ())
-> (GenreArtworkT Identity -> SqlUpdate Sqlite GenreArtworkT)
-> GenreArtworkT Identity
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
-> GenreArtworkT Identity -> SqlUpdate Sqlite GenreArtworkT
forall (table :: (* -> *) -> *) be (db :: (* -> *) -> *).
(Table table, BeamSqlBackend be,
 SqlValableTable be (PrimaryKey table), SqlValableTable be table,
 HasTableEquality be (PrimaryKey table)) =>
DatabaseEntity be db (TableEntity table)
-> table Identity -> SqlUpdate be table
save ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
#genreArtworks) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase) (GenreArtworkT Identity -> m ()) -> GenreArtworkT Identity -> m ()
forall a b. (a -> b) -> a -> b
$ GenreArtworkT Identity
a
    )
    [GenreArtworkOrderUpdate]
orderUpdates
  Either a () -> m (Either a ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either a () -> m (Either a ()))
-> (() -> Either a ()) -> () -> m (Either a ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either a ()
forall a b. b -> Either a b
Right (() -> m (Either a ())) -> () -> m (Either a ())
forall a b. (a -> b) -> a -> b
$ ()

updateGenres' :: (MonadIO m) => Env -> Map UUID (Genre, Maybe GenreDelta) -> m (Either Text ())
updateGenres' :: forall (m :: * -> *).
MonadIO m =>
Env -> Map UUID (Genre, Maybe GenreDelta) -> m (Either Text ())
updateGenres' Env
env Map UUID (Genre, Maybe GenreDelta)
deltas = do
  UTCTime
now <- IO UTCTime -> m UTCTime
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
  ((Genre, Maybe GenreDelta) -> m ())
-> [(Genre, Maybe GenreDelta)] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ (GenreT Identity -> m ()
save'' (GenreT Identity -> m ())
-> ((Genre, Maybe GenreDelta) -> GenreT Identity)
-> (Genre, Maybe GenreDelta)
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Genre -> GenreT Identity
toPersistenceGenre (Genre -> GenreT Identity)
-> ((Genre, Maybe GenreDelta) -> Genre)
-> (Genre, Maybe GenreDelta)
-> GenreT Identity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> (Genre, Maybe GenreDelta) -> Genre
doDelta UTCTime
now) (Map UUID (Genre, Maybe GenreDelta) -> [(Genre, Maybe GenreDelta)]
forall k a. Map k a -> [a]
Map.elems Map UUID (Genre, Maybe GenreDelta)
deltas)
  Either Text ()
exUpdate <- IO (Either Text ()) -> m (Either Text ())
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Either Text ()) -> m (Either Text ()))
-> IO (Either Text ()) -> m (Either Text ())
forall a b. (a -> b) -> a -> b
$ forall (f :: * -> *) a. Exec f => Free f a -> IO a
exec @GenreCommand (Free GenreCommand (Either Text ()) -> IO (Either Text ()))
-> Free GenreCommand (Either Text ()) -> IO (Either Text ())
forall a b. (a -> b) -> a -> b
$ Env
-> Map UUID (Genre, Maybe GenreDelta)
-> Free GenreCommand (Either Text ())
forall (f :: * -> *).
(GenreCommand :<: f) =>
Env
-> Map UUID (Genre, Maybe GenreDelta) -> Free f (Either Text ())
updateGenreExternalSources Env
env Map UUID (Genre, Maybe GenreDelta)
deltas
  Either Text () -> m (Either Text ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either Text () -> m (Either Text ()))
-> Either Text () -> m (Either Text ())
forall a b. (a -> b) -> a -> b
$ Either Text ()
exUpdate Either Text () -> Either Text () -> Either Text ()
forall a. Semigroup a => a -> a -> a
<> () -> Either Text ()
forall a b. b -> Either a b
Right ()
  where
    save'' :: GenreT Identity -> m ()
save'' GenreT Identity
x = IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ())
-> (SqlUpdate Sqlite GenreT -> IO ())
-> SqlUpdate Sqlite GenreT
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM () -> IO ())
-> (SqlUpdate Sqlite GenreT -> SqliteM ())
-> SqlUpdate Sqlite GenreT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlUpdate Sqlite GenreT -> SqliteM ()
forall be (m :: * -> *) (tbl :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlUpdate be tbl -> m ()
runUpdate (SqlUpdate Sqlite GenreT -> m ())
-> SqlUpdate Sqlite GenreT -> m ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
-> GenreT Identity -> SqlUpdate Sqlite GenreT
forall (table :: (* -> *) -> *) be (db :: (* -> *) -> *).
(Table table, BeamSqlBackend be,
 SqlValableTable be (PrimaryKey table), SqlValableTable be table,
 HasTableEquality be (PrimaryKey table)) =>
DatabaseEntity be db (TableEntity table)
-> table Identity -> SqlUpdate be table
save ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
-> DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
#genres) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase) GenreT Identity
x
    doDelta :: UTCTime -> (Genre, Maybe GenreDelta) -> Genre
    doDelta :: UTCTime -> (Genre, Maybe GenreDelta) -> Genre
doDelta UTCTime
now (Genre
x, Maybe GenreDelta
xDelta') =
      case Maybe GenreDelta
xDelta' of
        Maybe GenreDelta
Nothing -> Genre
x
        Just GenreDelta
xDelta ->
          Genre
x
            { displayName = fromMaybe (x ^. #displayName) (xDelta ^. #displayName),
              description = xDelta ^. #description,
              lastEditedAt = Just now
            }

updateGenreExternalSources' :: (MonadIO m) => Env -> Map UUID (Genre, Maybe GenreDelta) -> m (Either Text ())
updateGenreExternalSources' :: forall (m :: * -> *).
MonadIO m =>
Env -> Map UUID (Genre, Maybe GenreDelta) -> m (Either Text ())
updateGenreExternalSources' Env
env Map UUID (Genre, Maybe GenreDelta)
deltas = do
  UTCTime
now <- IO UTCTime -> m UTCTime
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
  ((Genre, Maybe GenreDelta) -> m ())
-> Map UUID (Genre, Maybe GenreDelta) -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_
    ( \(Genre
genre, Maybe GenreDelta
xDelta) -> do
        Maybe (GenreExternalSourcesT Identity)
ex <- IO (Maybe (GenreExternalSourcesT Identity))
-> m (Maybe (GenreExternalSourcesT Identity))
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe (GenreExternalSourcesT Identity))
 -> m (Maybe (GenreExternalSourcesT Identity)))
-> IO (Maybe (GenreExternalSourcesT Identity))
-> m (Maybe (GenreExternalSourcesT Identity))
forall a b. (a -> b) -> a -> b
$ (String -> IO ())
-> Connection
-> SqliteM (Maybe (GenreExternalSourcesT Identity))
-> IO (Maybe (GenreExternalSourcesT Identity))
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM (Maybe (GenreExternalSourcesT Identity))
 -> IO (Maybe (GenreExternalSourcesT Identity)))
-> SqliteM (Maybe (GenreExternalSourcesT Identity))
-> IO (Maybe (GenreExternalSourcesT Identity))
forall a b. (a -> b) -> a -> b
$ do
          SqlSelect Sqlite (GenreExternalSourcesT Identity)
-> SqliteM (Maybe (GenreExternalSourcesT Identity))
forall be (m :: * -> *) a.
(MonadBeam be m, BeamSqlBackend be, FromBackendRow be a) =>
SqlSelect be a -> m (Maybe a)
runSelectReturningOne (SqlSelect Sqlite (GenreExternalSourcesT Identity)
 -> SqliteM (Maybe (GenreExternalSourcesT Identity)))
-> SqlSelect Sqlite (GenreExternalSourcesT Identity)
-> SqliteM (Maybe (GenreExternalSourcesT Identity))
forall a b. (a -> b) -> a -> b
$ Q Sqlite
  WikiMusicDatabase
  QBaseScope
  (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite
     (QExprToIdentity (GenreExternalSourcesT (QExpr Sqlite QBaseScope)))
forall be (db :: (* -> *) -> *) res.
(BeamSqlBackend be, HasQBuilder be, Projectible be res) =>
Q be db QBaseScope res -> SqlSelect be (QExprToIdentity res)
select (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
 -> SqlSelect
      Sqlite
      (QExprToIdentity
         (GenreExternalSourcesT (QExpr Sqlite QBaseScope))))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite
     (QExprToIdentity (GenreExternalSourcesT (QExpr Sqlite QBaseScope)))
forall a b. (a -> b) -> a -> b
$ do
            (GenreExternalSourcesT (QExpr Sqlite QBaseScope)
 -> QExpr Sqlite QBaseScope Bool)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
forall r be (db :: (* -> *) -> *) s.
BeamSqlBackend be =>
(r -> QExpr be s Bool) -> Q be db s r -> Q be db s r
filter_
              (\GenreExternalSourcesT (QExpr Sqlite QBaseScope)
s -> (GenreExternalSourcesT (QExpr Sqlite QBaseScope)
s GenreExternalSourcesT (QExpr Sqlite QBaseScope)
-> Optic'
     A_Lens
     NoIx
     (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
     (PrimaryKey GenreT (QExpr Sqlite QBaseScope))
-> PrimaryKey GenreT (QExpr Sqlite QBaseScope)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
  (PrimaryKey GenreT (QExpr Sqlite QBaseScope))
#genreIdentifier) PrimaryKey GenreT (QExpr Sqlite QBaseScope)
-> PrimaryKey GenreT (QExpr Sqlite QBaseScope)
-> QExpr Sqlite QBaseScope Bool
forall (expr :: * -> *) a. SqlEq expr a => a -> a -> expr Bool
==. HaskellLiteralForQExpr
  (PrimaryKey GenreT (QExpr Sqlite QBaseScope))
-> PrimaryKey GenreT (QExpr Sqlite QBaseScope)
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (Columnar Identity Text -> PrimaryKey GenreT Identity
forall (f :: * -> *). Columnar f Text -> PrimaryKey GenreT f
GenreId (Columnar Identity Text -> PrimaryKey GenreT Identity)
-> Columnar Identity Text -> PrimaryKey GenreT Identity
forall a b. (a -> b) -> a -> b
$ UUID -> Text
UUID.toText (UUID -> Text) -> UUID -> Text
forall a b. (a -> b) -> a -> b
$ Genre
genre Genre -> Optic' A_Lens NoIx Genre UUID -> UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Genre UUID
#identifier))
              (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
 -> Q Sqlite
      WikiMusicDatabase
      QBaseScope
      (GenreExternalSourcesT (QExpr Sqlite QBaseScope)))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
forall a b. (a -> b) -> a -> b
$ DatabaseEntity
  Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreExternalSourcesT (QExpr Sqlite QBaseScope))
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *) s.
(Database be db, BeamSqlBackend be) =>
DatabaseEntity be db (TableEntity table)
-> Q be db s (table (QExpr be s))
all_ ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
#genreExternalSources) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
        case Maybe (GenreExternalSourcesT Identity)
ex of
          Maybe (GenreExternalSourcesT Identity)
Nothing -> () -> m ()
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
          Just GenreExternalSourcesT Identity
foundEx -> do
            let a :: GenreExternalSourcesT Identity
a =
                  GenreExternalSourcesT Identity
foundEx
                    { spotifyUrl = (^. #spotifyUrl) =<< xDelta,
                      wikipediaUrl = (^. #wikipediaUrl) =<< xDelta,
                      soundcloudUrl = (^. #soundcloudUrl) =<< xDelta,
                      youtubeUrl = (^. #youtubeUrl) =<< xDelta,
                      lastEditedAt = Just now
                    } ::
                    GenreExternalSources'
            IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ())
-> (GenreExternalSourcesT Identity -> IO ())
-> GenreExternalSourcesT Identity
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM () -> IO ())
-> (GenreExternalSourcesT Identity -> SqliteM ())
-> GenreExternalSourcesT Identity
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlUpdate Sqlite GenreExternalSourcesT -> SqliteM ()
forall be (m :: * -> *) (tbl :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlUpdate be tbl -> m ()
runUpdate (SqlUpdate Sqlite GenreExternalSourcesT -> SqliteM ())
-> (GenreExternalSourcesT Identity
    -> SqlUpdate Sqlite GenreExternalSourcesT)
-> GenreExternalSourcesT Identity
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity
  Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
-> GenreExternalSourcesT Identity
-> SqlUpdate Sqlite GenreExternalSourcesT
forall (table :: (* -> *) -> *) be (db :: (* -> *) -> *).
(Table table, BeamSqlBackend be,
 SqlValableTable be (PrimaryKey table), SqlValableTable be table,
 HasTableEquality be (PrimaryKey table)) =>
DatabaseEntity be db (TableEntity table)
-> table Identity -> SqlUpdate be table
save ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
#genreExternalSources) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase) (GenreExternalSourcesT Identity -> m ())
-> GenreExternalSourcesT Identity -> m ()
forall a b. (a -> b) -> a -> b
$ GenreExternalSourcesT Identity
a
    )
    Map UUID (Genre, Maybe GenreDelta)
deltas
  Either Text () -> m (Either Text ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either Text () -> m (Either Text ()))
-> (() -> Either Text ()) -> () -> m (Either Text ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either Text ()
forall a b. b -> Either a b
Right (() -> m (Either Text ())) -> () -> m (Either Text ())
forall a b. (a -> b) -> a -> b
$ ()

newGenreArtworkFromRequest' :: (MonadIO m) => UUID -> InsertGenreArtworksRequestItem -> m GenreArtwork
newGenreArtworkFromRequest' :: forall (m :: * -> *).
MonadIO m =>
UUID -> InsertGenreArtworksRequestItem -> m GenreArtwork
newGenreArtworkFromRequest' UUID
createdBy InsertGenreArtworksRequestItem
req = do
  UUID
newUUID <- IO UUID -> m UUID
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UUID
nextRandom
  UTCTime
now <- IO UTCTime -> m UTCTime
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
  GenreArtwork -> m GenreArtwork
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (GenreArtwork -> m GenreArtwork) -> GenreArtwork -> m GenreArtwork
forall a b. (a -> b) -> a -> b
$ GenreArtwork
      { $sel:genreIdentifier:GenreArtwork :: UUID
genreIdentifier = InsertGenreArtworksRequestItem
req InsertGenreArtworksRequestItem
-> Optic' A_Lens NoIx InsertGenreArtworksRequestItem UUID -> UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenreArtworksRequestItem UUID
#genreIdentifier,
        $sel:artwork:GenreArtwork :: Artwork
artwork =
          Artwork
            { $sel:identifier:Artwork :: UUID
identifier = UUID
newUUID,
              $sel:createdBy:Artwork :: UUID
createdBy = UUID
createdBy,
              $sel:contentUrl:Artwork :: Text
contentUrl = InsertGenreArtworksRequestItem
req InsertGenreArtworksRequestItem
-> Optic' A_Lens NoIx InsertGenreArtworksRequestItem Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenreArtworksRequestItem Text
#contentUrl,
              $sel:contentCaption:Artwork :: Maybe Text
contentCaption = InsertGenreArtworksRequestItem
req InsertGenreArtworksRequestItem
-> Optic' A_Lens NoIx InsertGenreArtworksRequestItem (Maybe Text)
-> Maybe Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenreArtworksRequestItem (Maybe Text)
#contentCaption,
              $sel:createdAt:Artwork :: UTCTime
createdAt = UTCTime
now,
              $sel:lastEditedAt:Artwork :: Maybe UTCTime
lastEditedAt = Maybe UTCTime
forall a. Maybe a
Nothing,
              $sel:visibilityStatus:Artwork :: Int
visibilityStatus = Int
0,
              $sel:approvedBy:Artwork :: Maybe UUID
approvedBy = Maybe UUID
forall a. Maybe a
Nothing,
              $sel:orderValue:Artwork :: Int
orderValue = InsertGenreArtworksRequestItem
req InsertGenreArtworksRequestItem
-> Optic' A_Lens NoIx InsertGenreArtworksRequestItem Int -> Int
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenreArtworksRequestItem Int
#orderValue
            }
      }

newGenreOpinionFromRequest' :: (MonadIO m) => UUID -> UpsertGenreOpinionsRequestItem -> m GenreOpinion
newGenreOpinionFromRequest' :: forall (m :: * -> *).
MonadIO m =>
UUID -> UpsertGenreOpinionsRequestItem -> m GenreOpinion
newGenreOpinionFromRequest' UUID
createdBy UpsertGenreOpinionsRequestItem
req = do
  UUID
newUUID <- IO UUID -> m UUID
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UUID
nextRandom
  UTCTime
now <- IO UTCTime -> m UTCTime
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
  GenreOpinion -> m GenreOpinion
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (GenreOpinion -> m GenreOpinion) -> GenreOpinion -> m GenreOpinion
forall a b. (a -> b) -> a -> b
$ GenreOpinion
      { $sel:genreIdentifier:GenreOpinion :: UUID
genreIdentifier = UpsertGenreOpinionsRequestItem
req UpsertGenreOpinionsRequestItem
-> Optic' A_Lens NoIx UpsertGenreOpinionsRequestItem UUID -> UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx UpsertGenreOpinionsRequestItem UUID
#genreIdentifier,
        $sel:opinion:GenreOpinion :: Opinion
opinion =
          Opinion
            { $sel:identifier:Opinion :: UUID
identifier = UUID
newUUID,
              $sel:createdBy:Opinion :: UUID
createdBy = UUID
createdBy,
              $sel:isLike:Opinion :: Bool
isLike = UpsertGenreOpinionsRequestItem
req UpsertGenreOpinionsRequestItem
-> Optic' A_Lens NoIx UpsertGenreOpinionsRequestItem Bool -> Bool
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx UpsertGenreOpinionsRequestItem Bool
#isLike,
              $sel:isDislike:Opinion :: Bool
isDislike = Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ UpsertGenreOpinionsRequestItem
req UpsertGenreOpinionsRequestItem
-> Optic' A_Lens NoIx UpsertGenreOpinionsRequestItem Bool -> Bool
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx UpsertGenreOpinionsRequestItem Bool
#isLike,
              $sel:createdAt:Opinion :: UTCTime
createdAt = UTCTime
now,
              $sel:lastEditedAt:Opinion :: Maybe UTCTime
lastEditedAt = Maybe UTCTime
forall a. Maybe a
Nothing
            }
      }

newGenreFromRequest' :: (MonadIO m) => UUID -> InsertGenresRequestItem -> m Genre
newGenreFromRequest' :: forall (m :: * -> *).
MonadIO m =>
UUID -> InsertGenresRequestItem -> m Genre
newGenreFromRequest' UUID
createdBy InsertGenresRequestItem
req = do
  UUID
newUUID <- IO UUID -> m UUID
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UUID
nextRandom
  UTCTime
now <- IO UTCTime -> m UTCTime
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
  Genre -> m Genre
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (Genre -> m Genre) -> Genre -> m Genre
forall a b. (a -> b) -> a -> b
$ Genre
      { $sel:identifier:Genre :: UUID
identifier = UUID
newUUID,
        $sel:parentIdentifier:Genre :: Maybe UUID
parentIdentifier = Maybe UUID
forall a. Maybe a
Nothing,
        $sel:displayName:Genre :: Text
displayName = InsertGenresRequestItem
req InsertGenresRequestItem
-> Optic' A_Lens NoIx InsertGenresRequestItem Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenresRequestItem Text
#displayName,
        $sel:createdBy:Genre :: UUID
createdBy = UUID
createdBy,
        $sel:visibilityStatus:Genre :: Int
visibilityStatus = Int
0,
        $sel:approvedBy:Genre :: Maybe UUID
approvedBy = Maybe UUID
forall a. Maybe a
Nothing,
        $sel:createdAt:Genre :: UTCTime
createdAt = UTCTime
now,
        $sel:lastEditedAt:Genre :: Maybe UTCTime
lastEditedAt = Maybe UTCTime
forall a. Maybe a
Nothing,
        $sel:artworks:Genre :: Map UUID GenreArtwork
artworks = [Item (Map UUID GenreArtwork)] -> Map UUID GenreArtwork
forall l. IsList l => [Item l] -> l
fromList [],
        $sel:comments:Genre :: [ThreadRender GenreComment]
comments = [],
        $sel:opinions:Genre :: Map UUID GenreOpinion
opinions = [Item (Map UUID GenreOpinion)] -> Map UUID GenreOpinion
forall l. IsList l => [Item l] -> l
fromList [],
        $sel:spotifyUrl:Genre :: Maybe Text
spotifyUrl = InsertGenresRequestItem
req InsertGenresRequestItem
-> Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
-> Maybe Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
#spotifyUrl,
        $sel:youtubeUrl:Genre :: Maybe Text
youtubeUrl = InsertGenresRequestItem
req InsertGenresRequestItem
-> Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
-> Maybe Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
#youtubeUrl,
        $sel:soundcloudUrl:Genre :: Maybe Text
soundcloudUrl = InsertGenresRequestItem
req InsertGenresRequestItem
-> Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
-> Maybe Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
#soundcloudUrl,
        $sel:wikipediaUrl:Genre :: Maybe Text
wikipediaUrl = InsertGenresRequestItem
req InsertGenresRequestItem
-> Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
-> Maybe Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
#wikipediaUrl,
        $sel:viewCount:Genre :: Int
viewCount = Int
0,
        $sel:description:Genre :: Maybe Text
description = InsertGenresRequestItem
req InsertGenresRequestItem
-> Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
-> Maybe Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenresRequestItem (Maybe Text)
#description
      }

newGenreCommentFromRequest' :: (MonadIO m) => UUID -> InsertGenreCommentsRequestItem -> m GenreComment
newGenreCommentFromRequest' :: forall (m :: * -> *).
MonadIO m =>
UUID -> InsertGenreCommentsRequestItem -> m GenreComment
newGenreCommentFromRequest' UUID
createdBy InsertGenreCommentsRequestItem
x = do
  UUID
newUUID <- IO UUID -> m UUID
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UUID
nextRandom
  UTCTime
now <- IO UTCTime -> m UTCTime
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO IO UTCTime
getCurrentTime
  GenreComment -> m GenreComment
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure
    (GenreComment -> m GenreComment) -> GenreComment -> m GenreComment
forall a b. (a -> b) -> a -> b
$ GenreComment
      { $sel:genreIdentifier:GenreComment :: UUID
genreIdentifier = InsertGenreCommentsRequestItem
x InsertGenreCommentsRequestItem
-> Optic' A_Lens NoIx InsertGenreCommentsRequestItem UUID -> UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenreCommentsRequestItem UUID
#genreIdentifier,
        $sel:comment:GenreComment :: Comment
comment =
          Comment
            { $sel:identifier:Comment :: UUID
identifier = UUID
newUUID,
              $sel:parentIdentifier:Comment :: Maybe UUID
parentIdentifier = InsertGenreCommentsRequestItem
x InsertGenreCommentsRequestItem
-> Optic' A_Lens NoIx InsertGenreCommentsRequestItem (Maybe UUID)
-> Maybe UUID
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenreCommentsRequestItem (Maybe UUID)
#parentIdentifier,
              $sel:createdBy:Comment :: UUID
createdBy = UUID
createdBy,
              $sel:visibilityStatus:Comment :: Int
visibilityStatus = Int
0,
              $sel:contents:Comment :: Text
contents = InsertGenreCommentsRequestItem
x InsertGenreCommentsRequestItem
-> Optic' A_Lens NoIx InsertGenreCommentsRequestItem Text -> Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx InsertGenreCommentsRequestItem Text
#contents,
              $sel:approvedBy:Comment :: Maybe UUID
approvedBy = Maybe UUID
forall a. Maybe a
Nothing,
              $sel:createdAt:Comment :: UTCTime
createdAt = UTCTime
now,
              $sel:lastEditedAt:Comment :: Maybe UTCTime
lastEditedAt = Maybe UTCTime
forall a. Maybe a
Nothing
            }
      }

deleteGenreComments' :: (MonadIO m) => Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreComments' :: forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreComments' Env
env [UUID]
identifiers = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlDelete Sqlite GenreCommentT -> IO ())
-> SqlDelete Sqlite GenreCommentT
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreCommentT -> SqliteM ())
-> SqlDelete Sqlite GenreCommentT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreCommentT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
    (SqlDelete Sqlite GenreCommentT -> m ())
-> SqlDelete Sqlite GenreCommentT -> m ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreCommentT)
-> (forall s.
    (forall s'. GenreCommentT (QExpr Sqlite s'))
    -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreCommentT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete
      ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreCommentT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreCommentT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreCommentT))
#genreComments) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
      (\forall s'. GenreCommentT (QExpr Sqlite s')
c -> (GenreCommentT (QGenExpr QValueContext Sqlite s)
forall s'. GenreCommentT (QExpr Sqlite s')
c GenreCommentT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreCommentT (QGenExpr QValueContext Sqlite s))
     (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreCommentT (QGenExpr QValueContext Sqlite s))
  (QGenExpr QValueContext Sqlite s Text)
#identifier) QGenExpr QValueContext Sqlite s Text
-> [QGenExpr QValueContext Sqlite s Text] -> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlIn expr a => a -> [a] -> expr Bool
`in_` (UUID -> QGenExpr QValueContext Sqlite s Text)
-> [UUID] -> [QGenExpr QValueContext Sqlite s Text]
forall a b. (a -> b) -> [a] -> [b]
map (Text -> QGenExpr QValueContext Sqlite s Text
HaskellLiteralForQExpr (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (Text -> QGenExpr QValueContext Sqlite s Text)
-> (UUID -> Text) -> UUID -> QGenExpr QValueContext Sqlite s Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText) [UUID]
identifiers)
  Either GenreCommandError () -> m (Either GenreCommandError ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either GenreCommandError () -> m (Either GenreCommandError ()))
-> (() -> Either GenreCommandError ())
-> ()
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right (() -> m (Either GenreCommandError ()))
-> () -> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ ()

deleteGenreArtworks' :: (MonadIO m) => Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreArtworks' :: forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreArtworks' Env
env [UUID]
identifiers = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlDelete Sqlite GenreArtworkT -> IO ())
-> SqlDelete Sqlite GenreArtworkT
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreArtworkT -> SqliteM ())
-> SqlDelete Sqlite GenreArtworkT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreArtworkT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
    (SqlDelete Sqlite GenreArtworkT -> m ())
-> SqlDelete Sqlite GenreArtworkT -> m ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
-> (forall s.
    (forall s'. GenreArtworkT (QExpr Sqlite s'))
    -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreArtworkT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete
      ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
#genreArtworks) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
      (\forall s'. GenreArtworkT (QExpr Sqlite s')
c -> (GenreArtworkT (QGenExpr QValueContext Sqlite s)
forall s'. GenreArtworkT (QExpr Sqlite s')
c GenreArtworkT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreArtworkT (QGenExpr QValueContext Sqlite s))
     (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreArtworkT (QGenExpr QValueContext Sqlite s))
  (QGenExpr QValueContext Sqlite s Text)
#identifier) QGenExpr QValueContext Sqlite s Text
-> [QGenExpr QValueContext Sqlite s Text] -> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlIn expr a => a -> [a] -> expr Bool
`in_` (UUID -> QGenExpr QValueContext Sqlite s Text)
-> [UUID] -> [QGenExpr QValueContext Sqlite s Text]
forall a b. (a -> b) -> [a] -> [b]
map (Text -> QGenExpr QValueContext Sqlite s Text
HaskellLiteralForQExpr (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (Text -> QGenExpr QValueContext Sqlite s Text)
-> (UUID -> Text) -> UUID -> QGenExpr QValueContext Sqlite s Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText) [UUID]
identifiers)
  Either GenreCommandError () -> m (Either GenreCommandError ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either GenreCommandError () -> m (Either GenreCommandError ()))
-> (() -> Either GenreCommandError ())
-> ()
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right (() -> m (Either GenreCommandError ()))
-> () -> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ ()

deleteGenreOpinions' :: (MonadIO m) => Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreOpinions' :: forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreOpinions' Env
env [UUID]
identifiers = do
  IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
    (IO () -> m ())
-> (SqlDelete Sqlite GenreOpinionT -> IO ())
-> SqlDelete Sqlite GenreOpinionT
-> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
    (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreOpinionT -> SqliteM ())
-> SqlDelete Sqlite GenreOpinionT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreOpinionT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
    (SqlDelete Sqlite GenreOpinionT -> m ())
-> SqlDelete Sqlite GenreOpinionT -> m ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
-> (forall s.
    (forall s'. GenreOpinionT (QExpr Sqlite s'))
    -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreOpinionT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete
      ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
#genreOpinions) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
      (\forall s'. GenreOpinionT (QExpr Sqlite s')
c -> (GenreOpinionT (QGenExpr QValueContext Sqlite s)
forall s'. GenreOpinionT (QExpr Sqlite s')
c GenreOpinionT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreOpinionT (QGenExpr QValueContext Sqlite s))
     (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreOpinionT (QGenExpr QValueContext Sqlite s))
  (QGenExpr QValueContext Sqlite s Text)
#identifier) QGenExpr QValueContext Sqlite s Text
-> [QGenExpr QValueContext Sqlite s Text] -> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlIn expr a => a -> [a] -> expr Bool
`in_` (UUID -> QGenExpr QValueContext Sqlite s Text)
-> [UUID] -> [QGenExpr QValueContext Sqlite s Text]
forall a b. (a -> b) -> [a] -> [b]
map (Text -> QGenExpr QValueContext Sqlite s Text
HaskellLiteralForQExpr (QGenExpr QValueContext Sqlite s Text)
-> QGenExpr QValueContext Sqlite s Text
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (Text -> QGenExpr QValueContext Sqlite s Text)
-> (UUID -> Text) -> UUID -> QGenExpr QValueContext Sqlite s Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText) [UUID]
identifiers)
  Either GenreCommandError () -> m (Either GenreCommandError ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either GenreCommandError () -> m (Either GenreCommandError ()))
-> (() -> Either GenreCommandError ())
-> ()
-> m (Either GenreCommandError ())
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right (() -> m (Either GenreCommandError ()))
-> () -> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ ()

incrementViewsByOne' :: (MonadIO m) => Env -> [UUID] -> m (Either GenreCommandError ())
incrementViewsByOne' :: forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
incrementViewsByOne' Env
env [UUID]
identifiers = do
  (UUID -> m ()) -> [UUID] -> m ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ UUID -> m ()
doUpdate [UUID]
identifiers
  Either GenreCommandError () -> m (Either GenreCommandError ())
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure (Either GenreCommandError () -> m (Either GenreCommandError ()))
-> Either GenreCommandError () -> m (Either GenreCommandError ())
forall a b. (a -> b) -> a -> b
$ () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right ()
  where
    doUpdate :: UUID -> m ()
doUpdate UUID
x = do
      Maybe (GenreT Identity)
ex <- IO (Maybe (GenreT Identity)) -> m (Maybe (GenreT Identity))
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO (Maybe (GenreT Identity)) -> m (Maybe (GenreT Identity)))
-> IO (Maybe (GenreT Identity)) -> m (Maybe (GenreT Identity))
forall a b. (a -> b) -> a -> b
$ (String -> IO ())
-> Connection
-> SqliteM (Maybe (GenreT Identity))
-> IO (Maybe (GenreT Identity))
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM (Maybe (GenreT Identity)) -> IO (Maybe (GenreT Identity)))
-> SqliteM (Maybe (GenreT Identity))
-> IO (Maybe (GenreT Identity))
forall a b. (a -> b) -> a -> b
$ do
        SqlSelect Sqlite (GenreT Identity)
-> SqliteM (Maybe (GenreT Identity))
forall be (m :: * -> *) a.
(MonadBeam be m, BeamSqlBackend be, FromBackendRow be a) =>
SqlSelect be a -> m (Maybe a)
runSelectReturningOne (SqlSelect Sqlite (GenreT Identity)
 -> SqliteM (Maybe (GenreT Identity)))
-> SqlSelect Sqlite (GenreT Identity)
-> SqliteM (Maybe (GenreT Identity))
forall a b. (a -> b) -> a -> b
$ Q Sqlite
  WikiMusicDatabase
  QBaseScope
  (GenreT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite (QExprToIdentity (GenreT (QExpr Sqlite QBaseScope)))
forall be (db :: (* -> *) -> *) res.
(BeamSqlBackend be, HasQBuilder be, Projectible be res) =>
Q be db QBaseScope res -> SqlSelect be (QExprToIdentity res)
select (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreT (QExpr Sqlite QBaseScope))
 -> SqlSelect
      Sqlite (QExprToIdentity (GenreT (QExpr Sqlite QBaseScope))))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreT (QExpr Sqlite QBaseScope))
-> SqlSelect
     Sqlite (QExprToIdentity (GenreT (QExpr Sqlite QBaseScope)))
forall a b. (a -> b) -> a -> b
$ do
          (GenreT (QExpr Sqlite QBaseScope) -> QExpr Sqlite QBaseScope Bool)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreT (QExpr Sqlite QBaseScope))
forall r be (db :: (* -> *) -> *) s.
BeamSqlBackend be =>
(r -> QExpr be s Bool) -> Q be db s r -> Q be db s r
filter_
            (\GenreT (QExpr Sqlite QBaseScope)
s -> (GenreT (QExpr Sqlite QBaseScope)
s GenreT (QExpr Sqlite QBaseScope)
-> Optic'
     A_Lens
     NoIx
     (GenreT (QExpr Sqlite QBaseScope))
     (QGenExpr QValueContext Sqlite QBaseScope Text)
-> QGenExpr QValueContext Sqlite QBaseScope Text
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreT (QExpr Sqlite QBaseScope))
  (QGenExpr QValueContext Sqlite QBaseScope Text)
#identifier) QGenExpr QValueContext Sqlite QBaseScope Text
-> QGenExpr QValueContext Sqlite QBaseScope Text
-> QExpr Sqlite QBaseScope Bool
forall (expr :: * -> *) a. SqlEq expr a => a -> a -> expr Bool
==. (Text -> QGenExpr QValueContext Sqlite QBaseScope Text
HaskellLiteralForQExpr
  (QGenExpr QValueContext Sqlite QBaseScope Text)
-> QGenExpr QValueContext Sqlite QBaseScope Text
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (Text -> QGenExpr QValueContext Sqlite QBaseScope Text)
-> (UUID -> Text)
-> UUID
-> QGenExpr QValueContext Sqlite QBaseScope Text
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText (UUID -> QGenExpr QValueContext Sqlite QBaseScope Text)
-> UUID -> QGenExpr QValueContext Sqlite QBaseScope Text
forall a b. (a -> b) -> a -> b
$ UUID
x))
            (Q Sqlite
   WikiMusicDatabase
   QBaseScope
   (GenreT (QExpr Sqlite QBaseScope))
 -> Q Sqlite
      WikiMusicDatabase
      QBaseScope
      (GenreT (QExpr Sqlite QBaseScope)))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreT (QExpr Sqlite QBaseScope))
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreT (QExpr Sqlite QBaseScope))
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
-> Q Sqlite
     WikiMusicDatabase
     QBaseScope
     (GenreT (QExpr Sqlite QBaseScope))
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *) s.
(Database be db, BeamSqlBackend be) =>
DatabaseEntity be db (TableEntity table)
-> Q be db s (table (QExpr be s))
all_ ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
-> DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
#genres) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
      case Maybe (GenreT Identity)
ex of
        Maybe (GenreT Identity)
Nothing -> () -> m ()
forall a. a -> m a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
        Just GenreT Identity
foundEx -> do
          let a :: GenreT Identity
a =
                GenreT Identity
foundEx
                  { viewCount = (foundEx ^. #viewCount) + 1
                  } ::
                  Genre'
          IO () -> m ()
forall a. IO a -> m a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> m ())
-> (GenreT Identity -> IO ()) -> GenreT Identity -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn) (SqliteM () -> IO ())
-> (GenreT Identity -> SqliteM ()) -> GenreT Identity -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlUpdate Sqlite GenreT -> SqliteM ()
forall be (m :: * -> *) (tbl :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlUpdate be tbl -> m ()
runUpdate (SqlUpdate Sqlite GenreT -> SqliteM ())
-> (GenreT Identity -> SqlUpdate Sqlite GenreT)
-> GenreT Identity
-> SqliteM ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
-> GenreT Identity -> SqlUpdate Sqlite GenreT
forall (table :: (* -> *) -> *) be (db :: (* -> *) -> *).
(Table table, BeamSqlBackend be,
 SqlValableTable be (PrimaryKey table), SqlValableTable be table,
 HasTableEquality be (PrimaryKey table)) =>
DatabaseEntity be db (TableEntity table)
-> table Identity -> SqlUpdate be table
save ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
-> DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreT))
#genres) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase) (GenreT Identity -> m ()) -> GenreT Identity -> m ()
forall a b. (a -> b) -> a -> b
$ GenreT Identity
a

instance Exec GenreCommand where
  execAlgebra :: forall a. GenreCommand (IO a) -> IO a
execAlgebra (IncrementViewsByOne Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) =
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> IO (Either GenreCommandError ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [UUID] -> IO (Either GenreCommandError ())
forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
incrementViewsByOne' Env
env [UUID]
identifiers
  execAlgebra (InsertGenres Env
env [Genre]
genres Map UUID Genre -> IO a
next) =
    Map UUID Genre -> IO a
next (Map UUID Genre -> IO a) -> IO (Map UUID Genre) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [Genre] -> IO (Map UUID Genre)
forall (m :: * -> *).
MonadIO m =>
Env -> [Genre] -> m (Map UUID Genre)
insertGenres' Env
env [Genre]
genres
  execAlgebra (InsertGenreComments Env
env [GenreComment]
comments Map UUID GenreComment -> IO a
next) =
    Map UUID GenreComment -> IO a
next (Map UUID GenreComment -> IO a)
-> IO (Map UUID GenreComment) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [GenreComment] -> IO (Map UUID GenreComment)
forall (m :: * -> *).
MonadIO m =>
Env -> [GenreComment] -> m (Map UUID GenreComment)
insertGenreComments' Env
env [GenreComment]
comments
  execAlgebra (InsertGenreExternalSources Env
env [GenreExternalSources]
externalSources Map UUID GenreExternalSources -> IO a
next) =
    Map UUID GenreExternalSources -> IO a
next (Map UUID GenreExternalSources -> IO a)
-> IO (Map UUID GenreExternalSources) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [GenreExternalSources] -> IO (Map UUID GenreExternalSources)
forall (m :: * -> *).
MonadIO m =>
Env -> [GenreExternalSources] -> m (Map UUID GenreExternalSources)
insertGenreExternalSources' Env
env [GenreExternalSources]
externalSources
  execAlgebra (InsertGenreArtworks Env
env [GenreArtwork]
artworks Map UUID GenreArtwork -> IO a
next) =
    Map UUID GenreArtwork -> IO a
next (Map UUID GenreArtwork -> IO a)
-> IO (Map UUID GenreArtwork) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [GenreArtwork] -> IO (Map UUID GenreArtwork)
forall (m :: * -> *).
MonadIO m =>
Env -> [GenreArtwork] -> m (Map UUID GenreArtwork)
insertGenreArtworks' Env
env [GenreArtwork]
artworks
  execAlgebra (UpsertGenreOpinions Env
env [GenreOpinion]
opinions Map UUID GenreOpinion -> IO a
next) =
    Map UUID GenreOpinion -> IO a
next (Map UUID GenreOpinion -> IO a)
-> IO (Map UUID GenreOpinion) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [GenreOpinion] -> IO (Map UUID GenreOpinion)
forall (m :: * -> *).
MonadIO m =>
Env -> [GenreOpinion] -> m (Map UUID GenreOpinion)
upsertGenreOpinions' Env
env [GenreOpinion]
opinions
  execAlgebra (DeleteGenres Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) =
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> IO (Either GenreCommandError ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [UUID] -> IO (Either GenreCommandError ())
forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
uberDeleteGenres Env
env [UUID]
identifiers
  execAlgebra (DeleteGenreComments Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) =
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> IO (Either GenreCommandError ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [UUID] -> IO (Either GenreCommandError ())
forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreComments' Env
env [UUID]
identifiers
  execAlgebra (DeleteGenreArtworks Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) =
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> IO (Either GenreCommandError ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [UUID] -> IO (Either GenreCommandError ())
forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreArtworks' Env
env [UUID]
identifiers
  execAlgebra (DeleteGenreOpinions Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) =
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> IO (Either GenreCommandError ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [UUID] -> IO (Either GenreCommandError ())
forall (m :: * -> *).
MonadIO m =>
Env -> [UUID] -> m (Either GenreCommandError ())
deleteGenreOpinions' Env
env [UUID]
identifiers
  execAlgebra (DeleteCommentsOfGenres Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) = do
    let ids :: [Text]
ids = (UUID -> Text) -> [UUID] -> [Text]
forall a b. (a -> b) -> [a] -> [b]
map UUID -> Text
UUID.toText [UUID]
identifiers

    (Text -> IO ()) -> [Text] -> IO ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_
      ( \Text
y ->
          (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
            (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreCommentT -> SqliteM ())
-> SqlDelete Sqlite GenreCommentT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreCommentT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
            (SqlDelete Sqlite GenreCommentT -> IO ())
-> SqlDelete Sqlite GenreCommentT -> IO ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreCommentT)
-> (forall s.
    (forall s'. GenreCommentT (QExpr Sqlite s'))
    -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreCommentT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreCommentT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreCommentT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreCommentT))
#genreComments) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase) (\forall s'. GenreCommentT (QExpr Sqlite s')
c -> GenreCommentT (QGenExpr QValueContext Sqlite s)
forall s'. GenreCommentT (QExpr Sqlite s')
c GenreCommentT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreCommentT (QGenExpr QValueContext Sqlite s))
     (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreCommentT (QGenExpr QValueContext Sqlite s))
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
#genreIdentifier PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
-> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlEq expr a => a -> a -> expr Bool
==. (PrimaryKey GenreT Identity
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
HaskellLiteralForQExpr
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (PrimaryKey GenreT Identity
 -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> (Text -> PrimaryKey GenreT Identity)
-> Text
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> PrimaryKey GenreT Identity
Columnar Identity Text -> PrimaryKey GenreT Identity
forall (f :: * -> *). Columnar f Text -> PrimaryKey GenreT f
GenreId (Text -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> Text -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall a b. (a -> b) -> a -> b
$ Text
y))
      )
      [Text]
ids

    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> Either GenreCommandError () -> IO a
forall a b. (a -> b) -> a -> b
$ () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right ()
  execAlgebra (DeleteGenreExternalSources Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) = do
    IO () -> IO ()
forall a. IO a -> IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
      (IO () -> IO ())
-> (SqlDelete Sqlite GenreExternalSourcesT -> IO ())
-> SqlDelete Sqlite GenreExternalSourcesT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
      (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreExternalSourcesT -> SqliteM ())
-> SqlDelete Sqlite GenreExternalSourcesT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreExternalSourcesT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
      (SqlDelete Sqlite GenreExternalSourcesT -> IO ())
-> SqlDelete Sqlite GenreExternalSourcesT -> IO ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity
  Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
-> (forall s.
    (forall s'. GenreExternalSourcesT (QExpr Sqlite s'))
    -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreExternalSourcesT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete
        ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreExternalSourcesT))
#genreExternalSources) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
        (\forall s'. GenreExternalSourcesT (QExpr Sqlite s')
c -> (GenreExternalSourcesT (QGenExpr QValueContext Sqlite s)
forall s'. GenreExternalSourcesT (QExpr Sqlite s')
c GenreExternalSourcesT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreExternalSourcesT (QGenExpr QValueContext Sqlite s))
     (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreExternalSourcesT (QGenExpr QValueContext Sqlite s))
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
#genreIdentifier) PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
-> [PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)]
-> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlIn expr a => a -> [a] -> expr Bool
`in_` (UUID -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> [UUID] -> [PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)]
forall a b. (a -> b) -> [a] -> [b]
map (PrimaryKey GenreT Identity
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
HaskellLiteralForQExpr
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (PrimaryKey GenreT Identity
 -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> (UUID -> PrimaryKey GenreT Identity)
-> UUID
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> PrimaryKey GenreT Identity
Columnar Identity Text -> PrimaryKey GenreT Identity
forall (f :: * -> *). Columnar f Text -> PrimaryKey GenreT f
GenreId (Text -> PrimaryKey GenreT Identity)
-> (UUID -> Text) -> UUID -> PrimaryKey GenreT Identity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText) [UUID]
identifiers)
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> (() -> Either GenreCommandError ()) -> () -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right (() -> IO a) -> () -> IO a
forall a b. (a -> b) -> a -> b
$ ()
  execAlgebra (DeleteArtworksOfGenres Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) = do
    IO () -> IO ()
forall a. IO a -> IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
      (IO () -> IO ())
-> (SqlDelete Sqlite GenreArtworkT -> IO ())
-> SqlDelete Sqlite GenreArtworkT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
      (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreArtworkT -> SqliteM ())
-> SqlDelete Sqlite GenreArtworkT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreArtworkT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
      (SqlDelete Sqlite GenreArtworkT -> IO ())
-> SqlDelete Sqlite GenreArtworkT -> IO ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
-> (forall s.
    (forall s'. GenreArtworkT (QExpr Sqlite s'))
    -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreArtworkT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete
        ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreArtworkT))
#genreArtworks) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
        (\forall s'. GenreArtworkT (QExpr Sqlite s')
c -> (GenreArtworkT (QGenExpr QValueContext Sqlite s)
forall s'. GenreArtworkT (QExpr Sqlite s')
c GenreArtworkT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreArtworkT (QGenExpr QValueContext Sqlite s))
     (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreArtworkT (QGenExpr QValueContext Sqlite s))
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
#genreIdentifier) PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
-> [PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)]
-> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlIn expr a => a -> [a] -> expr Bool
`in_` (UUID -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> [UUID] -> [PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)]
forall a b. (a -> b) -> [a] -> [b]
map (PrimaryKey GenreT Identity
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
HaskellLiteralForQExpr
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (PrimaryKey GenreT Identity
 -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> (UUID -> PrimaryKey GenreT Identity)
-> UUID
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> PrimaryKey GenreT Identity
Columnar Identity Text -> PrimaryKey GenreT Identity
forall (f :: * -> *). Columnar f Text -> PrimaryKey GenreT f
GenreId (Text -> PrimaryKey GenreT Identity)
-> (UUID -> Text) -> UUID -> PrimaryKey GenreT Identity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText) [UUID]
identifiers)
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> (() -> Either GenreCommandError ()) -> () -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right (() -> IO a) -> () -> IO a
forall a b. (a -> b) -> a -> b
$ ()
  execAlgebra (DeleteOpinionsOfGenres Env
env [UUID]
identifiers Either GenreCommandError () -> IO a
next) = do
    IO () -> IO ()
forall a. IO a -> IO a
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO
      (IO () -> IO ())
-> (SqlDelete Sqlite GenreOpinionT -> IO ())
-> SqlDelete Sqlite GenreOpinionT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String -> IO ()) -> Connection -> SqliteM () -> IO ()
forall a. (String -> IO ()) -> Connection -> SqliteM a -> IO a
runBeamSqliteDebug String -> IO ()
forall (m :: * -> *). MonadIO m => String -> m ()
putStrLn (Env
env Env -> Optic' A_Lens NoIx Env Connection -> Connection
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic' A_Lens NoIx Env Connection
#conn)
      (SqliteM () -> IO ())
-> (SqlDelete Sqlite GenreOpinionT -> SqliteM ())
-> SqlDelete Sqlite GenreOpinionT
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SqlDelete Sqlite GenreOpinionT -> SqliteM ()
forall be (m :: * -> *) (table :: (* -> *) -> *).
(BeamSqlBackend be, MonadBeam be m) =>
SqlDelete be table -> m ()
runDelete
      (SqlDelete Sqlite GenreOpinionT -> IO ())
-> SqlDelete Sqlite GenreOpinionT -> IO ()
forall a b. (a -> b) -> a -> b
$ DatabaseEntity Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
-> (forall s.
    (forall s'. GenreOpinionT (QExpr Sqlite s'))
    -> QExpr Sqlite s Bool)
-> SqlDelete Sqlite GenreOpinionT
forall be (db :: (* -> *) -> *) (table :: (* -> *) -> *).
BeamSqlBackend be =>
DatabaseEntity be db (TableEntity table)
-> (forall s. (forall s'. table (QExpr be s')) -> QExpr be s Bool)
-> SqlDelete be table
delete
        ((DatabaseSettings Sqlite WikiMusicDatabase
-> Optic'
     A_Lens
     NoIx
     (DatabaseSettings Sqlite WikiMusicDatabase)
     (DatabaseEntity
        Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
-> DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (DatabaseSettings Sqlite WikiMusicDatabase)
  (DatabaseEntity
     Sqlite WikiMusicDatabase (TableEntity GenreOpinionT))
#genreOpinions) DatabaseSettings Sqlite WikiMusicDatabase
forall be. DatabaseSettings be WikiMusicDatabase
wikiMusicDatabase)
        (\forall s'. GenreOpinionT (QExpr Sqlite s')
c -> (GenreOpinionT (QGenExpr QValueContext Sqlite s)
forall s'. GenreOpinionT (QExpr Sqlite s')
c GenreOpinionT (QGenExpr QValueContext Sqlite s)
-> Optic'
     A_Lens
     NoIx
     (GenreOpinionT (QGenExpr QValueContext Sqlite s))
     (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall k s (is :: IxList) a.
Is k A_Getter =>
s -> Optic' k is s a -> a
^. Optic'
  A_Lens
  NoIx
  (GenreOpinionT (QGenExpr QValueContext Sqlite s))
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
#genreIdentifier) PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
-> [PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)]
-> QExpr Sqlite s Bool
forall (expr :: * -> *) a. SqlIn expr a => a -> [a] -> expr Bool
`in_` (UUID -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> [UUID] -> [PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)]
forall a b. (a -> b) -> [a] -> [b]
map (PrimaryKey GenreT Identity
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
HaskellLiteralForQExpr
  (PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall a. SqlValable a => HaskellLiteralForQExpr a -> a
val_ (PrimaryKey GenreT Identity
 -> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s))
-> (UUID -> PrimaryKey GenreT Identity)
-> UUID
-> PrimaryKey GenreT (QGenExpr QValueContext Sqlite s)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Text -> PrimaryKey GenreT Identity
Columnar Identity Text -> PrimaryKey GenreT Identity
forall (f :: * -> *). Columnar f Text -> PrimaryKey GenreT f
GenreId (Text -> PrimaryKey GenreT Identity)
-> (UUID -> Text) -> UUID -> PrimaryKey GenreT Identity
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UUID -> Text
UUID.toText) [UUID]
identifiers)
    Either GenreCommandError () -> IO a
next (Either GenreCommandError () -> IO a)
-> (() -> Either GenreCommandError ()) -> () -> IO a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. () -> Either GenreCommandError ()
forall a b. b -> Either a b
Right (() -> IO a) -> () -> IO a
forall a b. (a -> b) -> a -> b
$ ()
  execAlgebra (UpdateGenreArtworkOrder Env
env [GenreArtworkOrderUpdate]
orderUpdates Either Text () -> IO a
next) =
    Either Text () -> IO a
next (Either Text () -> IO a) -> IO (Either Text ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> [GenreArtworkOrderUpdate] -> IO (Either Text ())
forall (m :: * -> *) a.
MonadIO m =>
Env -> [GenreArtworkOrderUpdate] -> m (Either a ())
updateGenreArtworkOrder' Env
env [GenreArtworkOrderUpdate]
orderUpdates
  execAlgebra (UpdateGenres Env
env Map UUID (Genre, Maybe GenreDelta)
deltas Either Text () -> IO a
next) =
    Either Text () -> IO a
next (Either Text () -> IO a) -> IO (Either Text ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> Map UUID (Genre, Maybe GenreDelta) -> IO (Either Text ())
forall (m :: * -> *).
MonadIO m =>
Env -> Map UUID (Genre, Maybe GenreDelta) -> m (Either Text ())
updateGenres' Env
env Map UUID (Genre, Maybe GenreDelta)
deltas
  execAlgebra (UpdateGenreExternalSources Env
env Map UUID (Genre, Maybe GenreDelta)
deltas Either Text () -> IO a
next) =
    Either Text () -> IO a
next (Either Text () -> IO a) -> IO (Either Text ()) -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Env -> Map UUID (Genre, Maybe GenreDelta) -> IO (Either Text ())
forall (m :: * -> *).
MonadIO m =>
Env -> Map UUID (Genre, Maybe GenreDelta) -> m (Either Text ())
updateGenreExternalSources' Env
env Map UUID (Genre, Maybe GenreDelta)
deltas
  execAlgebra (NewGenreFromRequest UUID
createdBy InsertGenresRequestItem
req Genre -> IO a
next) =
    Genre -> IO a
next (Genre -> IO a) -> IO Genre -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< UUID -> InsertGenresRequestItem -> IO Genre
forall (m :: * -> *).
MonadIO m =>
UUID -> InsertGenresRequestItem -> m Genre
newGenreFromRequest' UUID
createdBy InsertGenresRequestItem
req
  execAlgebra (NewGenreCommentFromRequest UUID
createdBy InsertGenreCommentsRequestItem
req GenreComment -> IO a
next) =
    GenreComment -> IO a
next (GenreComment -> IO a) -> IO GenreComment -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< UUID -> InsertGenreCommentsRequestItem -> IO GenreComment
forall (m :: * -> *).
MonadIO m =>
UUID -> InsertGenreCommentsRequestItem -> m GenreComment
newGenreCommentFromRequest' UUID
createdBy InsertGenreCommentsRequestItem
req
  execAlgebra (NewGenreOpinionFromRequest UUID
createdBy UpsertGenreOpinionsRequestItem
req GenreOpinion -> IO a
next) =
    GenreOpinion -> IO a
next (GenreOpinion -> IO a) -> IO GenreOpinion -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< UUID -> UpsertGenreOpinionsRequestItem -> IO GenreOpinion
forall (m :: * -> *).
MonadIO m =>
UUID -> UpsertGenreOpinionsRequestItem -> m GenreOpinion
newGenreOpinionFromRequest' UUID
createdBy UpsertGenreOpinionsRequestItem
req
  execAlgebra (NewGenreArtworkFromRequest UUID
createdBy InsertGenreArtworksRequestItem
req GenreArtwork -> IO a
next) =
    GenreArtwork -> IO a
next (GenreArtwork -> IO a) -> IO GenreArtwork -> IO a
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< UUID -> InsertGenreArtworksRequestItem -> IO GenreArtwork
forall (m :: * -> *).
MonadIO m =>
UUID -> InsertGenreArtworksRequestItem -> m GenreArtwork
newGenreArtworkFromRequest' UUID
createdBy InsertGenreArtworksRequestItem
req