1 {-# LANGUAGE TemplateHaskell #-} 2 module 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 Model.SQL.Select 20 import Model.Audit.Types 21 import Model.Audit.SQL 22 import Model.Party.SQL 23 import Model.Authorize.SQL 24 import Model.Volume.SQL 25 import Model.VolumeAccess.SQL 26 import Model.Container.SQL 27 import Model.Slot.SQL 28 import Model.Release.SQL 29 import Model.Asset.SQL 30 import 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"