File tree Expand file tree Collapse file tree 15 files changed +244
-0
lines changed
wizard-public/src/WizardLib/Public
Migration/Development/ExternalLink
Production/Migration_0053_qtnEventsRefactoring Expand file tree Collapse file tree 15 files changed +244
-0
lines changed Original file line number Diff line number Diff line change 1+ module WizardLib.Public.Database.DAO.ExternalLink.ExternalLinkUsageDAO where
2+
3+ import GHC.Int
4+
5+ import Shared.Common.Database.DAO.Common
6+ import Shared.Common.Model.Context.AppContext
7+ import WizardLib.Public.Database.Mapping.ExternalLink.ExternalLinkUsage ()
8+ import WizardLib.Public.Model.ExternalLink.ExternalLinkUsage
9+
10+ entityName = " external_link_usage"
11+
12+ findExternalLinkUsages :: AppContextC s sc m => m [ExternalLinkUsage ]
13+ findExternalLinkUsages = createFindEntitiesFn entityName
14+
15+ insertExternalLinkUsage :: AppContextC s sc m => ExternalLinkUsage -> m Int64
16+ insertExternalLinkUsage = createInsertFn entityName
17+
18+ deleteExternalLinkUsages :: AppContextC s sc m => m Int64
19+ deleteExternalLinkUsages = createDeleteEntitiesFn entityName
Original file line number Diff line number Diff line change 1+ module WizardLib.Public.Database.Mapping.ExternalLink.ExternalLinkUsage where
2+
3+ import Database.PostgreSQL.Simple
4+
5+ import WizardLib.Public.Model.ExternalLink.ExternalLinkUsage
6+
7+ instance ToRow ExternalLinkUsage
8+
9+ instance FromRow ExternalLinkUsage
Original file line number Diff line number Diff line change 1+ module WizardLib.Public.Database.Migration.Development.ExternalLink.ExternalLinkMigration where
2+
3+ import Shared.Common.Constant.Component
4+ import Shared.Common.Model.Context.AppContext
5+ import Shared.Common.Util.Logger
6+ import WizardLib.Public.Database.DAO.ExternalLink.ExternalLinkUsageDAO
7+
8+ runMigration :: AppContextC s sc m => m ()
9+ runMigration = do
10+ logInfo _CMP_MIGRATION " (ExternalLink/ExternalLink) started"
11+ deleteExternalLinkUsages
12+ logInfo _CMP_MIGRATION " (ExternalLink/ExternalLink) ended"
Original file line number Diff line number Diff line change 1+ module WizardLib.Public.Database.Migration.Development.ExternalLink.ExternalLinkSchemaMigration where
2+
3+ import Database.PostgreSQL.Simple
4+ import GHC.Int
5+
6+ import Shared.Common.Database.DAO.Common
7+ import Shared.Common.Model.Context.AppContext
8+ import Shared.Common.Util.Logger
9+
10+ dropTables :: AppContextC s sc m => m Int64
11+ dropTables = do
12+ logInfo _CMP_MIGRATION " (Table/ExternalLink) drop tables"
13+ let sql = " DROP TABLE IF EXISTS external_link_usage CASCADE;"
14+ let action conn = execute_ conn sql
15+ runDB action
16+
17+ createTables :: AppContextC s sc m => m Int64
18+ createTables = do
19+ logInfo _CMP_MIGRATION " (Table/ExternalLink) create table"
20+ let sql =
21+ " CREATE TABLE external_link_usage \
22+ \( \
23+ \ uuid uuid NOT NULL, \
24+ \ url varchar NOT NULL, \
25+ \ tenant_uuid uuid NOT NULL, \
26+ \ created_at timestamptz NOT NULL, \
27+ \ CONSTRAINT external_link_usage_pk PRIMARY KEY (uuid, tenant_uuid), \
28+ \ CONSTRAINT external_link_usage_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) \
29+ \);"
30+ let action conn = execute_ conn sql
31+ runDB action
Original file line number Diff line number Diff line change 1+ module WizardLib.Public.Model.ExternalLink.ExternalLinkUsage where
2+
3+ import Data.Time
4+ import qualified Data.UUID as U
5+ import GHC.Generics
6+
7+ data ExternalLinkUsage = ExternalLinkUsage
8+ { uuid :: U. UUID
9+ , url :: String
10+ , tenantUuid :: U. UUID
11+ , createdAt :: UTCTime
12+ }
13+ deriving (Show , Eq , Generic )
Original file line number Diff line number Diff line change 1+ module WizardLib.Public.Service.ExternalLink.ExternalLinkUsageService where
2+
3+ import Control.Monad (void )
4+ import Control.Monad.Reader (asks , liftIO )
5+ import Data.Time
6+ import Prelude hiding (id )
7+
8+ import Shared.Common.Database.DAO.Common
9+ import Shared.Common.Model.Context.AppContext
10+ import Shared.Common.Util.Logger
11+ import Shared.Common.Util.Uuid
12+ import WizardLib.Public.Database.DAO.ExternalLink.ExternalLinkUsageDAO
13+ import WizardLib.Public.Model.ExternalLink.ExternalLinkUsage
14+
15+ createExternalLinkUsage :: AppContextC s sc m => String -> m ()
16+ createExternalLinkUsage url =
17+ runInTransaction logInfoI logWarnI $ do
18+ uuid <- liftIO generateUuid
19+ tenantUuid <- asks (. tenantUuid')
20+ now <- liftIO getCurrentTime
21+ let externalLinkUsage = ExternalLinkUsage uuid url tenantUuid now
22+ void $ insertExternalLinkUsage externalLinkUsage
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ import Wizard.Api.Handler.DocumentTemplateDraft.Asset.Api
1717import Wizard.Api.Handler.DocumentTemplateDraft.File.Api
1818import Wizard.Api.Handler.DocumentTemplateDraft.Folder.Api
1919import Wizard.Api.Handler.Domain.Api
20+ import Wizard.Api.Handler.ExternalLink.Api
2021import Wizard.Api.Handler.Feedback.Api
2122import Wizard.Api.Handler.Info.Api
2223import Wizard.Api.Handler.KnowledgeModel.Api
@@ -56,6 +57,7 @@ type ApplicationAPI =
5657 :<|> DocumentTemplateFileAPI
5758 :<|> DocumentAPI
5859 :<|> DomainAPI
60+ :<|> ExternalLinkAPI
5961 :<|> FeedbackAPI
6062 :<|> InfoAPI
6163 :<|> KnowledgeModelAPI
@@ -98,6 +100,7 @@ applicationServer =
98100 :<|> documentTemplateFileServer
99101 :<|> documentServer
100102 :<|> domainServer
103+ :<|> externalLinkServer
101104 :<|> feedbackServer
102105 :<|> infoServer
103106 :<|> knowledgeModelServer
Original file line number Diff line number Diff line change 1+ module Wizard.Api.Handler.ExternalLink.Api where
2+
3+ import Servant
4+ import Servant.Swagger.Tags
5+
6+ import Wizard.Api.Handler.ExternalLink.List_GET
7+ import Wizard.Model.Context.BaseContext
8+
9+ type ExternalLinkAPI =
10+ Tags " ExternalLink"
11+ :> List_GET
12+
13+ externalLinkApi :: Proxy ExternalLinkAPI
14+ externalLinkApi = Proxy
15+
16+ externalLinkServer :: ServerT ExternalLinkAPI BaseContextM
17+ externalLinkServer = list_GET
Original file line number Diff line number Diff line change 1+ module Wizard.Api.Handler.ExternalLink.List_GET where
2+
3+ import Servant
4+
5+ import Shared.Common.Api.Handler.Common
6+ import Shared.Common.Model.Context.TransactionState
7+ import Shared.Common.Model.Error.Error
8+ import Wizard.Api.Handler.Common
9+ import Wizard.Model.Context.BaseContext
10+ import WizardLib.Public.Service.ExternalLink.ExternalLinkUsageService
11+
12+ type List_GET =
13+ Header " Host" String
14+ :> " external-link"
15+ :> QueryParam' '[Required ] " url" String
16+ :> Get '[SafeJSON ] (Headers '[Header " x-trace-uuid" String ] NoContent )
17+
18+ list_GET :: Maybe String -> String -> BaseContextM (Headers '[Header " x-trace-uuid" String ] NoContent )
19+ list_GET mServerUrl url =
20+ runInUnauthService mServerUrl Transactional $
21+ addTraceUuidHeader =<< do
22+ createExternalLinkUsage url
23+ throwError $ FoundError url
Original file line number Diff line number Diff line change @@ -46,6 +46,8 @@ import qualified Wizard.Database.Migration.Development.Tenant.TenantSchemaMigrat
4646import qualified Wizard.Database.Migration.Development.User.UserMigration as User
4747import qualified Wizard.Database.Migration.Development.User.UserSchemaMigration as User
4848import Wizard.Model.Context.ContextMappers
49+ import qualified WizardLib.Public.Database.Migration.Development.ExternalLink.ExternalLinkMigration as ExternalLink
50+ import qualified WizardLib.Public.Database.Migration.Development.ExternalLink.ExternalLinkSchemaMigration as ExternalLink
4951
5052runMigration = runAppContextWithBaseContext $ do
5153 logInfo _CMP_MIGRATION " started"
@@ -54,6 +56,7 @@ runMigration = runAppContextWithBaseContext $ do
5456 Package. dropFunctions
5557 Common. dropFunctions
5658 -- 2. Drop schema
59+ ExternalLink. dropTables
5760 KnowledgeModel. dropTables
5861 Component. dropTables
5962 TemporaryFile. dropTables
@@ -100,6 +103,7 @@ runMigration = runAppContextWithBaseContext $ do
100103 TemporaryFile. createTables
101104 Component. createTables
102105 KnowledgeModel. createTables
106+ ExternalLink. createTables
103107 -- 4. Create DB functions
104108 Common. createFunctions
105109 Package. createFunctions
@@ -126,5 +130,6 @@ runMigration = runAppContextWithBaseContext $ do
126130 Registry. runMigration
127131 Locale. runMigration
128132 Component. runMigration
133+ ExternalLink. runMigration
129134 logInfo _CMP_MIGRATION " ended"
130135 return Nothing
You can’t perform that action at this time.
0 commit comments