1 {-# LANGUAGE TemplateHaskell #-} 2 module Databrary.Model.Activity.SQL 3 ( selectActivityParty 4 , selectActivityAccount 5 , selectActivityAuthorize 6 , selectActivityVolume 7 , selectActivityAccess 8 , selectActivityContainer 9 , selectActivityRelease 10 , selectActivityAsset 11 , selectActivityAssetSlot 12 , selectActivityExcerpt 13 , activityQual 14 ) where 15 16 import Data.List (stripPrefix) 17 import qualified Language.Haskell.TH as TH 18 19 import Databrary.Model.SQL.Select 20 import Databrary.Model.Audit.Types 21 import Databrary.Model.Audit.SQL 22 import Databrary.Model.Party.SQL 23 import Databrary.Model.Authorize.SQL 24 import Databrary.Model.Volume.SQL 25 import Databrary.Model.VolumeAccess.SQL 26 import Databrary.Model.Container.SQL 27 import Databrary.Model.Slot.SQL 28 import Databrary.Model.Release.SQL 29 import Databrary.Model.Asset.SQL 30 import Databrary.Model.Activity.Types 31 32 delim :: String -> Bool 33 delim "" = True 34 delim (' ':_) = True 35 delim (',':_) = True 36 delim _ = False 37 38 makeActivity :: Audit -> ActivityTarget -> Activity 39 makeActivity a x = Activity a x Nothing Nothing Nothing 40 41 targetActivitySelector :: String -> Selector -> Selector 42 targetActivitySelector t Selector{ selectOutput = o, selectSource = ts, selectJoined = (',':tj) } 43 | Just s <- stripPrefix t ts, delim s, ts == tj = 44 selector ("audit." ++ ts) $ OutputJoin False 'makeActivity [selectOutput (selectAudit t), o] 45 targetActivitySelector t Selector{ selectSource = ts } = error $ "targetActivitySelector " ++ t ++ ": " ++ ts 46 47 selectActivityParty :: Selector 48 selectActivityParty = targetActivitySelector "party" $ 49 selectMap (TH.ConE 'ActivityParty `TH.AppE`) selectPartyRow 50 51 selectActivityAccount :: Selector 52 selectActivityAccount = targetActivitySelector "account" $ 53 selectColumns 'ActivityAccount "account" ["id", "email", "password"] 54 55 selectActivityAuthorize :: TH.Name -> TH.Name -> Selector 56 selectActivityAuthorize p ident = targetActivitySelector "authorize" $ 57 selectMap (TH.ConE 'ActivityAuthorize `TH.AppE`) (selectAuthorizeChild p ident) 58 59 selectActivityVolume :: Selector 60 selectActivityVolume = targetActivitySelector "volume" $ 61 selectMap (TH.ConE 'ActivityVolume `TH.AppE`) selectVolumeRow 62 63 selectActivityAccess :: TH.Name -> TH.Name -> Selector 64 selectActivityAccess vol ident = targetActivitySelector "volume_access" $ 65 selectMap (TH.ConE 'ActivityAccess `TH.AppE`) (selectVolumeAccess vol ident) 66 67 selectActivityContainer :: Selector 68 selectActivityContainer = targetActivitySelector "container" $ 69 selectMap (TH.ConE 'ActivityContainer `TH.AppE`) selectContainerRow 70 71 selectActivityRelease :: Selector 72 selectActivityRelease = targetActivitySelector "slot_release" $ 73 addSelects 'ActivityRelease (selectSlotId "slot_release") [selectOutput releaseRow] 74 75 selectActivityAsset :: Selector 76 selectActivityAsset = targetActivitySelector "asset" $ 77 selectMap (TH.ConE 'ActivityAsset `TH.AppE`) selectAssetRow 78 79 selectActivityAssetSlot :: Selector 80 selectActivityAssetSlot = targetActivitySelector "slot_asset" $ 81 addSelects 'ActivityAssetSlot 82 (selectColumn "slot_asset" "asset") 83 [selectOutput $ selectSlotId "slot_asset"] 84 85 selectActivityExcerpt :: Selector 86 selectActivityExcerpt = targetActivitySelector "excerpt" $ 87 selectColumns 'ActivityExcerpt "excerpt" ["asset", "segment", "release"] 88 89 activityQual :: String 90 activityQual = "audit_action >= 'add' ORDER BY audit_time"