From 5774347cbc5d2da8440a8a4d500c88e53d839145 Mon Sep 17 00:00:00 2001 From: Vojtech Knaisl Date: Thu, 11 Dec 2025 15:29:12 +0100 Subject: [PATCH 1/2] Rename questionnaire to project --- .../Handler/KnowledgeModelPackage/List_GET.hs | 2 +- .../Handler/KnowledgeModelPackage/List_GET.hs | 4 +- .../Database/Mapping/Audit/AuditEntry.hs | 4 +- .../Development/Audit/AuditSchemaMigration.hs | 2 +- .../Statistics/Data/InstanceStatistics.hs | 2 +- .../Migration/Production/Migration.hs | 2 + .../Migration_0016_project/Migration.hs | 20 + .../Model/Statistics/InstanceStatistics.hs | 2 +- .../Registry/Service/Audit/AuditService.hs | 2 +- .../test/Registry/Specs/API/Common.hs | 2 +- .../Specs/API/DocumentTemplate/Detail_GET.hs | 2 +- .../src/Shared/Common/Constant/Api.hs | 4 +- shared-common/src/Shared/Common/Util/Aeson.hs | 4 +- .../Data/DocumentTemplateFiles.hs | 6 +- .../Data/DocumentTemplates.hs | 12 +- .../Resource/Tenant/Usage/WizardUsageDTO.hs | 2 +- .../Tenant/Data/TenantLimitBundles.hs | 2 +- .../Development/Tenant/Data/TenantUsages.hs | 6 +- .../CreateProjectCommand.hs} | 8 +- .../Tenant/Limit/TenantLimitBundleChange.hs | 2 +- wizard-server/src/Wizard/Api/Handler/Api.hs | 39 +- .../Wizard/Api/Handler/CommentThread/Api.hs | 18 - .../Wizard/Api/Handler/Document/List_GET.hs | 6 +- .../Detail_Documents_Preview_GET.hs | 2 +- .../Api/Handler/KnowledgeModelEditor/Api.hs | 3 + .../Handler/KnowledgeModelEditor/Detail_WS.hs | 10 +- .../Migration}/Api.hs | 12 +- .../List_Current_Conflict_All_POST.hs | 4 +- .../Migration}/List_Current_Conflict_POST.hs | 4 +- .../Migration}/List_Current_DELETE.hs | 4 +- .../Migration}/List_Current_GET.hs | 4 +- .../Migration}/List_Current_POST.hs | 4 +- .../src/Wizard/Api/Handler/Migration/Api.hs | 17 - .../Handler/Migration/Questionnaire/Api.hs | 27 - .../Questionnaire/List_Current_PUT.hs | 34 - .../Migration/Questionnaire/List_POST.hs | 33 - .../src/Wizard/Api/Handler/Project/Api.hs | 91 ++ .../Wizard/Api/Handler/Project/Comment/Api.hs | 17 + .../Comment/List_GET.hs | 20 +- .../Api/Handler/Project/Detail_Content_PUT.hs | 31 + .../Detail_DELETE.hs | 12 +- .../Detail_Documents_GET.hs | 10 +- .../Detail_Documents_Preview_GET.hs | 12 +- .../Wizard/Api/Handler/Project/Detail_GET.hs | 25 + .../Api/Handler/Project/Detail_Preview_GET.hs | 29 + .../Project/Detail_Questionnaire_GET.hs | 29 + .../Detail_Report_GET.hs | 18 +- .../Api/Handler/Project/Detail_Revert_POST.hs | 33 + .../Project/Detail_Revert_Preview_POST.hs | 34 + .../Handler/Project/Detail_Settings_GET.hs | 29 + .../Handler/Project/Detail_Settings_PUT.hs | 31 + .../Api/Handler/Project/Detail_Share_PUT.hs | 31 + .../{Questionnaire => Project}/Detail_WS.hs | 36 +- .../Wizard/Api/Handler/Project/Event/Api.hs | 20 + .../Api/Handler/Project/Event/Detail_GET.hs | 31 + .../Event/List_GET.hs | 20 +- .../Wizard/Api/Handler/Project/File/Api.hs | 28 + .../File/Detail_DELETE.hs | 12 +- .../File/Detail_Download_GET.hs | 12 +- .../File/List_GET.hs | 20 +- .../File/List_POST.hs | 18 +- .../{Questionnaire => Project}/List_GET.hs | 16 +- .../Wizard/Api/Handler/Project/List_POST.hs | 29 + .../List_POST_CloneUuid.hs | 20 +- .../Handler/Project/List_POST_FromTemplate.hs | 30 + .../Api/Handler/Project/Migration/Api.hs | 31 + .../List_Current_Completion_POST.hs | 12 +- .../Migration}/List_Current_DELETE.hs | 12 +- .../Migration}/List_Current_GET.hs | 20 +- .../Project/Migration/List_Current_PUT.hs | 34 + .../Handler/Project/Migration/List_POST.hs | 33 + .../src/Wizard/Api/Handler/Project/Tag/Api.hs | 17 + .../Tag}/List_Suggestions_GET.hs | 6 +- .../Wizard/Api/Handler/Project/User/Api.hs | 17 + .../User/List_Suggestions_GET.hs | 8 +- .../Wizard/Api/Handler/Project/Version/Api.hs | 28 + .../Version/Detail_DELETE.hs | 14 +- .../Api/Handler/Project/Version/Detail_PUT.hs | 35 + .../Version/List_GET.hs | 20 +- .../Api/Handler/Project/Version/List_POST.hs | 33 + .../Wizard/Api/Handler/ProjectAction/Api.hs | 28 + .../Api/Handler/ProjectAction/Detail_GET.hs | 27 + .../Api/Handler/ProjectAction/Detail_PUT.hs | 31 + .../List_GET.hs | 16 +- .../List_Suggestions_GET.hs | 20 +- .../Api/Handler/ProjectCommentThread/Api.hs | 18 + .../List_GET.hs | 20 +- .../src/Wizard/Api/Handler/ProjectFile/Api.hs | 18 + .../List_GET.hs | 16 +- .../Wizard/Api/Handler/ProjectImporter/Api.hs | 28 + .../Api/Handler/ProjectImporter/Detail_GET.hs | 27 + .../Api/Handler/ProjectImporter/Detail_PUT.hs | 31 + .../List_GET.hs | 16 +- .../List_Suggestions_GET.hs | 20 +- .../Wizard/Api/Handler/Questionnaire/Api.hs | 82 -- .../Api/Handler/Questionnaire/Comment/Api.hs | 17 - .../Questionnaire/Detail_Content_PUT.hs | 31 - .../Api/Handler/Questionnaire/Detail_GET.hs | 25 - .../Questionnaire/Detail_Preview_GET.hs | 29 - .../Questionnaire/Detail_Questionnaire_GET.hs | 29 - .../Questionnaire/Detail_Revert_POST.hs | 33 - .../Detail_Revert_Preview_POST.hs | 34 - .../Questionnaire/Detail_Settings_GET.hs | 29 - .../Questionnaire/Detail_Settings_PUT.hs | 31 - .../Handler/Questionnaire/Detail_Share_PUT.hs | 31 - .../Api/Handler/Questionnaire/Event/Api.hs | 20 - .../Handler/Questionnaire/Event/Detail_GET.hs | 31 - .../Api/Handler/Questionnaire/File/Api.hs | 28 - .../Api/Handler/Questionnaire/List_POST.hs | 29 - .../Questionnaire/List_POST_FromTemplate.hs | 30 - .../Api/Handler/Questionnaire/User/Api.hs | 17 - .../Api/Handler/Questionnaire/Version/Api.hs | 24 - .../Questionnaire/Version/Detail_PUT.hs | 35 - .../Questionnaire/Version/List_POST.hs | 33 - .../Api/Handler/QuestionnaireAction/Api.hs | 24 - .../Handler/QuestionnaireAction/Detail_GET.hs | 27 - .../Handler/QuestionnaireAction/Detail_PUT.hs | 31 - .../Api/Handler/QuestionnaireFile/Api.hs | 18 - .../Api/Handler/QuestionnaireImporter/Api.hs | 24 - .../QuestionnaireImporter/Detail_GET.hs | 27 - .../QuestionnaireImporter/Detail_PUT.hs | 31 - .../src/Wizard/Api/Handler/Swagger/Api.hs | 56 +- .../Wizard/Api/Handler/TypeHint/List_POST.hs | 2 +- .../src/Wizard/Api/Resource/Common/PageSM.hs | 82 +- .../Api/Resource/Config/ClientConfigDTO.hs | 10 +- .../Api/Resource/Config/ClientConfigJM.hs | 4 +- .../Api/Resource/Config/ClientConfigSM.hs | 6 +- .../Resource/Document/DocumentCreateDTO.hs | 4 +- .../Api/Resource/Document/DocumentDTO.hs | 8 +- .../Api/Resource/Document/DocumentJM.hs | 2 +- .../Api/Resource/Document/DocumentSM.hs | 2 +- .../DocumentTemplateDraftDataChangeDTO.hs | 2 +- .../Draft/DocumentTemplateDraftDataDTO.hs | 6 +- .../Draft/DocumentTemplateDraftDataJM.hs | 2 +- .../Draft/DocumentTemplateDraftDataSM.hs | 2 +- .../Draft/DocumentTemplateDraftDetailJM.hs | 2 +- .../Draft/DocumentTemplateDraftDetailSM.hs | 2 +- .../Api/Resource/Feedback/FeedbackSM.hs | 4 +- .../Editor/Event/SetRepliesDTO.hs | 2 +- .../Editor/Event/SetRepliesJM.hs | 2 +- .../Editor/Event/SetRepliesSM.hs | 2 +- .../Editor/KnowledgeModelEditorDetailDTO.hs | 2 +- .../Editor/KnowledgeModelEditorDetailJM.hs | 2 +- .../Editor/KnowledgeModelEditorDetailSM.hs | 2 +- .../KnowledgeModelMigrationCreateSM.hs | 2 +- .../KnowledgeModelMigrationResolutionSM.hs | 2 +- .../Migration/KnowledgeModelMigrationSM.hs | 2 +- .../Project/Acl/ProjectPermChangeDTO.hs | 13 + .../Project/Acl/ProjectPermChangeJM.hs | 15 + .../Project/Acl/ProjectPermChangeSM.hs | 15 + .../Resource/Project/Acl/ProjectPermDTO.hs | 29 + .../Api/Resource/Project/Acl/ProjectPermJM.hs | 24 + .../Api/Resource/Project/Acl/ProjectPermSM.hs | 21 + .../Project/Action/ProjectActionChangeDTO.hs | 8 + .../Project/Action/ProjectActionChangeJM.hs | 12 + .../Project/Action/ProjectActionChangeSM.hs | 12 + .../Action/ProjectActionDTO.hs} | 6 +- .../Action/ProjectActionJM.hs} | 8 +- .../Project/Action/ProjectActionSM.hs | 12 + .../Comment/ProjectCommentThreadAssignedJM.hs | 13 + .../Comment/ProjectCommentThreadAssignedSM.hs | 12 + .../Comment/ProjectCommentThreadListJM.hs | 19 + .../Comment/ProjectCommentThreadListSM.hs | 15 + .../ProjectCommentThreadNotificationJM.hs | 13 + .../Project/Detail/ProjectDetailDTO.hs | 20 + .../Project/Detail/ProjectDetailJM.hs | 15 + .../Project/Detail/ProjectDetailPreviewJM.hs | 16 + .../Project/Detail/ProjectDetailPreviewSM.hs | 35 + .../Detail/ProjectDetailQuestionnaireDTO.hs} | 24 +- .../Detail/ProjectDetailQuestionnaireJM.hs | 18 + .../Detail/ProjectDetailQuestionnaireSM.hs | 57 + .../Detail/ProjectDetailReportDTO.hs} | 14 +- .../Project/Detail/ProjectDetailReportJM.hs | 17 + .../Project/Detail/ProjectDetailReportSM.hs | 35 + .../Project/Detail/ProjectDetailSM.hs | 27 + .../Project/Detail/ProjectDetailSettingsJM.hs | 22 + .../Detail/ProjectDetailSettingsSM.hs} | 46 +- .../Detail/ProjectDetailWsDTO.hs} | 14 +- .../Project/Detail/ProjectDetailWsJM.hs | 17 + .../Project/Detail/ProjectDetailWsSM.hs | 17 + .../Event/ProjectEventChangeDTO.hs} | 6 +- .../Event/ProjectEventChangeJM.hs} | 10 +- .../Event/ProjectEventChangeSM.hs} | 28 +- .../Event/ProjectEventDTO.hs} | 6 +- .../Event/ProjectEventJM.hs} | 16 +- .../Event/ProjectEventListJM.hs} | 10 +- .../Project/Event/ProjectEventListSM.hs | 29 + .../Event/ProjectEventSM.hs} | 26 +- .../Project/File/ProjectFileListJM.hs | 14 + .../Project/File/ProjectFileListSM.hs | 13 + .../Project/File/ProjectFileSimpleJM.hs | 12 + .../Project/File/ProjectFileSimpleSM.hs | 11 + .../Importer/ProjectImporterChangeDTO.hs | 8 + .../Importer/ProjectImporterChangeJM.hs | 12 + .../Importer/ProjectImporterChangeSM.hs | 12 + .../Importer/ProjectImporterDTO.hs} | 6 +- .../Importer/ProjectImporterJM.hs} | 8 +- .../Project/Importer/ProjectImporterSM.hs | 12 + .../Migration/ProjectMigrationChangeDTO.hs | 9 + .../Migration/ProjectMigrationChangeJM.hs | 12 + .../Migration/ProjectMigrationChangeSM.hs | 11 + .../Migration/ProjectMigrationCreateDTO.hs} | 4 +- .../Migration/ProjectMigrationCreateJM.hs | 12 + .../Migration/ProjectMigrationCreateSM.hs | 11 + .../Project/Migration/ProjectMigrationDTO.hs | 14 + .../Project/Migration/ProjectMigrationJM.hs | 13 + .../Project/Migration/ProjectMigrationSM.hs | 12 + .../Project/ProjectContentChangeDTO.hs | 10 + .../Project/ProjectContentChangeJM.hs | 13 + .../Project/ProjectContentChangeSM.hs | 12 + .../Api/Resource/Project/ProjectContentDTO.hs | 20 + .../Api/Resource/Project/ProjectContentJM.hs | 16 + .../Api/Resource/Project/ProjectContentSM.hs | 17 + .../ProjectCreateDTO.hs} | 10 +- .../Project/ProjectCreateFromTemplateDTO.hs | 10 + .../Project/ProjectCreateFromTemplateJM.hs | 12 + .../Project/ProjectCreateFromTemplateSM.hs | 12 + .../Api/Resource/Project/ProjectCreateJM.hs | 14 + .../Api/Resource/Project/ProjectCreateSM.hs | 13 + .../ProjectDTO.hs} | 20 +- .../Wizard/Api/Resource/Project/ProjectJM.hs | 19 + .../ProjectReplyJM.hs} | 4 +- .../ProjectReplySM.hs} | 8 +- .../ProjectReportDTO.hs} | 4 +- .../Api/Resource/Project/ProjectReportJM.hs | 13 + .../Api/Resource/Project/ProjectReportSM.hs | 12 + .../Wizard/Api/Resource/Project/ProjectSM.hs | 22 + .../ProjectSettingsChangeDTO.hs} | 4 +- .../Project/ProjectSettingsChangeJM.hs | 12 + .../Project/ProjectSettingsChangeSM.hs | 11 + .../Resource/Project/ProjectShareChangeDTO.hs | 13 + .../Resource/Project/ProjectShareChangeJM.hs | 15 + .../Resource/Project/ProjectShareChangeSM.hs | 14 + .../Api/Resource/Project/ProjectSharingJM.hs | 9 + .../Api/Resource/Project/ProjectSharingSM.hs | 7 + .../Api/Resource/Project/ProjectSimpleJM.hs | 12 + .../Api/Resource/Project/ProjectSimpleSM.hs | 12 + .../Api/Resource/Project/ProjectStateJM.hs | 9 + .../Api/Resource/Project/ProjectStateSM.hs | 7 + .../Resource/Project/ProjectSuggestionJM.hs | 12 + .../Resource/Project/ProjectSuggestionSM.hs | 12 + .../Resource/Project/ProjectVisibilityJM.hs | 9 + .../Resource/Project/ProjectVisibilitySM.hs | 7 + .../Version/ProjectVersionChangeDTO.hs} | 4 +- .../Project/Version/ProjectVersionChangeJM.hs | 12 + .../Project/Version/ProjectVersionChangeSM.hs | 12 + .../Project/Version/ProjectVersionListJM.hs | 20 + .../Project/Version/ProjectVersionListSM.hs | 13 + .../Version/ProjectVersionRevertDTO.hs | 9 + .../Project/Version/ProjectVersionRevertJM.hs | 12 + .../Project/Version/ProjectVersionRevertSM.hs | 12 + .../Event/QuestionnaireEventListSM.hs | 29 - .../File/QuestionnaireFileListJM.hs | 14 - .../File/QuestionnaireFileListSM.hs | 13 - .../File/QuestionnaireFileSimpleJM.hs | 12 - .../File/QuestionnaireFileSimpleSM.hs | 11 - .../Migration/MigratorStateChangeDTO.hs | 9 - .../Migration/MigratorStateChangeJM.hs | 12 - .../Migration/MigratorStateChangeSM.hs | 11 - .../Migration/MigratorStateCreateJM.hs | 12 - .../Migration/MigratorStateCreateSM.hs | 11 - .../Migration/MigratorStateDTO.hs | 14 - .../Migration/MigratorStateJM.hs | 13 - .../Migration/MigratorStateSM.hs | 12 - .../QuestionnaireCommentThreadAssignedJM.hs | 13 - .../QuestionnaireCommentThreadAssignedSM.hs | 12 - .../QuestionnaireCommentThreadListJM.hs | 19 - .../QuestionnaireCommentThreadListSM.hs | 15 - ...uestionnaireCommentThreadNotificationJM.hs | 13 - .../QuestionnaireContentChangeDTO.hs | 10 - .../QuestionnaireContentChangeJM.hs | 13 - .../QuestionnaireContentChangeSM.hs | 12 - .../Questionnaire/QuestionnaireContentDTO.hs | 20 - .../Questionnaire/QuestionnaireContentJM.hs | 16 - .../Questionnaire/QuestionnaireContentSM.hs | 17 - .../QuestionnaireCreateFromTemplateDTO.hs | 10 - .../QuestionnaireCreateFromTemplateJM.hs | 12 - .../QuestionnaireCreateFromTemplateSM.hs | 12 - .../Questionnaire/QuestionnaireCreateJM.hs | 14 - .../Questionnaire/QuestionnaireCreateSM.hs | 13 - .../Questionnaire/QuestionnaireDetailDTO.hs | 20 - .../Questionnaire/QuestionnaireDetailJM.hs | 15 - .../QuestionnaireDetailPreviewJM.hs | 16 - .../QuestionnaireDetailPreviewSM.hs | 35 - .../QuestionnaireDetailQuestionnaireJM.hs | 18 - .../QuestionnaireDetailQuestionnaireSM.hs | 57 - .../QuestionnaireDetailReportJM.hs | 17 - .../QuestionnaireDetailReportSM.hs | 35 - .../Questionnaire/QuestionnaireDetailSM.hs | 27 - .../QuestionnaireDetailSettingsJM.hs | 22 - .../Questionnaire/QuestionnaireDetailWsJM.hs | 17 - .../Questionnaire/QuestionnaireDetailWsSM.hs | 17 - .../Resource/Questionnaire/QuestionnaireJM.hs | 19 - .../QuestionnairePermChangeDTO.hs | 13 - .../QuestionnairePermChangeJM.hs | 15 - .../QuestionnairePermChangeSM.hs | 15 - .../Questionnaire/QuestionnairePermDTO.hs | 29 - .../Questionnaire/QuestionnairePermJM.hs | 24 - .../Questionnaire/QuestionnairePermSM.hs | 21 - .../Questionnaire/QuestionnaireReportJM.hs | 13 - .../Questionnaire/QuestionnaireReportSM.hs | 12 - .../Resource/Questionnaire/QuestionnaireSM.hs | 22 - .../QuestionnaireSettingsChangeJM.hs | 12 - .../QuestionnaireSettingsChangeSM.hs | 11 - .../QuestionnaireShareChangeDTO.hs | 13 - .../QuestionnaireShareChangeJM.hs | 15 - .../QuestionnaireShareChangeSM.hs | 14 - .../Questionnaire/QuestionnaireSharingJM.hs | 9 - .../Questionnaire/QuestionnaireSharingSM.hs | 7 - .../Questionnaire/QuestionnaireSimpleJM.hs | 12 - .../Questionnaire/QuestionnaireSimpleSM.hs | 12 - .../Questionnaire/QuestionnaireStateJM.hs | 17 - .../Questionnaire/QuestionnaireStateSM.hs | 7 - .../QuestionnaireSuggestionJM.hs | 12 - .../QuestionnaireSuggestionSM.hs | 12 - .../QuestionnaireVisibilityJM.hs | 9 - .../QuestionnaireVisibilitySM.hs | 7 - .../Version/QuestionnaireVersionChangeJM.hs | 12 - .../Version/QuestionnaireVersionChangeSM.hs | 12 - .../Version/QuestionnaireVersionListJM.hs | 20 - .../Version/QuestionnaireVersionListSM.hs | 13 - .../Version/QuestionnaireVersionRevertDTO.hs | 9 - .../Version/QuestionnaireVersionRevertJM.hs | 12 - .../Version/QuestionnaireVersionRevertSM.hs | 12 - .../QuestionnaireActionChangeDTO.hs | 8 - .../QuestionnaireActionChangeJM.hs | 12 - .../QuestionnaireActionChangeSM.hs | 12 - .../QuestionnaireActionSM.hs | 12 - .../QuestionnaireImporterChangeDTO.hs | 8 - .../QuestionnaireImporterChangeJM.hs | 12 - .../QuestionnaireImporterChangeSM.hs | 12 - .../QuestionnaireImporterSM.hs | 12 - .../Tenant/Config/TenantConfigChangeDTO.hs | 14 +- .../Tenant/Config/TenantConfigChangeJM.hs | 4 +- .../Tenant/Config/TenantConfigChangeSM.hs | 4 +- .../Resource/Tenant/Config/TenantConfigJM.hs | 28 +- .../Resource/Tenant/Config/TenantConfigSM.hs | 24 +- .../Resource/TypeHint/TypeHintRequestDTO.hs | 6 +- .../Resource/TypeHint/TypeHintRequestJM.hs | 6 +- .../Resource/TypeHint/TypeHintRequestSM.hs | 6 +- ...O.hs => KnowledgeModelEditorMessageDTO.hs} | 16 +- ...JM.hs => KnowledgeModelEditorMessageJM.hs} | 12 +- ...SM.hs => KnowledgeModelEditorMessageSM.hs} | 12 +- .../Resource/Websocket/ProjectMessageDTO.hs | 29 + .../Resource/Websocket/ProjectMessageJM.hs | 24 + .../Resource/Websocket/ProjectMessageSM.hs | 20 + .../Websocket/QuestionnaireActionDTO.hs | 29 - .../Websocket/QuestionnaireActionJM.hs | 24 - .../Websocket/QuestionnaireActionSM.hs | 20 - .../Resource/Websocket/WebsocketActionSM.hs | 4 +- .../src/Wizard/Cache/CacheFactory.hs | 2 +- wizard-server/src/Wizard/Cache/CacheUtil.hs | 4 +- ...ocketCache.hs => ProjectWebsocketCache.hs} | 26 +- wizard-server/src/Wizard/Constant/Acl.hs | 20 +- .../src/Wizard/Constant/ProjectAction.hs | 4 + .../src/Wizard/Constant/ProjectImporter.hs | 4 + .../Wizard/Constant/QuestionnaireAction.hs | 4 - .../Wizard/Constant/QuestionnaireImporter.hs | 4 - .../Database/DAO/Document/DocumentDAO.hs | 40 +- .../DocumentTemplateDraftDataDAO.hs | 2 +- .../KnowledgeModelMigrationDAO.hs | 28 +- .../ProjectActionDAO.hs} | 52 +- .../Database/DAO/Project/ProjectCommentDAO.hs | 87 ++ .../ProjectCommentThreadDAO.hs} | 178 ++-- .../Wizard/Database/DAO/Project/ProjectDAO.hs | 669 ++++++++++++ .../Database/DAO/Project/ProjectEventDAO.hs | 217 ++++ .../ProjectFileDAO.hs} | 92 +- .../ProjectImporterDAO.hs} | 52 +- .../DAO/Project/ProjectMigrationDAO.hs | 68 ++ .../Database/DAO/Project/ProjectPermDAO.hs | 57 + .../ProjectTagDAO.hs} | 12 +- .../ProjectUserDAO.hs} | 52 +- .../ProjectVersionDAO.hs} | 62 +- .../Database/DAO/Questionnaire/MigratorDAO.hs | 68 -- .../Questionnaire/QuestionnaireCommentDAO.hs | 87 -- .../DAO/Questionnaire/QuestionnaireDAO.hs | 687 ------------ .../Questionnaire/QuestionnaireEventDAO.hs | 217 ---- .../DAO/Questionnaire/QuestionnairePermDAO.hs | 57 - ...nnaireDAO.hs => TenantConfigProjectDAO.hs} | 30 +- .../DAO/Tenant/TenantLimitBundleDAO.hs | 2 +- .../Database/Mapping/Document/Document.hs | 12 +- .../Database/Mapping/Document/DocumentList.hs | 8 +- .../Editor/KnowledgeModelEditorReply.hs | 4 +- .../Action/ProjectAction.hs} | 16 +- .../Comment/ProjectComment.hs} | 12 +- .../Comment/ProjectCommentThread.hs} | 20 +- .../Comment/ProjectCommentThreadAssigned.hs} | 12 +- .../Comment/ProjectCommentThreadList.hs} | 12 +- .../ProjectCommentThreadNotification.hs} | 12 +- .../Mapping/Project/File/ProjectFile.hs | 9 + .../File/ProjectFileList.hs} | 18 +- .../Mapping/Project/File/ProjectFileSimple.hs | 7 + .../Importer/ProjectImporter.hs} | 16 +- .../Project/Migration/ProjectMigration.hs | 25 + .../Questionnaire.hs => Project/Project.hs} | 20 +- .../ProjectAcl.hs} | 30 +- .../ProjectCreation.hs} | 6 +- .../Database/Mapping/Project/ProjectDetail.hs | 28 + .../ProjectDetailPreview.hs} | 16 +- .../ProjectDetailQuestionnaire.hs} | 30 +- .../ProjectDetailSettings.hs} | 18 +- .../ProjectEvent.hs} | 48 +- .../ProjectEventList.hs} | 8 +- .../ProjectList.hs} | 34 +- .../ProjectPerm.hs} | 20 +- .../Mapping/Project/ProjectSharing.hs | 13 + .../Database/Mapping/Project/ProjectSimple.hs | 23 + .../ProjectSimpleWithPerm.hs} | 36 +- .../Database/Mapping/Project/ProjectState.hs | 9 + .../Mapping/Project/ProjectSuggestion.hs | 7 + .../Mapping/Project/ProjectVisibility.hs | 13 + .../Mapping/Project/Version/ProjectVersion.hs | 9 + .../Version/ProjectVersionList.hs} | 8 +- .../Mapping/Questionnaire/MigratorState.hs | 25 - .../Questionnaire/QuestionnaireDetail.hs | 28 - .../Questionnaire/QuestionnaireFile.hs | 9 - .../Questionnaire/QuestionnaireFileSimple.hs | 7 - .../Questionnaire/QuestionnaireSharing.hs | 13 - .../Questionnaire/QuestionnaireSimple.hs | 17 - .../Questionnaire/QuestionnaireState.hs | 15 - .../Questionnaire/QuestionnaireSuggestion.hs | 7 - .../Questionnaire/QuestionnaireVersion.hs | 9 - .../Questionnaire/QuestionnaireVisibility.hs | 13 - .../Tenant/Config/TenantConfigProject.hs | 77 ++ .../Config/TenantConfigQuestionnaire.hs | 77 -- .../Mapping/Tenant/TenantLimitBundle.hs | 4 +- .../Development/Document/Data/Documents.hs | 60 +- .../Document/DocumentSchemaMigration.hs | 38 +- .../Data/DocumentTemplateDrafts.hs | 16 +- .../Data/DocumentTemplates.hs | 2 +- .../DocumentTemplateSchemaMigration.hs | 8 +- .../Editor/KnowledgeModelEditorActions.hs | 11 - .../Data/Editor/KnowledgeModelEditorEvents.hs | 2 +- .../Editor/KnowledgeModelEditorMessages.hs | 11 + .../Data/Editor/KnowledgeModelEditors.hs | 2 +- .../Migration/KnowledgeModelMigrations.hs | 16 +- .../KnowledgeModelMigrationMigration.hs | 4 +- .../Migration/Development/Migration.hs | 58 +- .../Project/Data/ProjectActions.hs | 122 +++ .../Data/ProjectCommands.hs} | 16 +- .../Data/ProjectComments.hs} | 82 +- .../Data/ProjectEvents.hs} | 286 ++--- .../Development/Project/Data/ProjectFiles.hs | 33 + .../Project/Data/ProjectImporters.hs | 115 +++ .../Data/ProjectLabels.hs} | 4 +- .../Project/Data/ProjectMessages.hs | 16 + .../Project/Data/ProjectMigrations.hs | 135 +++ .../Data/ProjectReplies.hs} | 6 +- .../Project/Data/ProjectVersions.hs | 80 ++ .../Development/Project/Data/Projects.hs | 967 +++++++++++++++++ .../Project/ProjectActionMigration.hs | 19 + .../ProjectActionSchemaMigration.hs} | 14 +- .../Project/ProjectImporterMigration.hs | 19 + .../ProjectImporterSchemaMigration.hs} | 14 +- .../Development/Project/ProjectMigration.hs | 46 + .../Project/ProjectMigrationMigration.hs | 12 + .../ProjectMigrationSchemaMigration.hs | 34 + .../Project/ProjectSchemaMigration.hs | 273 +++++ .../Questionnaire/Data/MigratorStates.hs | 135 --- .../Data/QuestionnaireActions.hs | 16 - .../Questionnaire/Data/QuestionnaireFiles.hs | 33 - .../Data/QuestionnaireVersions.hs | 80 -- .../Questionnaire/Data/Questionnaires.hs | 977 ------------------ .../Questionnaire/MigratorMigration.hs | 12 - .../Questionnaire/MigratorSchemaMigration.hs | 34 - .../Questionnaire/QuestionnaireMigration.hs | 46 - .../QuestionnaireSchemaMigration.hs | 275 ----- .../Data/QuestionnaireActions.hs | 122 --- .../QuestionnaireActionMigration.hs | 19 - .../Data/QuestionnaireImporters.hs | 115 --- .../QuestionnaireImporterMigration.hs | 19 - .../Development/Report/Data/Reports.hs | 8 +- .../Development/Tenant/Data/TenantConfigs.hs | 68 +- .../Tenant/Data/TenantLimitBundles.hs | 4 +- .../Development/Tenant/TenantMigration.hs | 4 +- .../Tenant/TenantSchemaMigration.hs | 16 +- .../Development/TypeHint/Data/TypeHints.hs | 16 +- .../Development/User/Data/AlbertEinstein.hs | 10 +- .../Development/User/Data/CharlesDarwin.hs | 2 +- .../Development/User/Data/GalileoGalilei.hs | 2 +- .../Development/User/Data/IsaacNewton.hs | 2 +- .../User/Data/NicolausCopernicus.hs | 2 +- .../Development/User/Data/NikolaTesla.hs | 8 +- .../Development/User/Data/SystemUser.hs | 10 +- .../Migration_0061_news/Migration.hs | 155 +++ .../Integration/Http/GitHub/RequestMapper.hs | 4 +- .../Wizard/Integration/Http/GitHub/Runner.hs | 8 +- .../Http/Registry/RequestMapper.hs | 4 +- .../Wizard/Localization/Messages/Internal.hs | 6 +- .../Wizard/Localization/Messages/Public.hs | 50 +- .../src/Wizard/Model/Cache/ServerCache.hs | 2 +- wizard-server/src/Wizard/Model/Common/Lens.hs | 6 +- .../src/Wizard/Model/Config/ServerConfig.hs | 6 +- .../src/Wizard/Model/Config/ServerConfigDM.hs | 52 +- .../src/Wizard/Model/Config/ServerConfigIM.hs | 18 +- .../src/Wizard/Model/Config/ServerConfigJM.hs | 14 +- .../src/Wizard/Model/Document/Document.hs | 6 +- .../Wizard/Model/Document/DocumentContext.hs | 12 +- .../Model/Document/DocumentContextJM.hs | 8 +- .../src/Wizard/Model/Document/DocumentList.hs | 8 +- .../DocumentTemplateDraftData.hs | 4 +- .../DocumentTemplateDraftDetail.hs | 6 +- .../Editor/KnowledgeModelEditorReply.hs | 2 +- .../File/ProjectFileDeleteFromS3Command.hs | 19 + .../QuestionnaireFileDeleteFromS3Command.hs | 19 - .../Model/Project/Acl/ProjectAclHelpers.hs | 63 ++ .../Wizard/Model/Project/Acl/ProjectPerm.hs | 38 + .../Action/ProjectAction.hs} | 6 +- .../Comment/ProjectComment.hs} | 10 +- .../Comment/ProjectCommentList.hs} | 10 +- .../Comment/ProjectCommentThreadAssigned.hs} | 8 +- .../ProjectCommentThreadNotification.hs} | 12 +- .../Model/Project/Detail/ProjectDetail.hs | 23 + .../Detail/ProjectDetailPreview.hs} | 14 +- .../Detail/ProjectDetailQuestionnaire.hs | 24 + .../Detail/ProjectDetailSettings.hs} | 14 +- .../Event/ProjectEvent.hs} | 22 +- .../Event/ProjectEventLenses.hs} | 28 +- .../Event/ProjectEventList.hs} | 6 +- .../Event/ProjectEventListLenses.hs} | 8 +- .../File/ProjectFile.hs} | 6 +- .../File/ProjectFileList.hs} | 8 +- .../File/ProjectFileSimple.hs} | 4 +- .../Importer/ProjectImporter.hs} | 6 +- .../Project/Migration/ProjectMigration.hs | 12 + .../Questionnaire.hs => Project/Project.hs} | 34 +- .../ProjectContent.hs} | 6 +- .../Wizard/Model/Project/ProjectContentDM.hs | 13 + .../ProjectList.hs} | 20 +- .../ProjectReply.hs} | 2 +- .../ProjectSimple.hs} | 4 +- .../Model/Project/ProjectSimpleWithPerm.hs | 16 + .../src/Wizard/Model/Project/ProjectState.hs | 9 + .../ProjectSuggestion.hs} | 4 +- .../ProjectUtil.hs} | 2 +- .../Version/ProjectVersion.hs} | 10 +- .../Version/ProjectVersionList.hs} | 6 +- .../Model/Questionnaire/MigratorState.hs | 12 - .../Questionnaire/QuestionnaireAclHelpers.hs | 63 -- .../Questionnaire/QuestionnaireContentDM.hs | 13 - .../Questionnaire/QuestionnaireDetail.hs | 23 - .../QuestionnaireDetailQuestionnaire.hs | 24 - .../Model/Questionnaire/QuestionnairePerm.hs | 38 - .../QuestionnaireSimpleWithPerm.hs | 16 - .../Model/Questionnaire/QuestionnaireState.hs | 9 - .../Model/Statistics/InstanceStatistics.hs | 2 +- .../Model/Tenant/Config/TenantConfig.hs | 46 +- .../Model/Tenant/Config/TenantConfigDM.hs | 42 +- .../Model/Tenant/Config/TenantConfigEM.hs | 4 +- .../Model/Tenant/Limit/TenantLimitBundle.hs | 2 +- .../src/Wizard/S3/Project/ProjectFileS3.hs | 43 + .../S3/Questionnaire/QuestionnaireFileS3.hs | 43 - .../Config/Client/ClientConfigMapper.hs | 18 +- .../Config/Client/ClientConfigService.hs | 14 +- .../Service/Dev/DevOperationDefinitions.hs | 134 +-- .../Document/Context/DocumentContextMapper.hs | 42 +- .../Context/DocumentContextService.hs | 88 +- .../Wizard/Service/Document/DocumentAcl.hs | 30 +- .../Wizard/Service/Document/DocumentMapper.hs | 64 +- .../Service/Document/DocumentService.hs | 140 +-- .../Wizard/Service/Document/DocumentUtil.hs | 16 +- .../Bundle/DocumentTemplateBundleAudit.hs | 6 +- .../DocumentTemplateValidation.hs | 18 +- .../Draft/DocumentTemplateDraftMapper.hs | 26 +- .../Draft/DocumentTemplateDraftService.hs | 18 +- .../Wizard/Service/Feedback/FeedbackMapper.hs | 6 +- .../Service/Feedback/FeedbackService.hs | 20 +- .../Wizard/Service/Feedback/FeedbackUtil.hs | 2 +- .../Collaboration/CollaborationMapper.hs | 16 +- .../Collaboration/CollaborationService.hs | 2 +- .../KnowledgeModel/Editor/EditorMapper.hs | 2 +- .../KnowledgeModel/Editor/EditorUtil.hs | 2 +- .../KnowledgeModel/KnowledgeModelService.hs | 2 +- ...dit.hs => KnowledgeModelMigrationAudit.hs} | 12 +- ...er.hs => KnowledgeModelMigrationMapper.hs} | 2 +- ...e.hs => KnowledgeModelMigrationService.hs} | 24 +- ...s => KnowledgeModelMigrationValidation.hs} | 4 +- .../Package/KnowledgeModelPackageAudit.hs | 8 +- .../KnowledgeModelPackageValidation.hs | 18 +- .../Publish/KnowledgeModelPublishService.hs | 6 +- .../KnowledgeModelPublishValidation.hs | 2 +- .../src/Wizard/Service/Mail/Mailer.hs | 38 +- .../PersistentCommandExecutor.hs | 8 +- .../Project/Action/ProjectActionAudit.hs | 8 + .../Project/Action/ProjectActionMapper.hs | 26 + .../Project/Action/ProjectActionService.hs | 74 ++ .../Project/Action/ProjectActionUtil.hs | 18 + .../Collaboration/ProjectCollaborationAcl.hs} | 32 +- .../ProjectCollaborationMapper.hs | 124 +++ .../ProjectCollaborationService.hs} | 208 ++-- .../Comment/ProjectCommentMapper.hs} | 36 +- .../Project/Comment/ProjectCommentService.hs | 77 ++ .../Compiler/ProjectCompilerService.hs | 22 + .../Event/ProjectEventMapper.hs} | 74 +- .../Project/Event/ProjectEventService.hs | 64 ++ .../Service/Project/File/ProjectFileAcl.hs | 18 + .../File/ProjectFileCommandExecutor.hs} | 12 +- .../Service/Project/File/ProjectFileMapper.hs | 48 + .../Project/File/ProjectFileService.hs | 90 ++ .../Project/File/ProjectFileValidation.hs | 30 + .../Project/Importer/ProjectImporterAudit.hs | 8 + .../Project/Importer/ProjectImporterMapper.hs | 26 + .../Importer/ProjectImporterService.hs | 73 ++ .../Project/Importer/ProjectImporterUtil.hs | 18 + .../Migrator/ChangeQTypeSanitizer.hs | 4 +- .../Migration/Migrator/MoveEventGenerator.hs | 2 +- .../Migration/Migrator/MoveSanitizer.hs | 8 +- .../Migration/Migrator/Sanitizer.hs | 40 +- .../Migration/ProjectMigrationAudit.hs | 49 + .../Migration/ProjectMigrationMapper.hs | 50 + .../Migration/ProjectMigrationService.hs | 205 ++++ .../Migration/ProjectMigrationValidation.hs | 12 + .../ProjectAcl.hs} | 152 +-- .../Wizard/Service/Project/ProjectAudit.hs | 13 + .../ProjectCommandExecutor.hs} | 20 +- .../Wizard/Service/Project/ProjectMapper.hs | 371 +++++++ .../Wizard/Service/Project/ProjectService.hs | 454 ++++++++ .../src/Wizard/Service/Project/ProjectUtil.hs | 60 ++ .../Service/Project/ProjectValidation.hs | 39 + .../Tag}/ProjectTagService.hs | 8 +- .../Project/User/ProjectUserService.hs | 29 + .../Version/ProjectVersionMapper.hs} | 36 +- .../Project/Version/ProjectVersionService.hs | 141 +++ .../Version/ProjectVersionValidation.hs | 34 + .../Collaboration/CollaborationMapper.hs | 124 --- .../Comment/QuestionnaireCommentService.hs | 77 -- .../Questionnaire/Compiler/CompilerService.hs | 22 - .../Event/QuestionnaireEventService.hs | 64 -- .../File/QuestionnaireFileAcl.hs | 18 - .../File/QuestionnaireFileMapper.hs | 48 - .../File/QuestionnaireFileService.hs | 90 -- .../File/QuestionnaireFileValidation.hs | 30 - .../Questionnaire/Migration/MigrationAudit.hs | 49 - .../Migration/MigrationMapper.hs | 50 - .../Migration/MigrationService.hs | 205 ---- .../Migration/MigrationValidation.hs | 12 - .../Questionnaire/QuestionnaireAudit.hs | 13 - .../Questionnaire/QuestionnaireMapper.hs | 371 ------- .../Questionnaire/QuestionnaireService.hs | 454 -------- .../Questionnaire/QuestionnaireUtil.hs | 60 -- .../Questionnaire/QuestionnaireValidation.hs | 39 - .../User/QuestionnaireUserService.hs | 29 - .../Version/QuestionnaireVersionService.hs | 141 --- .../Version/QuestionnaireVersionValidation.hs | 34 - .../QuestionnaireActionAudit.hs | 8 - .../QuestionnaireActionMapper.hs | 26 - .../QuestionnaireActionService.hs | 74 -- .../QuestionnaireActionUtil.hs | 18 - .../QuestionnaireImporterAudit.hs | 8 - .../QuestionnaireImporterMapper.hs | 26 - .../QuestionnaireImporterService.hs | 74 -- .../QuestionnaireImporterUtil.hs | 18 - .../Wizard/Service/Report/Evaluator/Common.hs | 14 +- .../Service/Report/Evaluator/Indication.hs | 56 +- .../Wizard/Service/Report/Evaluator/Metric.hs | 2 +- .../Wizard/Service/Report/ReportGenerator.hs | 2 +- .../src/Wizard/Service/Report/ReportMapper.hs | 28 +- .../Wizard/Service/Report/ReportService.hs | 18 +- .../Service/Statistics/StatisticsService.hs | 6 +- .../Service/Submission/SubmissionAcl.hs | 4 +- .../Service/Submission/SubmissionService.hs | 2 +- .../Service/Tenant/Config/ConfigMapper.hs | 12 +- .../Service/Tenant/Config/ConfigService.hs | 42 +- .../Service/Tenant/Config/ConfigValidation.hs | 8 +- .../Service/Tenant/Limit/LimitMapper.hs | 4 +- .../Service/Tenant/Limit/LimitService.hs | 16 +- .../Wizard/Service/Tenant/TenantService.hs | 4 +- .../Service/Tenant/Usage/UsageMapper.hs | 8 +- .../Service/Tenant/Usage/UsageService.hs | 20 +- .../Service/TypeHint/TypeHintService.hs | 14 +- .../Service/User/Group/UserGroupService.hs | 22 +- .../UserGroupMembershipService.hs | 12 +- wizard-server/src/Wizard/Util/Websocket.hs | 2 +- .../src/Wizard/Worker/CronWorkers.hs | 42 +- wizard-server/test/Spec.hs | 89 +- .../Wizard/Specs/API/CommentThread/APISpec.hs | 13 - .../test/Wizard/Specs/API/Config/Common.hs | 10 +- .../Specs/API/Config/List_Bootstrap_GET.hs | 2 +- .../test/Wizard/Specs/API/Document/Common.hs | 4 +- ...etail_Available_Submission_Services_GET.hs | 36 +- .../Specs/API/Document/Detail_DELETE.hs | 36 +- .../Wizard/Specs/API/Document/List_GET.hs | 24 +- .../Wizard/Specs/API/Document/List_POST.hs | 52 +- .../API/DocumentTemplate/Detail_DELETE.hs | 8 +- .../Specs/API/DocumentTemplate/Detail_GET.hs | 6 +- .../Specs/API/DocumentTemplate/Detail_PUT.hs | 2 +- .../Specs/API/DocumentTemplate/List_DELETE.hs | 8 +- .../Specs/API/DocumentTemplate/List_GET.hs | 6 +- .../DocumentTemplate/List_Suggestions_GET.hs | 4 +- .../Asset/Detail_DELETE.hs | 4 +- .../DocumentTemplateDraft/Asset/Detail_GET.hs | 4 +- .../DocumentTemplateDraft/Asset/Detail_PUT.hs | 2 +- .../DocumentTemplateDraft/Asset/List_GET.hs | 2 +- .../DocumentTemplateDraft/Detail_DELETE.hs | 2 +- .../Detail_Documents_Preview_Settings_PUT.hs | 10 +- .../API/DocumentTemplateDraft/Detail_GET.hs | 16 +- .../API/DocumentTemplateDraft/Detail_PUT.hs | 8 +- .../File/Detail_DELETE.hs | 4 +- .../DocumentTemplateDraft/File/Detail_GET.hs | 4 +- .../DocumentTemplateDraft/File/Detail_PUT.hs | 4 +- .../DocumentTemplateDraft/File/List_GET.hs | 2 +- .../DocumentTemplateDraft/File/List_POST.hs | 2 +- .../Folder/List_Delete_POST.hs | 2 +- .../Folder/List_Move_POST.hs | 2 +- .../API/DocumentTemplateDraft/List_GET.hs | 4 +- .../test/Wizard/Specs/API/Feedback/Common.hs | 8 +- .../Wizard/Specs/API/Feedback/Detail_GET.hs | 2 +- .../Wizard/Specs/API/Feedback/List_GET.hs | 4 +- .../Specs/API/KnowledgeModel/Preview_POST.hs | 2 +- .../Specs/API/KnowledgeModelEditor/APISpec.hs | 2 + .../KnowledgeModelEditor/Migration/APISpec.hs | 17 + .../Migration}/Common.hs | 16 +- .../List_Current_Conflict_All_POST.hs | 6 +- .../Migration}/List_Current_Conflict_POST.hs | 10 +- .../Migration}/List_Current_DELETE.hs | 6 +- .../Migration}/List_Current_GET.hs | 6 +- .../Migration}/List_Current_POST.hs | 10 +- .../API/KnowledgeModelPackage/List_GET.hs | 4 +- .../List_Suggestions_GET.hs | 4 +- .../API/Migration/KnowledgeModel/APISpec.hs | 20 - .../API/Migration/Questionnaire/APISpec.hs | 20 - .../test/Wizard/Specs/API/Project/APISpec.hs | 54 + .../Specs/API/Project/Comment/APISpec.hs | 9 + .../Comment/List_GET.hs | 82 +- .../API/{Questionnaire => Project}/Common.hs | 70 +- .../Detail_Content_PUT.hs | 110 +- .../Detail_DELETE.hs | 68 +- .../Detail_Documents_GET.hs | 60 +- .../{Questionnaire => Project}/Detail_GET.hs | 104 +- .../Detail_Preview_GET.hs | 86 +- .../Detail_Questionnaire_GET.hs | 146 +-- .../Detail_Report_GET.hs | 68 +- .../Detail_Revert_POST.hs | 32 +- .../Detail_Revert_Preview_POST.hs | 38 +- .../Detail_Settings_GET.hs | 94 +- .../Detail_Settings_PUT.hs | 128 +-- .../Detail_Share_PUT.hs | 124 +-- .../Wizard/Specs/API/Project/Event/APISpec.hs | 11 + .../Event/Detail_GET.hs | 110 +- .../Event/List_GET.hs | 90 +- .../{Questionnaire => Project}/List_GET.hs | 136 +-- .../{Questionnaire => Project}/List_POST.hs | 74 +- .../List_POST_CloneUuid.hs | 61 +- .../List_POST_FromTemplate.hs | 68 +- .../Specs/API/Project/Migration/APISpec.hs | 17 + .../Migration}/Common.hs | 24 +- .../List_Current_Completion_POST.hs | 68 +- .../Migration}/List_Current_DELETE.hs | 68 +- .../Migration}/List_Current_GET.hs | 106 +- .../Migration}/List_Current_PUT.hs | 74 +- .../Migration}/List_POST.hs | 120 +-- .../Specs/API/Project/ProjectTag/APISpec.hs | 9 + .../ProjectTag/List_Suggestions_GET.hs | 34 +- .../Wizard/Specs/API/Project/User/APISpec.hs | 9 + .../User/List_Suggestions_GET.hs | 56 +- .../Specs/API/Project/Version/APISpec.hs | 15 + .../Version/Common.hs | 20 +- .../Version/Detail_DELETE.hs | 26 +- .../Version/Detail_PUT.hs | 36 +- .../Version/List_GET.hs | 84 +- .../Version/List_POST.hs | 32 +- .../Wizard/Specs/API/ProjectAction/APISpec.hs | 18 + .../Wizard/Specs/API/ProjectAction/Common.hs | 27 + .../Detail_GET.hs | 24 +- .../Detail_PUT.hs | 40 +- .../List_GET.hs | 30 +- .../List_Suggestions_GET.hs | 40 +- .../Specs/API/ProjectCommentThread/APISpec.hs | 13 + .../List_GET.hs | 46 +- .../Specs/API/ProjectImporter/APISpec.hs | 18 + .../Specs/API/ProjectImporter/Common.hs | 27 + .../Detail_GET.hs | 24 +- .../Detail_PUT.hs | 40 +- .../List_GET.hs | 36 +- .../List_Suggestions_GET.hs | 46 +- .../Wizard/Specs/API/Questionnaire/APISpec.hs | 42 - .../API/Questionnaire/Comment/APISpec.hs | 12 - .../Specs/API/Questionnaire/Event/APISpec.hs | 14 - .../API/Questionnaire/ProjectTag/APISpec.hs | 12 - .../Specs/API/Questionnaire/User/APISpec.hs | 12 - .../API/Questionnaire/Version/APISpec.hs | 18 - .../Specs/API/QuestionnaireAction/APISpec.hs | 18 - .../Specs/API/QuestionnaireAction/Common.hs | 27 - .../API/QuestionnaireImporter/APISpec.hs | 18 - .../Specs/API/QuestionnaireImporter/Common.hs | 27 - .../Wizard/Specs/API/Submission/List_GET.hs | 34 +- .../Wizard/Specs/API/Submission/List_POST.hs | 36 +- .../Specs/API/Tenant/Config/List_PUT.hs | 6 +- .../Wizard/Specs/API/TypeHint/List_POST.hs | 64 +- .../Wizard/Specs/API/User/Detail_DELETE.hs | 18 +- .../Wizard/Specs/Service/Document/Common.hs | 8 +- .../Service/Document/DocumentServiceSpec.hs | 8 +- .../Editor/KnowledgeModelEditorServiceSpec.hs | 2 +- .../ProjectCollaborationAclSpec.hs} | 62 +- .../Compiler/ProjectCompilerServiceSpec.hs | 49 + .../Event/ProjectEventServiceSpec.hs} | 96 +- .../Migrator/ChangeQTypeSanitizerSpec.hs | 8 +- .../Migration/Migrator/MoveSanitizerSpec.hs | 10 +- .../Migration/Migrator/SanitizerSpec.hs | 24 +- .../ProjectAclSpec.hs} | 94 +- .../Service/Project/ProjectServiceSpec.hs | 51 + .../ProjectValidationSpec.hs} | 8 +- .../Compiler/CompilerServiceSpec.hs | 49 - .../Questionnaire/QuestionnaireServiceSpec.hs | 51 - .../Service/Report/ReportGeneratorSpec.hs | 10 +- .../KnowledgeModelEditor/Detail/Common.hs | 6 +- .../Detail/GeneralSpec.hs | 2 +- .../Detail/SetEventSpec.hs | 8 +- .../Detail/SetRepliesSpec.hs | 8 +- .../Detail/AddCommentSpec.hs | 29 +- .../Detail/AssignCommentThreadSpec.hs | 29 +- .../Detail/ClearReplySpec.hs | 39 +- .../Detail/Common.hs | 40 +- .../Detail/DeleteCommentSpec.hs | 29 +- .../Detail/DeleteCommentThreadSpec.hs | 29 +- .../Detail/EditCommentSpec.hs | 29 +- .../Detail/GeneralSpec.hs | 64 +- .../Detail/ReopenCommentThreadSpec.hs | 29 +- .../Detail/ResolveCommentThreadSpec.hs | 29 +- .../Detail/SetLabelsSpec.hs | 39 +- .../Detail/SetPhaseSpec.hs | 39 +- .../Detail/SetProjectSpec.hs} | 43 +- .../Detail/SetReplySpec.hs | 55 +- .../Websocket/Project/Detail/WebsocketSpec.hs | 36 + .../Questionnaire/Detail/WebsocketSpec.hs | 36 - wizard-server/test/Wizard/TestMigration.hs | 90 +- 826 files changed, 13315 insertions(+), 13203 deletions(-) create mode 100644 registry-server/src/Registry/Database/Migration/Production/Migration_0016_project/Migration.hs rename wizard-public/src/WizardLib/Public/Model/PersistentCommand/{Questionnaire/CreateQuestionnaireCommand.hs => Project/CreateProjectCommand.hs} (54%) delete mode 100644 wizard-server/src/Wizard/Api/Handler/CommentThread/Api.hs rename wizard-server/src/Wizard/Api/Handler/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/Api.hs (57%) rename wizard-server/src/Wizard/Api/Handler/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_Conflict_All_POST.hs (84%) rename wizard-server/src/Wizard/Api/Handler/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_Conflict_POST.hs (87%) rename wizard-server/src/Wizard/Api/Handler/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_DELETE.hs (84%) rename wizard-server/src/Wizard/Api/Handler/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_GET.hs (86%) rename wizard-server/src/Wizard/Api/Handler/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_POST.hs (89%) delete mode 100644 wizard-server/src/Wizard/Api/Handler/Migration/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_PUT.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_POST.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Api.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Comment/Api.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Comment/List_GET.hs (53%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Content_PUT.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Detail_DELETE.hs (72%) rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Detail_Documents_GET.hs (77%) rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Detail_Documents_Preview_GET.hs (76%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_GET.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Preview_GET.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Questionnaire_GET.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Detail_Report_GET.hs (59%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_POST.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_Preview_POST.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_GET.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_PUT.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Detail_Share_PUT.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Detail_WS.hs (51%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Event/Api.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Event/Detail_GET.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Event/List_GET.hs (62%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/File/Api.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/File/Detail_DELETE.hs (70%) rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/File/Detail_Download_GET.hs (73%) rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/File/List_GET.hs (60%) rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/File/List_POST.hs (64%) rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/List_GET.hs (85%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/List_POST.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/List_POST_CloneUuid.hs (56%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/List_POST_FromTemplate.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Migration/Api.hs rename wizard-server/src/Wizard/Api/Handler/{Migration/Questionnaire => Project/Migration}/List_Current_Completion_POST.hs (70%) rename wizard-server/src/Wizard/Api/Handler/{Migration/Questionnaire => Project/Migration}/List_Current_DELETE.hs (71%) rename wizard-server/src/Wizard/Api/Handler/{Migration/Questionnaire => Project/Migration}/List_Current_GET.hs (50%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_PUT.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Migration/List_POST.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Tag/Api.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire/ProjectTag => Project/Tag}/List_Suggestions_GET.hs (88%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/User/Api.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/User/List_Suggestions_GET.hs (81%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Version/Api.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Version/Detail_DELETE.hs (68%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Version/Detail_PUT.hs rename wizard-server/src/Wizard/Api/Handler/{Questionnaire => Project}/Version/List_GET.hs (53%) create mode 100644 wizard-server/src/Wizard/Api/Handler/Project/Version/List_POST.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectAction/Api.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_GET.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_PUT.hs rename wizard-server/src/Wizard/Api/Handler/{QuestionnaireFile => ProjectAction}/List_GET.hs (65%) rename wizard-server/src/Wizard/Api/Handler/{QuestionnaireAction => ProjectAction}/List_Suggestions_GET.hs (60%) create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectCommentThread/Api.hs rename wizard-server/src/Wizard/Api/Handler/{CommentThread => ProjectCommentThread}/List_GET.hs (59%) create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectFile/Api.hs rename wizard-server/src/Wizard/Api/Handler/{QuestionnaireAction => ProjectFile}/List_GET.hs (64%) create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectImporter/Api.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_GET.hs create mode 100644 wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_PUT.hs rename wizard-server/src/Wizard/Api/Handler/{QuestionnaireImporter => ProjectImporter}/List_GET.hs (63%) rename wizard-server/src/Wizard/Api/Handler/{QuestionnaireImporter => ProjectImporter}/List_Suggestions_GET.hs (59%) delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Comment/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Content_PUT.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_GET.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Preview_GET.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Questionnaire_GET.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_POST.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_Preview_POST.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_GET.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_PUT.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Share_PUT.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Detail_GET.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST_FromTemplate.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/User/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Detail_PUT.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/List_POST.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_GET.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_PUT.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/QuestionnaireFile/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Api.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_GET.hs delete mode 100644 wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_PUT.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeSM.hs rename wizard-server/src/Wizard/Api/Resource/{QuestionnaireAction/QuestionnaireActionDTO.hs => Project/Action/ProjectActionDTO.hs} (58%) rename wizard-server/src/Wizard/Api/Resource/{QuestionnaireAction/QuestionnaireActionJM.hs => Project/Action/ProjectActionJM.hs} (52%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadNotificationJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireDetailQuestionnaireDTO.hs => Project/Detail/ProjectDetailQuestionnaireDTO.hs} (50%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireDetailReportDTO.hs => Project/Detail/ProjectDetailReportDTO.hs} (55%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSettingsJM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireDetailSettingsSM.hs => Project/Detail/ProjectDetailSettingsSM.hs} (57%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireDetailWsDTO.hs => Project/Detail/ProjectDetailWsDTO.hs} (66%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Event/QuestionnaireEventChangeDTO.hs => Project/Event/ProjectEventChangeDTO.hs} (94%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Event/QuestionnaireEventChangeJM.hs => Project/Event/ProjectEventChangeJM.hs} (91%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Event/QuestionnaireEventChangeSM.hs => Project/Event/ProjectEventChangeSM.hs} (55%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Event/QuestionnaireEventDTO.hs => Project/Event/ProjectEventDTO.hs} (97%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Event/QuestionnaireEventJM.hs => Project/Event/ProjectEventJM.hs} (91%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Event/QuestionnaireEventListJM.hs => Project/Event/ProjectEventListJM.hs} (82%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventListSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Event/QuestionnaireEventSM.hs => Project/Event/ProjectEventSM.hs} (57%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeSM.hs rename wizard-server/src/Wizard/Api/Resource/{QuestionnaireImporter/QuestionnaireImporterDTO.hs => Project/Importer/ProjectImporterDTO.hs} (57%) rename wizard-server/src/Wizard/Api/Resource/{QuestionnaireImporter/QuestionnaireImporterJM.hs => Project/Importer/ProjectImporterJM.hs} (50%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Migration/MigratorStateCreateDTO.hs => Project/Migration/ProjectMigrationCreateDTO.hs} (54%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectContentDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectContentJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectContentSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireCreateDTO.hs => Project/ProjectCreateDTO.hs} (50%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireDTO.hs => Project/ProjectDTO.hs} (61%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectJM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireReplyJM.hs => Project/ProjectReplyJM.hs} (85%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireReplySM.hs => Project/ProjectReplySM.hs} (61%) rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireReportDTO.hs => Project/ProjectReportDTO.hs} (50%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectReportJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectReportSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/QuestionnaireSettingsChangeDTO.hs => Project/ProjectSettingsChangeDTO.hs} (63%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectStateJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectStateSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilityJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilitySM.hs rename wizard-server/src/Wizard/Api/Resource/{Questionnaire/Version/QuestionnaireVersionChangeDTO.hs => Project/Version/ProjectVersionChangeDTO.hs} (51%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListSM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventListSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadNotificationJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSettingsJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilityJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilitySM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterSM.hs rename wizard-server/src/Wizard/Api/Resource/Websocket/{KnowledgeModelEditorActionDTO.hs => KnowledgeModelEditorMessageDTO.hs} (56%) rename wizard-server/src/Wizard/Api/Resource/Websocket/{KnowledgeModelEditorActionJM.hs => KnowledgeModelEditorMessageJM.hs} (57%) rename wizard-server/src/Wizard/Api/Resource/Websocket/{KnowledgeModelEditorActionSM.hs => KnowledgeModelEditorMessageSM.hs} (54%) create mode 100644 wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageDTO.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageJM.hs create mode 100644 wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageSM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionDTO.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionJM.hs delete mode 100644 wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionSM.hs rename wizard-server/src/Wizard/Cache/{QuestionnaireWebsocketCache.hs => ProjectWebsocketCache.hs} (80%) create mode 100644 wizard-server/src/Wizard/Constant/ProjectAction.hs create mode 100644 wizard-server/src/Wizard/Constant/ProjectImporter.hs delete mode 100644 wizard-server/src/Wizard/Constant/QuestionnaireAction.hs delete mode 100644 wizard-server/src/Wizard/Constant/QuestionnaireImporter.hs rename wizard-server/src/Wizard/Database/DAO/{QuestionnaireAction/QuestionnaireActionDAO.hs => Project/ProjectActionDAO.hs} (74%) create mode 100644 wizard-server/src/Wizard/Database/DAO/Project/ProjectCommentDAO.hs rename wizard-server/src/Wizard/Database/DAO/{Questionnaire/QuestionnaireCommentThreadDAO.hs => Project/ProjectCommentThreadDAO.hs} (62%) create mode 100644 wizard-server/src/Wizard/Database/DAO/Project/ProjectDAO.hs create mode 100644 wizard-server/src/Wizard/Database/DAO/Project/ProjectEventDAO.hs rename wizard-server/src/Wizard/Database/DAO/{Questionnaire/QuestionnaireFileDAO.hs => Project/ProjectFileDAO.hs} (51%) rename wizard-server/src/Wizard/Database/DAO/{QuestionnaireImporter/QuestionnaireImporterDAO.hs => Project/ProjectImporterDAO.hs} (73%) create mode 100644 wizard-server/src/Wizard/Database/DAO/Project/ProjectMigrationDAO.hs create mode 100644 wizard-server/src/Wizard/Database/DAO/Project/ProjectPermDAO.hs rename wizard-server/src/Wizard/Database/DAO/{Questionnaire/QuestionnaireProjectTagDAO.hs => Project/ProjectTagDAO.hs} (84%) rename wizard-server/src/Wizard/Database/DAO/{Questionnaire/QuestionnaireUserDAO.hs => Project/ProjectUserDAO.hs} (63%) rename wizard-server/src/Wizard/Database/DAO/{Questionnaire/QuestionnaireVersionDAO.hs => Project/ProjectVersionDAO.hs} (50%) delete mode 100644 wizard-server/src/Wizard/Database/DAO/Questionnaire/MigratorDAO.hs delete mode 100644 wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireCommentDAO.hs delete mode 100644 wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireDAO.hs delete mode 100644 wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireEventDAO.hs delete mode 100644 wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnairePermDAO.hs rename wizard-server/src/Wizard/Database/DAO/Tenant/Config/{TenantConfigQuestionnaireDAO.hs => TenantConfigProjectDAO.hs} (56%) rename wizard-server/src/Wizard/Database/Mapping/{QuestionnaireAction/QuestionnaireAction.hs => Project/Action/ProjectAction.hs} (76%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireComment.hs => Project/Comment/ProjectComment.hs} (63%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireCommentThread.hs => Project/Comment/ProjectCommentThread.hs} (75%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireCommentThreadAssigned.hs => Project/Comment/ProjectCommentThreadAssigned.hs} (79%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireCommentThreadList.hs => Project/Comment/ProjectCommentThreadList.hs} (90%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireCommentThreadNotification.hs => Project/Comment/ProjectCommentThreadNotification.hs} (82%) create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFile.hs rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireFileList.hs => Project/File/ProjectFileList.hs} (61%) create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFileSimple.hs rename wizard-server/src/Wizard/Database/Mapping/{QuestionnaireImporter/QuestionnaireImporter.hs => Project/Importer/ProjectImporter.hs} (74%) create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/Migration/ProjectMigration.hs rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/Questionnaire.hs => Project/Project.hs} (68%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireAcl.hs => Project/ProjectAcl.hs} (71%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireCreation.hs => Project/ProjectCreation.hs} (60%) create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetail.hs rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireDetailPreview.hs => Project/ProjectDetailPreview.hs} (62%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireDetailQuestionnaire.hs => Project/ProjectDetailQuestionnaire.hs} (50%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireDetailSettings.hs => Project/ProjectDetailSettings.hs} (86%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireEvent.hs => Project/ProjectEvent.hs} (88%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireEventList.hs => Project/ProjectEventList.hs} (85%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireList.hs => Project/ProjectList.hs} (73%) rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnairePerm.hs => Project/ProjectPerm.hs} (57%) create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/ProjectSharing.hs create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/ProjectSimple.hs rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireSimpleWithPerm.hs => Project/ProjectSimpleWithPerm.hs} (57%) create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/ProjectState.hs create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/ProjectSuggestion.hs create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/ProjectVisibility.hs create mode 100644 wizard-server/src/Wizard/Database/Mapping/Project/Version/ProjectVersion.hs rename wizard-server/src/Wizard/Database/Mapping/{Questionnaire/QuestionnaireVersionList.hs => Project/Version/ProjectVersionList.hs} (77%) delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/MigratorState.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetail.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFile.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFileSimple.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSharing.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSimple.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireState.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSuggestion.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVersion.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVisibility.hs create mode 100644 wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigProject.hs delete mode 100644 wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigQuestionnaire.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorActions.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorMessages.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectActions.hs rename wizard-server/src/Wizard/Database/Migration/Development/{Questionnaire/Data/QuestionnaireCommands.hs => Project/Data/ProjectCommands.hs} (69%) rename wizard-server/src/Wizard/Database/Migration/Development/{Questionnaire/Data/QuestionnaireComments.hs => Project/Data/ProjectComments.hs} (72%) rename wizard-server/src/Wizard/Database/Migration/Development/{Questionnaire/Data/QuestionnaireEvents.hs => Project/Data/ProjectEvents.hs} (68%) create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectFiles.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectImporters.hs rename wizard-server/src/Wizard/Database/Migration/Development/{Questionnaire/Data/QuestionnaireLabels.hs => Project/Data/ProjectLabels.hs} (66%) create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMessages.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMigrations.hs rename wizard-server/src/Wizard/Database/Migration/Development/{Questionnaire/Data/QuestionnaireReplies.hs => Project/Data/ProjectReplies.hs} (97%) create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectVersions.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/Data/Projects.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectActionMigration.hs rename wizard-server/src/Wizard/Database/Migration/Development/{QuestionnaireAction/QuestionnaireActionSchemaMigration.hs => Project/ProjectActionSchemaMigration.hs} (69%) create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectImporterMigration.hs rename wizard-server/src/Wizard/Database/Migration/Development/{QuestionnaireImporter/QuestionnaireImporterSchemaMigration.hs => Project/ProjectImporterSchemaMigration.hs} (68%) create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigration.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationMigration.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationSchemaMigration.hs create mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectSchemaMigration.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/MigratorStates.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireActions.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireFiles.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireVersions.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/Questionnaires.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorMigration.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorSchemaMigration.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireMigration.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireSchemaMigration.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/Data/QuestionnaireActions.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/QuestionnaireActionMigration.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/Data/QuestionnaireImporters.hs delete mode 100644 wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/QuestionnaireImporterMigration.hs create mode 100644 wizard-server/src/Wizard/Model/PersistentCommand/Project/File/ProjectFileDeleteFromS3Command.hs delete mode 100644 wizard-server/src/Wizard/Model/PersistentCommand/Questionnaire/File/QuestionnaireFileDeleteFromS3Command.hs create mode 100644 wizard-server/src/Wizard/Model/Project/Acl/ProjectAclHelpers.hs create mode 100644 wizard-server/src/Wizard/Model/Project/Acl/ProjectPerm.hs rename wizard-server/src/Wizard/Model/{QuestionnaireAction/QuestionnaireAction.hs => Project/Action/ProjectAction.hs} (81%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireComment.hs => Project/Comment/ProjectComment.hs} (70%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireCommentList.hs => Project/Comment/ProjectCommentList.hs} (66%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireCommentThreadAssigned.hs => Project/Comment/ProjectCommentThreadAssigned.hs} (60%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireCommentThreadNotification.hs => Project/Comment/ProjectCommentThreadNotification.hs} (61%) create mode 100644 wizard-server/src/Wizard/Model/Project/Detail/ProjectDetail.hs rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireDetailPreview.hs => Project/Detail/ProjectDetailPreview.hs} (53%) create mode 100644 wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailQuestionnaire.hs rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireDetailSettings.hs => Project/Detail/ProjectDetailSettings.hs} (73%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireEvent.hs => Project/Event/ProjectEvent.hs} (78%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireEventLenses.hs => Project/Event/ProjectEventLenses.hs} (63%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireEventList.hs => Project/Event/ProjectEventList.hs} (92%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireEventListLenses.hs => Project/Event/ProjectEventListLenses.hs} (85%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireFile.hs => Project/File/ProjectFile.hs} (68%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireFileList.hs => Project/File/ProjectFileList.hs} (60%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireFileSimple.hs => Project/File/ProjectFileSimple.hs} (61%) rename wizard-server/src/Wizard/Model/{QuestionnaireImporter/QuestionnaireImporter.hs => Project/Importer/ProjectImporter.hs} (79%) create mode 100644 wizard-server/src/Wizard/Model/Project/Migration/ProjectMigration.hs rename wizard-server/src/Wizard/Model/{Questionnaire/Questionnaire.hs => Project/Project.hs} (66%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireContent.hs => Project/ProjectContent.hs} (58%) create mode 100644 wizard-server/src/Wizard/Model/Project/ProjectContentDM.hs rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireList.hs => Project/ProjectList.hs} (61%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireReply.hs => Project/ProjectReply.hs} (95%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireSimple.hs => Project/ProjectSimple.hs} (54%) create mode 100644 wizard-server/src/Wizard/Model/Project/ProjectSimpleWithPerm.hs create mode 100644 wizard-server/src/Wizard/Model/Project/ProjectState.hs rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireSuggestion.hs => Project/ProjectSuggestion.hs} (57%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireUtil.hs => Project/ProjectUtil.hs} (88%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireVersion.hs => Project/Version/ProjectVersion.hs} (71%) rename wizard-server/src/Wizard/Model/{Questionnaire/QuestionnaireVersionList.hs => Project/Version/ProjectVersionList.hs} (75%) delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/MigratorState.hs delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireAclHelpers.hs delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireContentDM.hs delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetail.hs delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailQuestionnaire.hs delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/QuestionnairePerm.hs delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSimpleWithPerm.hs delete mode 100644 wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireState.hs create mode 100644 wizard-server/src/Wizard/S3/Project/ProjectFileS3.hs delete mode 100644 wizard-server/src/Wizard/S3/Questionnaire/QuestionnaireFileS3.hs rename wizard-server/src/Wizard/Service/KnowledgeModel/Migration/{MigrationAudit.hs => KnowledgeModelMigrationAudit.hs} (80%) rename wizard-server/src/Wizard/Service/KnowledgeModel/Migration/{MigrationMapper.hs => KnowledgeModelMigrationMapper.hs} (95%) rename wizard-server/src/Wizard/Service/KnowledgeModel/Migration/{MigrationService.hs => KnowledgeModelMigrationService.hs} (89%) rename wizard-server/src/Wizard/Service/KnowledgeModel/Migration/{MigrationValidation.hs => KnowledgeModelMigrationValidation.hs} (88%) create mode 100644 wizard-server/src/Wizard/Service/Project/Action/ProjectActionAudit.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Action/ProjectActionMapper.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Action/ProjectActionService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Action/ProjectActionUtil.hs rename wizard-server/src/Wizard/Service/{Questionnaire/Collaboration/CollaborationAcl.hs => Project/Collaboration/ProjectCollaborationAcl.hs} (77%) create mode 100644 wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationMapper.hs rename wizard-server/src/Wizard/Service/{Questionnaire/Collaboration/CollaborationService.hs => Project/Collaboration/ProjectCollaborationService.hs} (65%) rename wizard-server/src/Wizard/Service/{Questionnaire/Comment/QuestionnaireCommentMapper.hs => Project/Comment/ProjectCommentMapper.hs} (63%) create mode 100644 wizard-server/src/Wizard/Service/Project/Comment/ProjectCommentService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Compiler/ProjectCompilerService.hs rename wizard-server/src/Wizard/Service/{Questionnaire/Event/QuestionnaireEventMapper.hs => Project/Event/ProjectEventMapper.hs} (83%) create mode 100644 wizard-server/src/Wizard/Service/Project/Event/ProjectEventService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/File/ProjectFileAcl.hs rename wizard-server/src/Wizard/Service/{Questionnaire/File/QuestionnaireFileCommandExecutor.hs => Project/File/ProjectFileCommandExecutor.hs} (73%) create mode 100644 wizard-server/src/Wizard/Service/Project/File/ProjectFileMapper.hs create mode 100644 wizard-server/src/Wizard/Service/Project/File/ProjectFileService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/File/ProjectFileValidation.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterAudit.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterMapper.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterUtil.hs rename wizard-server/src/Wizard/Service/{Questionnaire => Project}/Migration/Migrator/ChangeQTypeSanitizer.hs (96%) rename wizard-server/src/Wizard/Service/{Questionnaire => Project}/Migration/Migrator/MoveEventGenerator.hs (96%) rename wizard-server/src/Wizard/Service/{Questionnaire => Project}/Migration/Migrator/MoveSanitizer.hs (94%) rename wizard-server/src/Wizard/Service/{Questionnaire => Project}/Migration/Migrator/Sanitizer.hs (61%) create mode 100644 wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationAudit.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationMapper.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationValidation.hs rename wizard-server/src/Wizard/Service/{Questionnaire/QuestionnaireAcl.hs => Project/ProjectAcl.hs} (50%) create mode 100644 wizard-server/src/Wizard/Service/Project/ProjectAudit.hs rename wizard-server/src/Wizard/Service/{Questionnaire/QuestionnaireCommandExecutor.hs => Project/ProjectCommandExecutor.hs} (57%) create mode 100644 wizard-server/src/Wizard/Service/Project/ProjectMapper.hs create mode 100644 wizard-server/src/Wizard/Service/Project/ProjectService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/ProjectUtil.hs create mode 100644 wizard-server/src/Wizard/Service/Project/ProjectValidation.hs rename wizard-server/src/Wizard/Service/{Questionnaire/ProjectTag => Project/Tag}/ProjectTagService.hs (61%) create mode 100644 wizard-server/src/Wizard/Service/Project/User/ProjectUserService.hs rename wizard-server/src/Wizard/Service/{Questionnaire/Version/QuestionnaireVersionMapper.hs => Project/Version/ProjectVersionMapper.hs} (61%) create mode 100644 wizard-server/src/Wizard/Service/Project/Version/ProjectVersionService.hs create mode 100644 wizard-server/src/Wizard/Service/Project/Version/ProjectVersionValidation.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationMapper.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Comment/QuestionnaireCommentService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Compiler/CompilerService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Event/QuestionnaireEventService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileAcl.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileMapper.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileValidation.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationAudit.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationMapper.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationValidation.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireAudit.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireMapper.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireUtil.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireValidation.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/User/QuestionnaireUserService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionService.hs delete mode 100644 wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionValidation.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionAudit.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionMapper.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionService.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionUtil.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterAudit.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterMapper.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterService.hs delete mode 100644 wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterUtil.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/CommentThread/APISpec.hs create mode 100644 wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/Common.hs (72%) rename wizard-server/test/Wizard/Specs/API/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_Conflict_All_POST.hs (92%) rename wizard-server/test/Wizard/Specs/API/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_Conflict_POST.hs (93%) rename wizard-server/test/Wizard/Specs/API/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_DELETE.hs (93%) rename wizard-server/test/Wizard/Specs/API/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_GET.hs (94%) rename wizard-server/test/Wizard/Specs/API/{Migration/KnowledgeModel => KnowledgeModelEditor/Migration}/List_Current_POST.hs (96%) delete mode 100644 wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/APISpec.hs create mode 100644 wizard-server/test/Wizard/Specs/API/Project/APISpec.hs create mode 100644 wizard-server/test/Wizard/Specs/API/Project/Comment/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Comment/List_GET.hs (73%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Common.hs (59%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Content_PUT.hs (56%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_DELETE.hs (74%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Documents_GET.hs (72%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_GET.hs (70%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Preview_GET.hs (73%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Questionnaire_GET.hs (62%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Report_GET.hs (71%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Revert_POST.hs (67%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Revert_Preview_POST.hs (66%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Settings_GET.hs (74%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Settings_PUT.hs (62%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Detail_Share_PUT.hs (62%) create mode 100644 wizard-server/test/Wizard/Specs/API/Project/Event/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Event/Detail_GET.hs (58%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Event/List_GET.hs (62%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/List_GET.hs (54%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/List_POST.hs (65%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/List_POST_CloneUuid.hs (70%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/List_POST_FromTemplate.hs (68%) create mode 100644 wizard-server/test/Wizard/Specs/API/Project/Migration/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{Migration/Questionnaire => Project/Migration}/Common.hs (50%) rename wizard-server/test/Wizard/Specs/API/{Migration/Questionnaire => Project/Migration}/List_Current_Completion_POST.hs (63%) rename wizard-server/test/Wizard/Specs/API/{Migration/Questionnaire => Project/Migration}/List_Current_DELETE.hs (63%) rename wizard-server/test/Wizard/Specs/API/{Migration/Questionnaire => Project/Migration}/List_Current_GET.hs (57%) rename wizard-server/test/Wizard/Specs/API/{Migration/Questionnaire => Project/Migration}/List_Current_PUT.hs (61%) rename wizard-server/test/Wizard/Specs/API/{Migration/Questionnaire => Project/Migration}/List_POST.hs (57%) create mode 100644 wizard-server/test/Wizard/Specs/API/Project/ProjectTag/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/ProjectTag/List_Suggestions_GET.hs (64%) create mode 100644 wizard-server/test/Wizard/Specs/API/Project/User/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/User/List_Suggestions_GET.hs (81%) create mode 100644 wizard-server/test/Wizard/Specs/API/Project/Version/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Version/Common.hs (52%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Version/Detail_DELETE.hs (70%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Version/Detail_PUT.hs (66%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Version/List_GET.hs (67%) rename wizard-server/test/Wizard/Specs/API/{Questionnaire => Project}/Version/List_POST.hs (66%) create mode 100644 wizard-server/test/Wizard/Specs/API/ProjectAction/APISpec.hs create mode 100644 wizard-server/test/Wizard/Specs/API/ProjectAction/Common.hs rename wizard-server/test/Wizard/Specs/API/{QuestionnaireAction => ProjectAction}/Detail_GET.hs (77%) rename wizard-server/test/Wizard/Specs/API/{QuestionnaireAction => ProjectAction}/Detail_PUT.hs (67%) rename wizard-server/test/Wizard/Specs/API/{QuestionnaireAction => ProjectAction}/List_GET.hs (71%) rename wizard-server/test/Wizard/Specs/API/{QuestionnaireAction => ProjectAction}/List_Suggestions_GET.hs (65%) create mode 100644 wizard-server/test/Wizard/Specs/API/ProjectCommentThread/APISpec.hs rename wizard-server/test/Wizard/Specs/API/{CommentThread => ProjectCommentThread}/List_GET.hs (68%) create mode 100644 wizard-server/test/Wizard/Specs/API/ProjectImporter/APISpec.hs create mode 100644 wizard-server/test/Wizard/Specs/API/ProjectImporter/Common.hs rename wizard-server/test/Wizard/Specs/API/{QuestionnaireImporter => ProjectImporter}/Detail_GET.hs (76%) rename wizard-server/test/Wizard/Specs/API/{QuestionnaireImporter => ProjectImporter}/Detail_PUT.hs (66%) rename wizard-server/test/Wizard/Specs/API/{QuestionnaireImporter => ProjectImporter}/List_GET.hs (67%) rename wizard-server/test/Wizard/Specs/API/{QuestionnaireImporter => ProjectImporter}/List_Suggestions_GET.hs (61%) delete mode 100644 wizard-server/test/Wizard/Specs/API/Questionnaire/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/Questionnaire/Comment/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/Questionnaire/Event/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/Questionnaire/ProjectTag/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/Questionnaire/User/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/Questionnaire/Version/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/QuestionnaireAction/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Common.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/APISpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Common.hs rename wizard-server/test/Wizard/Specs/Service/{Questionnaire/Collaboration/CollaborationAclSpec.hs => Project/Collaboration/ProjectCollaborationAclSpec.hs} (82%) create mode 100644 wizard-server/test/Wizard/Specs/Service/Project/Compiler/ProjectCompilerServiceSpec.hs rename wizard-server/test/Wizard/Specs/Service/{Questionnaire/Event/QuestionnaireEventServiceSpec.hs => Project/Event/ProjectEventServiceSpec.hs} (62%) rename wizard-server/test/Wizard/Specs/Service/{Questionnaire => Project}/Migration/Migrator/ChangeQTypeSanitizerSpec.hs (94%) rename wizard-server/test/Wizard/Specs/Service/{Questionnaire => Project}/Migration/Migrator/MoveSanitizerSpec.hs (96%) rename wizard-server/test/Wizard/Specs/Service/{Questionnaire => Project}/Migration/Migrator/SanitizerSpec.hs (61%) rename wizard-server/test/Wizard/Specs/Service/{Questionnaire/QuestionnaireAclSpec.hs => Project/ProjectAclSpec.hs} (85%) create mode 100644 wizard-server/test/Wizard/Specs/Service/Project/ProjectServiceSpec.hs rename wizard-server/test/Wizard/Specs/Service/{Questionnaire/QuestionnaireValidationSpec.hs => Project/ProjectValidationSpec.hs} (76%) delete mode 100644 wizard-server/test/Wizard/Specs/Service/Questionnaire/Compiler/CompilerServiceSpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireServiceSpec.hs rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/AddCommentSpec.hs (71%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/AssignCommentThreadSpec.hs (71%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/ClearReplySpec.hs (62%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/Common.hs (79%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/DeleteCommentSpec.hs (71%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/DeleteCommentThreadSpec.hs (71%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/EditCommentSpec.hs (71%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/GeneralSpec.hs (68%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/ReopenCommentThreadSpec.hs (71%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/ResolveCommentThreadSpec.hs (71%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/SetLabelsSpec.hs (61%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/SetPhaseSpec.hs (62%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire/Detail/SetQuestionnaireSpec.hs => Project/Detail/SetProjectSpec.hs} (67%) rename wizard-server/test/Wizard/Specs/Websocket/{Questionnaire => Project}/Detail/SetReplySpec.hs (65%) create mode 100644 wizard-server/test/Wizard/Specs/Websocket/Project/Detail/WebsocketSpec.hs delete mode 100644 wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/WebsocketSpec.hs diff --git a/registry-public/src/RegistryLib/Api/Handler/KnowledgeModelPackage/List_GET.hs b/registry-public/src/RegistryLib/Api/Handler/KnowledgeModelPackage/List_GET.hs index d27904a85..388943c3c 100644 --- a/registry-public/src/RegistryLib/Api/Handler/KnowledgeModelPackage/List_GET.hs +++ b/registry-public/src/RegistryLib/Api/Handler/KnowledgeModelPackage/List_GET.hs @@ -10,7 +10,7 @@ type List_GET = Header "Authorization" String :> Header "x-user-count" String :> Header "x-knowledge-model-package-count" String - :> Header "x-qtn-count" String + :> Header "x-project-count" String :> Header "x-knowledge-model-editor-count" String :> Header "x-doc-count" String :> Header "x-tml-count" String diff --git a/registry-server/src/Registry/Api/Handler/KnowledgeModelPackage/List_GET.hs b/registry-server/src/Registry/Api/Handler/KnowledgeModelPackage/List_GET.hs index 2cafaec64..61d971c52 100644 --- a/registry-server/src/Registry/Api/Handler/KnowledgeModelPackage/List_GET.hs +++ b/registry-server/src/Registry/Api/Handler/KnowledgeModelPackage/List_GET.hs @@ -25,7 +25,7 @@ list_GET -> Maybe String -> Maybe Int -> BaseContextM (Headers '[Header "x-trace-uuid" String] [KnowledgeModelPackageSimpleDTO]) -list_GET mTokenHeader xUserCountHeaderValue xPkgCountHeaderValue xQtnCountHeaderValue xKnowledgeModelEditorCountHeaderValue xDocCountHeaderValue xTmlCountHeaderValue mOrganizationId mKmId mMetamodelVersion = +list_GET mTokenHeader xUserCountHeaderValue xPkgCountHeaderValue xProjectCountHeaderValue xKnowledgeModelEditorCountHeaderValue xDocCountHeaderValue xTmlCountHeaderValue mOrganizationId mKmId mMetamodelVersion = getMaybeAuthServiceExecutor mTokenHeader $ \runInMaybeAuthService -> runInMaybeAuthService Transactional $ addTraceUuidHeader =<< do @@ -34,7 +34,7 @@ list_GET mTokenHeader xUserCountHeaderValue xPkgCountHeaderValue xQtnCountHeader catMaybes [ (,) xUserCountHeaderName <$> xUserCountHeaderValue , (,) xKnowledgeModelPackageCountHeaderName <$> xPkgCountHeaderValue - , (,) xQtnCountHeaderName <$> xQtnCountHeaderValue + , (,) xProjectCountHeaderName <$> xProjectCountHeaderValue , (,) xKnowledgeModelEditorCountHeaderName <$> xKnowledgeModelEditorCountHeaderValue , (,) xDocCountHeaderName <$> xDocCountHeaderValue , (,) xTmlCountHeaderName <$> xTmlCountHeaderValue diff --git a/registry-server/src/Registry/Database/Mapping/Audit/AuditEntry.hs b/registry-server/src/Registry/Database/Mapping/Audit/AuditEntry.hs index ac3de3d4d..04437c8d5 100644 --- a/registry-server/src/Registry/Database/Mapping/Audit/AuditEntry.hs +++ b/registry-server/src/Registry/Database/Mapping/Audit/AuditEntry.hs @@ -17,7 +17,7 @@ instance ToRow AuditEntry where , toField instanceStatistics.userCount , toField instanceStatistics.pkgCount , toField instanceStatistics.kmEditorCount - , toField instanceStatistics.qtnCount + , toField instanceStatistics.prjCount , toField instanceStatistics.tmlCount , toField instanceStatistics.docCount , toField (Nothing :: Maybe String) @@ -77,7 +77,7 @@ instance FromRow AuditEntry where userCount <- field pkgCount <- field kmEditorCount <- field - qtnCount <- field + prjCount <- field tmlCount <- field docCount <- field let instanceStatistics = InstanceStatistics {..} diff --git a/registry-server/src/Registry/Database/Migration/Development/Audit/AuditSchemaMigration.hs b/registry-server/src/Registry/Database/Migration/Development/Audit/AuditSchemaMigration.hs index 441b2f8e7..110f99ecf 100644 --- a/registry-server/src/Registry/Database/Migration/Development/Audit/AuditSchemaMigration.hs +++ b/registry-server/src/Registry/Database/Migration/Development/Audit/AuditSchemaMigration.hs @@ -27,7 +27,7 @@ createTables = do \ user_count int, \ \ knowledge_model_package_count int, \ \ knowledge_model_editor_count int, \ - \ questionnaire_count int, \ + \ project_count int, \ \ document_template_count int, \ \ document_count int, \ \ knowledge_model_package_id varchar, \ diff --git a/registry-server/src/Registry/Database/Migration/Development/Statistics/Data/InstanceStatistics.hs b/registry-server/src/Registry/Database/Migration/Development/Statistics/Data/InstanceStatistics.hs index 002bf028e..a3536f897 100644 --- a/registry-server/src/Registry/Database/Migration/Development/Statistics/Data/InstanceStatistics.hs +++ b/registry-server/src/Registry/Database/Migration/Development/Statistics/Data/InstanceStatistics.hs @@ -7,7 +7,7 @@ iStat = InstanceStatistics { userCount = 10 , pkgCount = 20 - , qtnCount = 30 + , prjCount = 30 , kmEditorCount = 40 , docCount = 50 , tmlCount = 60 diff --git a/registry-server/src/Registry/Database/Migration/Production/Migration.hs b/registry-server/src/Registry/Database/Migration/Production/Migration.hs index 5c7bdeecc..a459ebddb 100644 --- a/registry-server/src/Registry/Database/Migration/Production/Migration.hs +++ b/registry-server/src/Registry/Database/Migration/Production/Migration.hs @@ -17,6 +17,7 @@ import qualified Registry.Database.Migration.Production.Migration_0012_tenant.Mi import qualified Registry.Database.Migration.Production.Migration_0013_jsonb.Migration as M_0013 import qualified Registry.Database.Migration.Production.Migration_0014_documentTemplateMetamodel.Migration as M_0014 import qualified Registry.Database.Migration.Production.Migration_0015_knowledgeModelRefactor.Migration as M_0015 +import qualified Registry.Database.Migration.Production.Migration_0016_project.Migration as M_0016 migrationDefinitions :: [MigrationDefinition] migrationDefinitions = @@ -35,4 +36,5 @@ migrationDefinitions = , M_0013.definition , M_0014.definition , M_0015.definition + , M_0016.definition ] diff --git a/registry-server/src/Registry/Database/Migration/Production/Migration_0016_project/Migration.hs b/registry-server/src/Registry/Database/Migration/Production/Migration_0016_project/Migration.hs new file mode 100644 index 000000000..9746948b3 --- /dev/null +++ b/registry-server/src/Registry/Database/Migration/Production/Migration_0016_project/Migration.hs @@ -0,0 +1,20 @@ +module Registry.Database.Migration.Production.Migration_0016_project.Migration ( + definition, +) where + +import Control.Monad.Logger +import Control.Monad.Reader (liftIO) +import Data.Pool (Pool, withResource) +import Database.PostgreSQL.Migration.Entity +import Database.PostgreSQL.Simple + +definition = (meta, migrate) + +meta = MigrationMeta {mmNumber = 16, mmName = "Project Refactor", mmDescription = "Refactor project schema and related tables"} + +migrate :: Pool Connection -> LoggingT IO (Maybe Error) +migrate dbPool = do + let sql = "ALTER TABLE audit RENAME COLUMN questionnaire_count TO project_count;" + let action conn = execute_ conn sql + liftIO $ withResource dbPool action + return Nothing diff --git a/registry-server/src/Registry/Model/Statistics/InstanceStatistics.hs b/registry-server/src/Registry/Model/Statistics/InstanceStatistics.hs index dbc5d9eb1..5914e14da 100644 --- a/registry-server/src/Registry/Model/Statistics/InstanceStatistics.hs +++ b/registry-server/src/Registry/Model/Statistics/InstanceStatistics.hs @@ -5,7 +5,7 @@ import GHC.Generics data InstanceStatistics = InstanceStatistics { userCount :: Int , pkgCount :: Int - , qtnCount :: Int + , prjCount :: Int , kmEditorCount :: Int , docCount :: Int , tmlCount :: Int diff --git a/registry-server/src/Registry/Service/Audit/AuditService.hs b/registry-server/src/Registry/Service/Audit/AuditService.hs index 1fa6fd757..173958d24 100644 --- a/registry-server/src/Registry/Service/Audit/AuditService.hs +++ b/registry-server/src/Registry/Service/Audit/AuditService.hs @@ -68,7 +68,7 @@ getInstanceStaticsFromHeaders headers = in InstanceStatistics { userCount = get xUserCountHeaderName , pkgCount = get xKnowledgeModelPackageCountHeaderName - , qtnCount = get xQtnCountHeaderName + , prjCount = get xProjectCountHeaderName , kmEditorCount = get xKnowledgeModelEditorCountHeaderName , docCount = get xDocCountHeaderName , tmlCount = get xTmlCountHeaderName diff --git a/registry-server/test/Registry/Specs/API/Common.hs b/registry-server/test/Registry/Specs/API/Common.hs index 5958e75d4..1a58f5c35 100644 --- a/registry-server/test/Registry/Specs/API/Common.hs +++ b/registry-server/test/Registry/Specs/API/Common.hs @@ -45,7 +45,7 @@ reqStatisticsHeader :: [Header] reqStatisticsHeader = [ (CI.mk . BS.pack $ xUserCountHeaderName, BS.pack . show $ iStat.userCount) , (CI.mk . BS.pack $ xKnowledgeModelPackageCountHeaderName, BS.pack . show $ iStat.pkgCount) - , (CI.mk . BS.pack $ xQtnCountHeaderName, BS.pack . show $ iStat.qtnCount) + , (CI.mk . BS.pack $ xProjectCountHeaderName, BS.pack . show $ iStat.prjCount) , (CI.mk . BS.pack $ xKnowledgeModelEditorCountHeaderName, BS.pack . show $ iStat.kmEditorCount) , (CI.mk . BS.pack $ xDocCountHeaderName, BS.pack . show $ iStat.docCount) , (CI.mk . BS.pack $ xTmlCountHeaderName, BS.pack . show $ iStat.tmlCount) diff --git a/registry-server/test/Registry/Specs/API/DocumentTemplate/Detail_GET.hs b/registry-server/test/Registry/Specs/API/DocumentTemplate/Detail_GET.hs index 512e15ab4..6d81786cb 100644 --- a/registry-server/test/Registry/Specs/API/DocumentTemplate/Detail_GET.hs +++ b/registry-server/test/Registry/Specs/API/DocumentTemplate/Detail_GET.hs @@ -31,7 +31,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/document-templates/global:questionnaire-report:1.0.0" +reqUrl = "/document-templates/global:project-report:1.0.0" reqHeaders = [reqCtHeader] diff --git a/shared-common/src/Shared/Common/Constant/Api.hs b/shared-common/src/Shared/Common/Constant/Api.hs index 19abc48c8..80a1c4508 100644 --- a/shared-common/src/Shared/Common/Constant/Api.hs +++ b/shared-common/src/Shared/Common/Constant/Api.hs @@ -15,8 +15,8 @@ xUserCountHeaderName = "x-user-count" xKnowledgeModelPackageCountHeaderName :: String xKnowledgeModelPackageCountHeaderName = "x-knowledge-model-package-count" -xQtnCountHeaderName :: String -xQtnCountHeaderName = "x-qtn-count" +xProjectCountHeaderName :: String +xProjectCountHeaderName = "x-project-count" xKnowledgeModelEditorCountHeaderName :: String xKnowledgeModelEditorCountHeaderName = "x-knowledge-model-editor-count" diff --git a/shared-common/src/Shared/Common/Util/Aeson.hs b/shared-common/src/Shared/Common/Util/Aeson.hs index 9aa462db9..4ac467747 100644 --- a/shared-common/src/Shared/Common/Util/Aeson.hs +++ b/shared-common/src/Shared/Common/Util/Aeson.hs @@ -53,8 +53,8 @@ jsonSpecialFields "gId" = "id" jsonSpecialFields "iId" = "id" jsonSpecialFields "lId" = "id" jsonSpecialFields "pId" = "id" -jsonSpecialFields "qaId" = "id" -jsonSpecialFields "qiId" = "id" +jsonSpecialFields "paId" = "id" +jsonSpecialFields "piId" = "id" jsonSpecialFields "sId" = "id" jsonSpecialFields "tId" = "id" jsonSpecialFields "aData" = "data" diff --git a/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateFiles.hs b/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateFiles.hs index b1ca3c316..c92e82b0b 100644 --- a/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateFiles.hs +++ b/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateFiles.hs @@ -103,8 +103,8 @@ html = {# VARIABLES #} {# ------------------------------------------------------------------------------------ #} {%- set km = ctx.knowledgeModel -%} -{%- set replies = ctx.questionnaireReplies -%} -{%- set repliesMap = ctx.questionnaireRepliesMap -%} +{%- set replies = ctx.projectReplies -%} +{%- set repliesMap = ctx.projectRepliesMap -%} {%- set report = ctx.report -%} {%- set metricDefinitions = ctx.metrics -%} {%- set levelDefinitions = ctx.levels -%} @@ -380,7 +380,7 @@ html =

- {{ctx.questionnaireName}}
+ {{ctx.projectName}}
{{km.name}}

diff --git a/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs b/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs index c73aa879e..f0971c60c 100644 --- a/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs +++ b/shared-common/src/Shared/DocumentTemplate/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs @@ -11,14 +11,14 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. wizardDocumentTemplate :: DocumentTemplate wizardDocumentTemplate = DocumentTemplate - { tId = "global:questionnaire-report:1.0.0" - , name = "Questionnaire Report" + { tId = "global:project-report:1.0.0" + , name = "Project Report" , organizationId = "global" - , templateId = "questionnaire-report" + , templateId = "project-report" , version = "1.0.0" , phase = ReleasedDocumentTemplatePhase , metamodelVersion = documentTemplateMetamodelVersion - , description = "Exported questions and answers from a questionnaire" + , description = "Exported questions and answers from a project" , readme = "# Default DocumentTemplate" , license = "Apache-2.0" , allowedPackages = [kmPackagePatternAll] @@ -34,7 +34,7 @@ wizardDocumentTemplateDeprecated = wizardDocumentTemplate {phase = DeprecatedDoc wizardDocumentTemplateDraft :: DocumentTemplate wizardDocumentTemplateDraft = wizardDocumentTemplate - { tId = "global:questionnaire-report:2.0.0" + { tId = "global:project-report:2.0.0" , name = "DRAFT: " ++ wizardDocumentTemplate.name , version = "2.0.0" , phase = DraftDocumentTemplatePhase @@ -45,7 +45,7 @@ wizardDocumentTemplateDraft = wizardDocumentTemplateNlDraft :: DocumentTemplate wizardDocumentTemplateNlDraft = wizardDocumentTemplate - { tId = "org.nl.amsterdam:questionnaire-report:3.0.0" + { tId = "org.nl.amsterdam:project-report:3.0.0" , name = "New Document Template" , organizationId = "org.nl.amsterdam" , version = "3.0.0" diff --git a/wizard-public/src/WizardLib/Public/Api/Resource/Tenant/Usage/WizardUsageDTO.hs b/wizard-public/src/WizardLib/Public/Api/Resource/Tenant/Usage/WizardUsageDTO.hs index f5fcf5571..1777be88b 100644 --- a/wizard-public/src/WizardLib/Public/Api/Resource/Tenant/Usage/WizardUsageDTO.hs +++ b/wizard-public/src/WizardLib/Public/Api/Resource/Tenant/Usage/WizardUsageDTO.hs @@ -11,7 +11,7 @@ data WizardUsageDTO = WizardUsageDTO , knowledgeModelEditors :: UsageEntryDTO , documentTemplates :: UsageEntryDTO , documentTemplateDrafts :: UsageEntryDTO - , questionnaires :: UsageEntryDTO + , projects :: UsageEntryDTO , documents :: UsageEntryDTO , locales :: UsageEntryDTO , storage :: UsageEntryDTO diff --git a/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs b/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs index 6ca576e01..2ad3c5039 100644 --- a/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs +++ b/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs @@ -11,7 +11,7 @@ tenantLimitBundleChange = , knowledgeModelEditors = -1000 , documentTemplates = -1000 , documentTemplateDrafts = -1000 - , questionnaires = -1000 + , projects = -1000 , documents = -1000 , locales = -1000 , storage = -1000 * 5 * 1000 * 1000 diff --git a/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantUsages.hs b/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantUsages.hs index 544f1371e..3cef73bd3 100644 --- a/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantUsages.hs +++ b/wizard-public/src/WizardLib/Public/Database/Migration/Development/Tenant/Data/TenantUsages.hs @@ -12,7 +12,7 @@ defaultUsage = , knowledgeModelEditors = defaultUsageKnowledgeModelEditors , documentTemplates = defaultUsageDocumentTemplates , documentTemplateDrafts = defaultUsageDocumentTemplateDrafts - , questionnaires = defaultUsageQuestionnaires + , projects = defaultUsageProjects , documents = defaultUsageDocuments , locales = defaultUsageLocales , storage = defaultUsageStorage @@ -42,8 +42,8 @@ defaultUsageDocumentTemplates = UsageEntryDTO {current = 0, max = -1000} defaultUsageDocumentTemplateDrafts :: UsageEntryDTO defaultUsageDocumentTemplateDrafts = UsageEntryDTO {current = 0, max = -1000} -defaultUsageQuestionnaires :: UsageEntryDTO -defaultUsageQuestionnaires = UsageEntryDTO {current = 0, max = -1000} +defaultUsageProjects :: UsageEntryDTO +defaultUsageProjects = UsageEntryDTO {current = 0, max = -1000} defaultUsageDocuments :: UsageEntryDTO defaultUsageDocuments = UsageEntryDTO {current = 0, max = -1000} diff --git a/wizard-public/src/WizardLib/Public/Model/PersistentCommand/Questionnaire/CreateQuestionnaireCommand.hs b/wizard-public/src/WizardLib/Public/Model/PersistentCommand/Project/CreateProjectCommand.hs similarity index 54% rename from wizard-public/src/WizardLib/Public/Model/PersistentCommand/Questionnaire/CreateQuestionnaireCommand.hs rename to wizard-public/src/WizardLib/Public/Model/PersistentCommand/Project/CreateProjectCommand.hs index 16fb84c5a..2482efb52 100644 --- a/wizard-public/src/WizardLib/Public/Model/PersistentCommand/Questionnaire/CreateQuestionnaireCommand.hs +++ b/wizard-public/src/WizardLib/Public/Model/PersistentCommand/Project/CreateProjectCommand.hs @@ -1,11 +1,11 @@ -module WizardLib.Public.Model.PersistentCommand.Questionnaire.CreateQuestionnaireCommand where +module WizardLib.Public.Model.PersistentCommand.Project.CreateProjectCommand where import Data.Aeson import GHC.Generics import Shared.Common.Util.Aeson -data CreateQuestionnaireCommand = CreateQuestionnaireCommand +data CreateProjectCommand = CreateProjectCommand { name :: String , emails :: [String] , knowledgeModelPackageId :: String @@ -13,8 +13,8 @@ data CreateQuestionnaireCommand = CreateQuestionnaireCommand } deriving (Show, Eq, Generic) -instance FromJSON CreateQuestionnaireCommand where +instance FromJSON CreateProjectCommand where parseJSON = genericParseJSON jsonOptions -instance ToJSON CreateQuestionnaireCommand where +instance ToJSON CreateProjectCommand where toJSON = genericToJSON jsonOptions diff --git a/wizard-public/src/WizardLib/Public/Model/Tenant/Limit/TenantLimitBundleChange.hs b/wizard-public/src/WizardLib/Public/Model/Tenant/Limit/TenantLimitBundleChange.hs index 1e312d7ee..b021aee94 100644 --- a/wizard-public/src/WizardLib/Public/Model/Tenant/Limit/TenantLimitBundleChange.hs +++ b/wizard-public/src/WizardLib/Public/Model/Tenant/Limit/TenantLimitBundleChange.hs @@ -13,7 +13,7 @@ data TenantLimitBundleChange = TenantLimitBundleChange , knowledgeModelEditors :: Int , documentTemplates :: Int , documentTemplateDrafts :: Int - , questionnaires :: Int + , projects :: Int , documents :: Int , locales :: Int , storage :: Int64 diff --git a/wizard-server/src/Wizard/Api/Handler/Api.hs b/wizard-server/src/Wizard/Api/Handler/Api.hs index c33ed9e4a..502a792c6 100644 --- a/wizard-server/src/Wizard/Api/Handler/Api.hs +++ b/wizard-server/src/Wizard/Api/Handler/Api.hs @@ -6,7 +6,6 @@ import Wizard.Api.Handler.ActionKey.Api import Wizard.Api.Handler.ApiKey.Api import Wizard.Api.Handler.AppKey.Api import Wizard.Api.Handler.Auth.Api -import Wizard.Api.Handler.CommentThread.Api import Wizard.Api.Handler.Config.Api import Wizard.Api.Handler.Dev.Api import Wizard.Api.Handler.Document.Api @@ -24,15 +23,13 @@ import Wizard.Api.Handler.KnowledgeModelEditor.Api import Wizard.Api.Handler.KnowledgeModelPackage.Api import Wizard.Api.Handler.KnowledgeModelSecret.Api import Wizard.Api.Handler.Locale.Api -import Wizard.Api.Handler.Migration.Api import Wizard.Api.Handler.PersistentCommand.Api import Wizard.Api.Handler.Prefab.Api -import Wizard.Api.Handler.Questionnaire.Api -import Wizard.Api.Handler.Questionnaire.Event.Api -import Wizard.Api.Handler.Questionnaire.Version.Api -import Wizard.Api.Handler.QuestionnaireAction.Api -import Wizard.Api.Handler.QuestionnaireFile.Api -import Wizard.Api.Handler.QuestionnaireImporter.Api +import Wizard.Api.Handler.Project.Api +import Wizard.Api.Handler.ProjectAction.Api +import Wizard.Api.Handler.ProjectCommentThread.Api +import Wizard.Api.Handler.ProjectFile.Api +import Wizard.Api.Handler.ProjectImporter.Api import Wizard.Api.Handler.Registry.Api import Wizard.Api.Handler.Submission.Api import Wizard.Api.Handler.Tenant.Api @@ -47,7 +44,6 @@ type ApplicationAPI = :<|> ApiKeyAPI :<|> AppKeyAPI :<|> AuthAPI - :<|> CommentThreadAPI :<|> ConfigAPI :<|> DevAPI :<|> DocumentTemplateAPI @@ -65,15 +61,13 @@ type ApplicationAPI = :<|> KnowledgeModelPackageAPI :<|> KnowledgeModelSecretAPI :<|> LocaleAPI - :<|> MigrationAPI :<|> PersistentCommandAPI :<|> PrefabAPI - :<|> QuestionnaireAPI - :<|> QuestionnaireEventAPI - :<|> QuestionnaireVersionAPI - :<|> QuestionnaireFileAPI - :<|> QuestionnaireActionAPI - :<|> QuestionnaireImporterAPI + :<|> ProjectAPI + :<|> ProjectActionAPI + :<|> ProjectCommentThreadAPI + :<|> ProjectFileAPI + :<|> ProjectImporterAPI :<|> RegistryAPI :<|> SubmissionAPI :<|> TenantAPI @@ -91,7 +85,6 @@ applicationServer = :<|> apiKeyServer :<|> appKeyServer :<|> authServer - :<|> commentThreadServer :<|> configServer :<|> devServer :<|> documentTemplateServer @@ -109,15 +102,13 @@ applicationServer = :<|> knowledgeModelPackageServer :<|> knowledgeModelSecretServer :<|> localeServer - :<|> migrationServer :<|> persistentCommandServer :<|> prefabServer - :<|> questionnaireServer - :<|> questionnaireEventServer - :<|> questionnaireVersionServer - :<|> questionnaireFileServer - :<|> questionnaireActionServer - :<|> questionnaireImporterServer + :<|> projectServer + :<|> projectActionServer + :<|> projectCommentThreadServer + :<|> projectFileServer + :<|> projectImporterServer :<|> registryServer :<|> submissionServer :<|> tenantServer diff --git a/wizard-server/src/Wizard/Api/Handler/CommentThread/Api.hs b/wizard-server/src/Wizard/Api/Handler/CommentThread/Api.hs deleted file mode 100644 index 81d7cd41c..000000000 --- a/wizard-server/src/Wizard/Api/Handler/CommentThread/Api.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Api.Handler.CommentThread.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.CommentThread.List_GET -import Wizard.Model.Context.BaseContext - -type CommentThreadAPI = - Tags "CommentThread" - :> List_GET - -commentThreadApi :: Proxy CommentThreadAPI -commentThreadApi = Proxy - -commentThreadServer :: ServerT CommentThreadAPI BaseContextM -commentThreadServer = - list_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Document/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/Document/List_GET.hs index 257ce006c..639bf15fc 100644 --- a/wizard-server/src/Wizard/Api/Handler/Document/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Document/List_GET.hs @@ -17,7 +17,7 @@ type List_GET = Header "Authorization" String :> Header "Host" String :> "documents" - :> QueryParam "questionnaireUuid" U.UUID + :> QueryParam "projectUuid" U.UUID :> QueryParam "documentTemplateId" String :> QueryParam "q" String :> QueryParam "page" Int @@ -35,7 +35,7 @@ list_GET -> Maybe Int -> Maybe String -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page DocumentDTO)) -list_GET mTokenHeader mServerUrl mQuestionnaireUuid mDocumentTemplateId mQuery mPage mSize mSort = +list_GET mTokenHeader mServerUrl mProjectUuid mDocumentTemplateId mQuery mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ - addTraceUuidHeader =<< getDocumentsPageDto mQuestionnaireUuid mDocumentTemplateId mQuery (Pageable mPage mSize) (parseSortQuery mSort) + addTraceUuidHeader =<< getDocumentsPageDto mProjectUuid mDocumentTemplateId mQuery (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/DocumentTemplateDraft/Detail_Documents_Preview_GET.hs b/wizard-server/src/Wizard/Api/Handler/DocumentTemplateDraft/Detail_Documents_Preview_GET.hs index f48aa1d9d..c62457930 100644 --- a/wizard-server/src/Wizard/Api/Handler/DocumentTemplateDraft/Detail_Documents_Preview_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/DocumentTemplateDraft/Detail_Documents_Preview_GET.hs @@ -34,5 +34,5 @@ detail_documents_preview_GET mTokenHeader mServerUrl documentTemplateId = case doc.state of DoneDocumentState -> addTraceUuidHeader fileDto ErrorDocumentState -> - throwError $ SystemLogError (_ERROR_SERVICE_QTN__UNABLE_TO_GENERATE_DOCUMENT_PREVIEW $ doc.workerLog) + throwError $ SystemLogError (_ERROR_SERVICE_PROJECT__UNABLE_TO_GENERATE_DOCUMENT_PREVIEW $ doc.workerLog) _ -> throwError AcceptedError diff --git a/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Api.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Api.hs index f78024bd9..f900bdf7b 100644 --- a/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Api.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Api.hs @@ -10,6 +10,7 @@ import Wizard.Api.Handler.KnowledgeModelEditor.Detail_WS import Wizard.Api.Handler.KnowledgeModelEditor.List_GET import Wizard.Api.Handler.KnowledgeModelEditor.List_POST import Wizard.Api.Handler.KnowledgeModelEditor.List_Suggestions_GET +import Wizard.Api.Handler.KnowledgeModelEditor.Migration.Api import Wizard.Model.Context.BaseContext type KnowledgeModelEditorAPI = @@ -21,6 +22,7 @@ type KnowledgeModelEditorAPI = :<|> Detail_PUT :<|> Detail_DELETE :<|> Detail_WS + :<|> MigrationAPI ) knowledgeModelEditorApi :: Proxy KnowledgeModelEditorAPI @@ -35,3 +37,4 @@ knowledgeModelEditorServer = :<|> detail_PUT :<|> detail_DELETE :<|> detail_WS + :<|> migrationServer diff --git a/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Detail_WS.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Detail_WS.hs index 39ba19055..78cbb3a43 100644 --- a/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Detail_WS.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Detail_WS.hs @@ -10,8 +10,8 @@ import Prelude hiding (log) import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Api.Handler.Websocket -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionJM () +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageJM () import Wizard.Model.Context.AppContext import Wizard.Model.Context.BaseContext import Wizard.Service.KnowledgeModel.Editor.Collaboration.CollaborationService @@ -45,12 +45,12 @@ handleMessage editorUuid connectionUuid connection = handleClose :: AppContextM () handleClose = deleteUser editorUuid connectionUuid -- ------------------------------------------------------------------------------------ - handleAction :: ClientKnowledgeModelEditorActionDTO -> AppContextM () - handleAction (SetContent_ClientKnowledgeModelEditorActionDTO reqDto) = do + handleAction :: ClientKnowledgeModelEditorMessageDTO -> AppContextM () + handleAction (SetContent_ClientKnowledgeModelEditorMessageDTO reqDto) = do log connectionUuid "SetContent" setContent editorUuid connectionUuid reqDto handleMessage editorUuid connectionUuid connection - handleAction (SetReplies_ClientKnowledgeModelEditorActionDTO reqDto) = do + handleAction (SetReplies_ClientKnowledgeModelEditorMessageDTO reqDto) = do log connectionUuid "SetReplies" setReplies editorUuid connectionUuid reqDto handleMessage editorUuid connectionUuid connection diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/Api.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/Api.hs similarity index 57% rename from wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/Api.hs rename to wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/Api.hs index 8291369f1..ef999409f 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/Api.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/Api.hs @@ -1,13 +1,13 @@ -module Wizard.Api.Handler.Migration.KnowledgeModel.Api where +module Wizard.Api.Handler.KnowledgeModelEditor.Migration.Api where import Servant import Servant.Swagger.Tags -import Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_Conflict_All_POST -import Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_Conflict_POST -import Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_DELETE -import Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_GET -import Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_POST +import Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_Conflict_All_POST +import Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_Conflict_POST +import Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_DELETE +import Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_GET +import Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_POST import Wizard.Model.Context.BaseContext type MigrationAPI = diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_Conflict_All_POST.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_Conflict_All_POST.hs similarity index 84% rename from wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_Conflict_All_POST.hs rename to wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_Conflict_All_POST.hs index 7ce75b85a..47fc5e66d 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_Conflict_All_POST.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_Conflict_All_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_Conflict_All_POST where +module Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_Conflict_All_POST where import qualified Data.UUID as U import Servant @@ -7,7 +7,7 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService type List_Current_Conflict_All_POST = Header "Authorization" String diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_Conflict_POST.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_Conflict_POST.hs similarity index 87% rename from wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_Conflict_POST.hs rename to wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_Conflict_POST.hs index 95e08b9be..69016c85e 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_Conflict_POST.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_Conflict_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_Conflict_POST where +module Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_Conflict_POST where import qualified Data.UUID as U import Servant @@ -9,7 +9,7 @@ import Wizard.Api.Handler.Common import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationResolutionDTO import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationResolutionJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService type List_Current_Conflict_POST = Header "Authorization" String diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_DELETE.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_DELETE.hs similarity index 84% rename from wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_DELETE.hs rename to wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_DELETE.hs index 4616a64ad..fac9b16e6 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_DELETE.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_DELETE where +module Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_DELETE where import qualified Data.UUID as U import Servant @@ -7,7 +7,7 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService type List_Current_DELETE = Header "Authorization" String diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_GET.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_GET.hs similarity index 86% rename from wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_GET.hs rename to wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_GET.hs index d224b9fab..a9cbcb019 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_GET where +module Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_GET where import qualified Data.UUID as U import Servant @@ -9,7 +9,7 @@ import Wizard.Api.Handler.Common import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationDTO import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationStateJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService type List_Current_GET = Header "Authorization" String diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_POST.hs b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_POST.hs similarity index 89% rename from wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_POST.hs rename to wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_POST.hs index d1e242864..43bd4efb3 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/KnowledgeModel/List_Current_POST.hs +++ b/wizard-server/src/Wizard/Api/Handler/KnowledgeModelEditor/Migration/List_Current_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.KnowledgeModel.List_Current_POST where +module Wizard.Api.Handler.KnowledgeModelEditor.Migration.List_Current_POST where import qualified Data.UUID as U import Servant @@ -11,7 +11,7 @@ import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationCreat import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationDTO import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationStateJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService type List_Current_POST = Header "Authorization" String diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/Api.hs b/wizard-server/src/Wizard/Api/Handler/Migration/Api.hs deleted file mode 100644 index 531a7dd48..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Migration/Api.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Handler.Migration.Api where - -import Servant - -import qualified Wizard.Api.Handler.Migration.KnowledgeModel.Api as KM -import qualified Wizard.Api.Handler.Migration.Questionnaire.Api as QTN -import Wizard.Model.Context.BaseContext - -type MigrationAPI = - KM.MigrationAPI - :<|> QTN.MigrationAPI - -migrationApi :: Proxy MigrationAPI -migrationApi = Proxy - -migrationServer :: ServerT MigrationAPI BaseContextM -migrationServer = KM.migrationServer :<|> QTN.migrationServer diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/Api.hs b/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/Api.hs deleted file mode 100644 index e22d62341..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/Api.hs +++ /dev/null @@ -1,27 +0,0 @@ -module Wizard.Api.Handler.Migration.Questionnaire.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.Migration.Questionnaire.List_Current_Completion_POST -import Wizard.Api.Handler.Migration.Questionnaire.List_Current_DELETE -import Wizard.Api.Handler.Migration.Questionnaire.List_Current_GET -import Wizard.Api.Handler.Migration.Questionnaire.List_Current_PUT -import Wizard.Api.Handler.Migration.Questionnaire.List_POST -import Wizard.Model.Context.BaseContext - -type MigrationAPI = - Tags "Questionnaire Migration" - :> ( List_POST - :<|> List_Current_GET - :<|> List_Current_PUT - :<|> List_Current_DELETE - :<|> List_Current_Completion_POST - ) - -migrationApi :: Proxy MigrationAPI -migrationApi = Proxy - -migrationServer :: ServerT MigrationAPI BaseContextM -migrationServer = - list_POST :<|> list_current_GET :<|> list_current_PUT :<|> list_current_DELETE :<|> list_current_completion_POST diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_PUT.hs deleted file mode 100644 index 5afb2494e..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_PUT.hs +++ /dev/null @@ -1,34 +0,0 @@ -module Wizard.Api.Handler.Migration.Questionnaire.List_Current_PUT where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeJM () -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Migration.MigrationService - -type List_Current_PUT = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] MigratorStateChangeDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "migrations" - :> "current" - :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] MigratorStateDTO) - -list_current_PUT - :: Maybe String - -> Maybe String - -> MigratorStateChangeDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] MigratorStateDTO) -list_current_PUT mTokenHeader mServerUrl reqDto qtnUuid = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< modifyQuestionnaireMigration qtnUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_POST.hs deleted file mode 100644 index 0d4b87f7a..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_POST.hs +++ /dev/null @@ -1,33 +0,0 @@ -module Wizard.Api.Handler.Migration.Questionnaire.List_POST where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateJM () -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Migration.MigrationService - -type List_POST = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] MigratorStateCreateDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "migrations" - :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] MigratorStateDTO) - -list_POST - :: Maybe String - -> Maybe String - -> MigratorStateCreateDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] MigratorStateDTO) -list_POST mTokenHeader mServerUrl reqDto qtnUuid = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< createQuestionnaireMigration qtnUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/Api.hs new file mode 100644 index 000000000..ac4c8a2b1 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Api.hs @@ -0,0 +1,91 @@ +module Wizard.Api.Handler.Project.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.Comment.Api +import Wizard.Api.Handler.Project.Detail_Content_PUT +import Wizard.Api.Handler.Project.Detail_DELETE +import Wizard.Api.Handler.Project.Detail_Documents_GET +import Wizard.Api.Handler.Project.Detail_Documents_Preview_GET +import Wizard.Api.Handler.Project.Detail_GET +import Wizard.Api.Handler.Project.Detail_Preview_GET +import Wizard.Api.Handler.Project.Detail_Questionnaire_GET +import Wizard.Api.Handler.Project.Detail_Report_GET +import Wizard.Api.Handler.Project.Detail_Revert_POST +import Wizard.Api.Handler.Project.Detail_Revert_Preview_POST +import Wizard.Api.Handler.Project.Detail_Settings_GET +import Wizard.Api.Handler.Project.Detail_Settings_PUT +import Wizard.Api.Handler.Project.Detail_Share_PUT +import Wizard.Api.Handler.Project.Detail_WS +import Wizard.Api.Handler.Project.Event.Api +import Wizard.Api.Handler.Project.File.Api +import Wizard.Api.Handler.Project.List_GET +import Wizard.Api.Handler.Project.List_POST +import Wizard.Api.Handler.Project.List_POST_CloneUuid +import Wizard.Api.Handler.Project.List_POST_FromTemplate +import Wizard.Api.Handler.Project.Migration.Api +import Wizard.Api.Handler.Project.Tag.Api +import Wizard.Api.Handler.Project.User.Api +import Wizard.Api.Handler.Project.Version.Api +import Wizard.Model.Context.BaseContext + +type ProjectAPI = + Tags "Project" + :> ( List_GET + :<|> List_POST + :<|> List_POST_FromTemplate + :<|> List_POST_CloneUuid + :<|> Detail_GET + :<|> Detail_Questionnaire_GET + :<|> Detail_Preview_GET + :<|> Detail_Settings_GET + :<|> Detail_Settings_PUT + :<|> Detail_Share_PUT + :<|> Detail_DELETE + :<|> Detail_Content_PUT + :<|> Detail_Report_GET + :<|> Detail_Documents_GET + :<|> Detail_Documents_Preview_GET + :<|> Detail_WS + :<|> Detail_Revert_POST + :<|> Detail_Revert_Preview_POST + :<|> CommentAPI + :<|> EventAPI + :<|> FileAPI + :<|> MigrationAPI + :<|> TagAPI + :<|> UserAPI + :<|> VersionAPI + ) + +projectApi :: Proxy ProjectAPI +projectApi = Proxy + +projectServer :: ServerT ProjectAPI BaseContextM +projectServer = + list_GET + :<|> list_POST + :<|> list_POST_FromTemplate + :<|> list_POST_CloneUuid + :<|> detail_GET + :<|> detail_questionnaire_GET + :<|> detail_preview_GET + :<|> detail_settings_GET + :<|> detail_settings_PUT + :<|> detail_share_PUT + :<|> detail_DELETE + :<|> detail_content_PUT + :<|> detail_report_GET + :<|> detail_documents_GET + :<|> detail_documents_preview_GET + :<|> detail_WS + :<|> detail_revert_POST + :<|> detail_revert_preview_POST + :<|> commentServer + :<|> eventServer + :<|> fileServer + :<|> migrationServer + :<|> tagServer + :<|> userServer + :<|> versionServer diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Comment/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/Comment/Api.hs new file mode 100644 index 000000000..3e4f35cfc --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Comment/Api.hs @@ -0,0 +1,17 @@ +module Wizard.Api.Handler.Project.Comment.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.Comment.List_GET +import Wizard.Model.Context.BaseContext + +type CommentAPI = + Tags "Project Comment" + :> List_GET + +commentApi :: Proxy CommentAPI +commentApi = Proxy + +commentServer :: ServerT CommentAPI BaseContextM +commentServer = list_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Comment/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Comment/List_GET.hs similarity index 53% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Comment/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Comment/List_GET.hs index babe7261f..77df6ef26 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Comment/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Comment/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Comment.List_GET where +module Wizard.Api.Handler.Project.Comment.List_GET where import qualified Data.Map.Strict as M import qualified Data.UUID as U @@ -7,20 +7,20 @@ import Servant import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListJM () +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListJM () import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentService +import Wizard.Model.Project.Comment.ProjectCommentList +import Wizard.Service.Project.Comment.ProjectCommentService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> QueryParam "path" String :> QueryParam "resolved" Bool :> "comments" - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (M.Map String [QuestionnaireCommentThreadList])) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (M.Map String [ProjectCommentThreadList])) list_GET :: Maybe String @@ -28,7 +28,7 @@ list_GET -> U.UUID -> Maybe String -> Maybe Bool - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (M.Map String [QuestionnaireCommentThreadList])) -list_GET mTokenHeader mServerUrl qtnUuid mPath mResolved = + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (M.Map String [ProjectCommentThreadList])) +list_GET mTokenHeader mServerUrl uuid mPath mResolved = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getQuestionnaireCommentsByQuestionnaireUuid qtnUuid mPath mResolved + runInAuthService NoTransaction $ addTraceUuidHeader =<< getProjectCommentsByProjectUuid uuid mPath mResolved diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Content_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Content_PUT.hs new file mode 100644 index 000000000..6af4ff057 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Content_PUT.hs @@ -0,0 +1,31 @@ +module Wizard.Api.Handler.Project.Detail_Content_PUT where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.ProjectContentChangeDTO +import Wizard.Api.Resource.Project.ProjectContentChangeJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type Detail_Content_PUT = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectContentChangeDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "content" + :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectContentChangeDTO) + +detail_content_PUT + :: Maybe String + -> Maybe String + -> ProjectContentChangeDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectContentChangeDTO) +detail_content_PUT mTokenHeader mServerUrl reqDto uuid = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< modifyContent uuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_DELETE.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_DELETE.hs similarity index 72% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_DELETE.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Detail_DELETE.hs index 81434205b..5d5b8b117 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_DELETE.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Detail_DELETE where +module Wizard.Api.Handler.Project.Detail_DELETE where import qualified Data.UUID as U import Servant @@ -7,20 +7,20 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.ProjectService type Detail_DELETE = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> Verb DELETE 204 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] NoContent) detail_DELETE :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] NoContent) -detail_DELETE mTokenHeader mServerUrl qtnUuid = +detail_DELETE mTokenHeader mServerUrl uuid = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService Transactional $ addTraceUuidHeader =<< do - deleteQuestionnaire qtnUuid True + deleteProject uuid True return NoContent diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Documents_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Documents_GET.hs similarity index 77% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Documents_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Detail_Documents_GET.hs index 841f11ce3..65f427b81 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Documents_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Documents_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Documents_GET where +module Wizard.Api.Handler.Project.Detail_Documents_GET where import qualified Data.UUID as U import Servant @@ -16,8 +16,8 @@ import Wizard.Service.Document.DocumentService type Detail_Documents_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "documents" :> QueryParam "q" String :> QueryParam "page" Int @@ -34,7 +34,7 @@ detail_documents_GET -> Maybe Int -> Maybe String -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page DocumentDTO)) -detail_documents_GET mTokenHeader mServerUrl qtnUuid mQuery mPage mSize mSort = +detail_documents_GET mTokenHeader mServerUrl uuid mQuery mPage mSize mSort = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ - addTraceUuidHeader =<< getDocumentsForQtn qtnUuid mQuery (Pageable mPage mSize) (parseSortQuery mSort) + addTraceUuidHeader =<< getDocumentsForProject uuid mQuery (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Documents_Preview_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Documents_Preview_GET.hs similarity index 76% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Documents_Preview_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Detail_Documents_Preview_GET.hs index eeb6c79c7..081adc72e 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Documents_Preview_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Documents_Preview_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Documents_Preview_GET where +module Wizard.Api.Handler.Project.Detail_Documents_Preview_GET where import qualified Data.UUID as U import Servant @@ -17,8 +17,8 @@ import WizardLib.Public.Api.Resource.TemporaryFile.TemporaryFileJM () type Detail_Documents_Preview_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "documents" :> "preview" :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] TemporaryFileDTO) @@ -28,12 +28,12 @@ detail_documents_preview_GET -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] TemporaryFileDTO) -detail_documents_preview_GET mTokenHeader mServerUrl qtnUuid = +detail_documents_preview_GET mTokenHeader mServerUrl uuid = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInMaybeAuthService -> runInMaybeAuthService Transactional $ do - (doc, fileDto) <- createDocumentPreviewForQtn qtnUuid + (doc, fileDto) <- createDocumentPreviewForProject uuid case doc.state of DoneDocumentState -> addTraceUuidHeader fileDto ErrorDocumentState -> - throwError $ SystemLogError (_ERROR_SERVICE_QTN__UNABLE_TO_GENERATE_DOCUMENT_PREVIEW $ doc.workerLog) + throwError $ SystemLogError (_ERROR_SERVICE_PROJECT__UNABLE_TO_GENERATE_DOCUMENT_PREVIEW $ doc.workerLog) _ -> throwError AcceptedError diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_GET.hs new file mode 100644 index 000000000..34373cd5c --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_GET.hs @@ -0,0 +1,25 @@ +module Wizard.Api.Handler.Project.Detail_GET where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Detail.ProjectDetailDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type Detail_GET = + Header "Authorization" String + :> Header "Host" String + :> "projects" + :> Capture "uuid" U.UUID + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDetailDTO) + +detail_GET + :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDetailDTO) +detail_GET mTokenHeader mServerUrl uuid = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService NoTransaction $ addTraceUuidHeader =<< getProjectDetailByUuid uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Preview_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Preview_GET.hs new file mode 100644 index 000000000..ccb930e4c --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Preview_GET.hs @@ -0,0 +1,29 @@ +module Wizard.Api.Handler.Project.Detail_Preview_GET where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Detail.ProjectDetailPreviewJM () +import Wizard.Model.Context.BaseContext +import Wizard.Model.Project.Detail.ProjectDetailPreview +import Wizard.Service.Project.ProjectService + +type Detail_Preview_GET = + Header "Authorization" String + :> Header "Host" String + :> "projects" + :> Capture "uuid" U.UUID + :> "preview" + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDetailPreview) + +detail_preview_GET + :: Maybe String + -> Maybe String + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDetailPreview) +detail_preview_GET mTokenHeader mServerUrl uuid = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService NoTransaction $ addTraceUuidHeader =<< getProjectDetailPreviewById uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Questionnaire_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Questionnaire_GET.hs new file mode 100644 index 000000000..deba28871 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Questionnaire_GET.hs @@ -0,0 +1,29 @@ +module Wizard.Api.Handler.Project.Detail_Questionnaire_GET where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type Detail_Questionnaire_GET = + Header "Authorization" String + :> Header "Host" String + :> "projects" + :> Capture "uuid" U.UUID + :> "questionnaire" + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDetailQuestionnaireDTO) + +detail_questionnaire_GET + :: Maybe String + -> Maybe String + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDetailQuestionnaireDTO) +detail_questionnaire_GET mTokenHeader mServerUrl uuid = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService NoTransaction $ addTraceUuidHeader =<< getProjectDetailQuestionnaireByUuid uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Report_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Report_GET.hs similarity index 59% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Report_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Detail_Report_GET.hs index 26a389c07..88e6f5701 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Report_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Report_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Report_GET where +module Wizard.Api.Handler.Project.Detail_Report_GET where import qualified Data.UUID as U import Servant @@ -6,21 +6,21 @@ import Servant import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportJM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportJM () import Wizard.Model.Context.BaseContext import Wizard.Service.Report.ReportService type Detail_Report_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "report" - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailReportDTO) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDetailReportDTO) detail_report_GET - :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailReportDTO) -detail_report_GET mTokenHeader mServerUrl qtnUuid = + :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDetailReportDTO) +detail_report_GET mTokenHeader mServerUrl uuid = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getReportByQuestionnaireUuid qtnUuid + runInAuthService NoTransaction $ addTraceUuidHeader =<< getReportByProjectUuid uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_POST.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_POST.hs new file mode 100644 index 000000000..2ded60c5b --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_POST.hs @@ -0,0 +1,33 @@ +module Wizard.Api.Handler.Project.Detail_Revert_POST where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Api.Resource.Project.ProjectContentJM () +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Version.ProjectVersionService + +type Detail_Revert_POST = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectVersionRevertDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "revert" + :> Post '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectContentDTO) + +detail_revert_POST + :: Maybe String + -> Maybe String + -> ProjectVersionRevertDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectContentDTO) +detail_revert_POST mTokenHeader mServerUrl reqDto uuid = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< revertToEvent uuid reqDto True diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_Preview_POST.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_Preview_POST.hs new file mode 100644 index 000000000..e71c5bb69 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Revert_Preview_POST.hs @@ -0,0 +1,34 @@ +module Wizard.Api.Handler.Project.Detail_Revert_Preview_POST where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Api.Resource.Project.ProjectContentJM () +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Version.ProjectVersionService + +type Detail_Revert_Preview_POST = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectVersionRevertDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "revert" + :> "preview" + :> Post '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectContentDTO) + +detail_revert_preview_POST + :: Maybe String + -> Maybe String + -> ProjectVersionRevertDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectContentDTO) +detail_revert_preview_POST mTokenHeader mServerUrl reqDto uuid = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< revertToEvent uuid reqDto False diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_GET.hs new file mode 100644 index 000000000..2562dd24b --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_GET.hs @@ -0,0 +1,29 @@ +module Wizard.Api.Handler.Project.Detail_Settings_GET where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Detail.ProjectDetailSettingsJM () +import Wizard.Model.Context.BaseContext +import Wizard.Model.Project.Detail.ProjectDetailSettings +import Wizard.Service.Project.ProjectService + +type Detail_Settings_GET = + Header "Authorization" String + :> Header "Host" String + :> "projects" + :> Capture "uuid" U.UUID + :> "settings" + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDetailSettings) + +detail_settings_GET + :: Maybe String + -> Maybe String + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDetailSettings) +detail_settings_GET mTokenHeader mServerUrl uuid = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService NoTransaction $ addTraceUuidHeader =<< getProjectDetailSettingsById uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_PUT.hs new file mode 100644 index 000000000..e781737b9 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Settings_PUT.hs @@ -0,0 +1,31 @@ +module Wizard.Api.Handler.Project.Detail_Settings_PUT where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO +import Wizard.Api.Resource.Project.ProjectSettingsChangeJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type Detail_Settings_PUT = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectSettingsChangeDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "settings" + :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectSettingsChangeDTO) + +detail_settings_PUT + :: Maybe String + -> Maybe String + -> ProjectSettingsChangeDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectSettingsChangeDTO) +detail_settings_PUT mTokenHeader mServerUrl reqDto uuid = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< modifyProjectSettings uuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Detail_Share_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Share_PUT.hs new file mode 100644 index 000000000..ea952611c --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_Share_PUT.hs @@ -0,0 +1,31 @@ +module Wizard.Api.Handler.Project.Detail_Share_PUT where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.ProjectShareChangeDTO +import Wizard.Api.Resource.Project.ProjectShareChangeJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type Detail_Share_PUT = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectShareChangeDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "share" + :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectShareChangeDTO) + +detail_share_PUT + :: Maybe String + -> Maybe String + -> ProjectShareChangeDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectShareChangeDTO) +detail_share_PUT mTokenHeader mServerUrl reqDto uuid = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< modifyProjectShare uuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_WS.hs b/wizard-server/src/Wizard/Api/Handler/Project/Detail_WS.hs similarity index 51% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_WS.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Detail_WS.hs index 6bd8adabb..9f8da2647 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_WS.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Detail_WS.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Detail_WS where +module Wizard.Api.Handler.Project.Detail_WS where import Control.Monad.Except (catchError) import qualified Data.UUID as U @@ -10,43 +10,43 @@ import Prelude hiding (log) import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Api.Handler.Websocket -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO -import Wizard.Api.Resource.Websocket.QuestionnaireActionJM () +import Wizard.Api.Resource.Websocket.ProjectMessageDTO +import Wizard.Api.Resource.Websocket.ProjectMessageJM () import Wizard.Model.Context.AppContext import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Collaboration.CollaborationService +import Wizard.Service.Project.Collaboration.ProjectCollaborationService import Wizard.Util.Websocket type Detail_WS = Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "websocket" :> QueryParam "Authorization" String :> WebSocket detail_WS :: Maybe String -> U.UUID -> Maybe String -> Connection -> BaseContextM () -detail_WS mServerUrl qtnUuid mTokenHeader connection = +detail_WS mServerUrl projectUuid mTokenHeader connection = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInMaybeAuthService -> runInMaybeAuthService NoTransaction $ do connectionUuid <- initConnection catchError - (putUserOnline qtnUuid connectionUuid connection) - (sendError connectionUuid connection (U.toString qtnUuid) disconnectUser) - handleMessage qtnUuid connectionUuid connection + (putUserOnline projectUuid connectionUuid connection) + (sendError connectionUuid connection (U.toString projectUuid) disconnectUser) + handleMessage projectUuid connectionUuid connection handleMessage :: U.UUID -> U.UUID -> Connection -> AppContextM () -handleMessage qtnUuid connectionUuid connection = - handleWebsocketMessage (U.toString qtnUuid) connectionUuid connection handleClose disconnectUser handleAction continue +handleMessage projectUuid connectionUuid connection = + handleWebsocketMessage (U.toString projectUuid) connectionUuid connection handleClose disconnectUser handleAction continue where continue :: AppContextM () - continue = handleMessage qtnUuid connectionUuid connection + continue = handleMessage projectUuid connectionUuid connection -- ------------------------------------------------------------------------------------ handleClose :: AppContextM () - handleClose = deleteUser qtnUuid connectionUuid + handleClose = deleteUser projectUuid connectionUuid -- ------------------------------------------------------------------------------------ - handleAction :: ClientQuestionnaireActionDTO -> AppContextM () - handleAction (SetContent_ClientQuestionnaireActionDTO reqDto) = do + handleAction :: ClientProjectMessageDTO -> AppContextM () + handleAction (SetContent_ClientProjectMessageDTO reqDto) = do log connectionUuid "SetContent" - setContent qtnUuid connectionUuid reqDto - handleMessage qtnUuid connectionUuid connection + setContent projectUuid connectionUuid reqDto + handleMessage projectUuid connectionUuid connection diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Event/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/Event/Api.hs new file mode 100644 index 000000000..a4ed54334 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Event/Api.hs @@ -0,0 +1,20 @@ +module Wizard.Api.Handler.Project.Event.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.Event.Detail_GET +import Wizard.Api.Handler.Project.Event.List_GET +import Wizard.Model.Context.BaseContext + +type EventAPI = + Tags "Project Event" + :> ( List_GET + :<|> Detail_GET + ) + +eventApi :: Proxy EventAPI +eventApi = Proxy + +eventServer :: ServerT EventAPI BaseContextM +eventServer = list_GET :<|> detail_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Event/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Event/Detail_GET.hs new file mode 100644 index 000000000..210f1463d --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Event/Detail_GET.hs @@ -0,0 +1,31 @@ +module Wizard.Api.Handler.Project.Event.Detail_GET where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type Detail_GET = + Header "Authorization" String + :> Header "Host" String + :> "projects" + :> Capture "projectUuid" U.UUID + :> "events" + :> Capture "eventUuid" U.UUID + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectEventDTO) + +detail_GET + :: Maybe String + -> Maybe String + -> U.UUID + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectEventDTO) +detail_GET mTokenHeader mServerUrl projectUuid eventUuid = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService NoTransaction $ addTraceUuidHeader =<< getProjectEventForProjectUuid projectUuid eventUuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Event/List_GET.hs similarity index 62% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Event/List_GET.hs index 7b570acc0..3eae18d15 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Event/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Event.List_GET where +module Wizard.Api.Handler.Project.Event.List_GET where import qualified Data.UUID as U import Servant @@ -8,21 +8,21 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListJM () +import Wizard.Api.Resource.Project.Event.ProjectEventListJM () import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Service.Project.ProjectService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "events" :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireEventList)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectEventList)) list_GET :: Maybe String @@ -31,9 +31,9 @@ list_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireEventList)) -list_GET mTokenHeader mServerUrl qtnUuid mPage mSize mSort = + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectEventList)) +list_GET mTokenHeader mServerUrl uuid mPage mSize mSort = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ addTraceUuidHeader - =<< getQuestionnaireEventsPage qtnUuid (Pageable mPage mSize) (parseSortQuery mSort) + =<< getProjectEventsPage uuid (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/Project/File/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/File/Api.hs new file mode 100644 index 000000000..af907cc45 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/File/Api.hs @@ -0,0 +1,28 @@ +module Wizard.Api.Handler.Project.File.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.File.Detail_DELETE +import Wizard.Api.Handler.Project.File.Detail_Download_GET +import Wizard.Api.Handler.Project.File.List_GET +import Wizard.Api.Handler.Project.File.List_POST +import Wizard.Model.Context.BaseContext + +type FileAPI = + Tags "Project File" + :> ( List_GET + :<|> List_POST + :<|> Detail_DELETE + :<|> Detail_Download_GET + ) + +fileApi :: Proxy FileAPI +fileApi = Proxy + +fileServer :: ServerT FileAPI BaseContextM +fileServer = + list_GET + :<|> list_POST + :<|> detail_DELETE + :<|> detail_download_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Detail_DELETE.hs b/wizard-server/src/Wizard/Api/Handler/Project/File/Detail_DELETE.hs similarity index 70% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Detail_DELETE.hs rename to wizard-server/src/Wizard/Api/Handler/Project/File/Detail_DELETE.hs index 1efcbafaa..a7155af6f 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Detail_DELETE.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/File/Detail_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.File.Detail_DELETE where +module Wizard.Api.Handler.Project.File.Detail_DELETE where import qualified Data.UUID as U import Servant @@ -7,21 +7,21 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.File.QuestionnaireFileService +import Wizard.Service.Project.File.ProjectFileService type Detail_DELETE = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "questionnaireUuid" U.UUID + :> "projects" + :> Capture "projectUuid" U.UUID :> "files" :> Capture "fileUuid" U.UUID :> Verb DELETE 204 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] NoContent) detail_DELETE :: Maybe String -> Maybe String -> U.UUID -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] NoContent) -detail_DELETE mTokenHeader mServerUrl qtnUuid fileUuid = +detail_DELETE mTokenHeader mServerUrl projectUuid fileUuid = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService Transactional $ addTraceUuidHeader =<< do - deleteQuestionnaireFile qtnUuid fileUuid + deleteProjectFile projectUuid fileUuid return NoContent diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Detail_Download_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/File/Detail_Download_GET.hs similarity index 73% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Detail_Download_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/File/Detail_Download_GET.hs index 4109d186a..62b50b80e 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Detail_Download_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/File/Detail_Download_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.File.Detail_Download_GET where +module Wizard.Api.Handler.Project.File.Detail_Download_GET where import qualified Data.UUID as U import Servant @@ -7,20 +7,20 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.File.QuestionnaireFileService +import Wizard.Service.Project.File.ProjectFileService import WizardLib.Public.Api.Resource.TemporaryFile.TemporaryFileDTO import WizardLib.Public.Api.Resource.TemporaryFile.TemporaryFileJM () type Detail_Download_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "questionnaireUuid" U.UUID + :> "projects" + :> Capture "projectUuid" U.UUID :> "files" :> Capture "fileUuid" U.UUID :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] TemporaryFileDTO) detail_download_GET :: Maybe String -> Maybe String -> U.UUID -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] TemporaryFileDTO) -detail_download_GET mTokenHeader mServerUrl qtnUuid fileUuid = +detail_download_GET mTokenHeader mServerUrl projectUuid fileUuid = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInMaybeAuthService -> - runInMaybeAuthService Transactional $ addTraceUuidHeader =<< downloadQuestionnaireFile qtnUuid fileUuid + runInMaybeAuthService Transactional $ addTraceUuidHeader =<< downloadProjectFile projectUuid fileUuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/File/List_GET.hs similarity index 60% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/File/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/File/List_GET.hs index dbaba4ec6..ec4fece62 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/File/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.File.List_GET where +module Wizard.Api.Handler.Project.File.List_GET where import qualified Data.UUID as U import Servant @@ -8,22 +8,22 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileListJM () +import Wizard.Api.Resource.Project.File.ProjectFileListJM () import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Service.Questionnaire.File.QuestionnaireFileService +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Service.Project.File.ProjectFileService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "questionnaireUuid" U.UUID + :> "projects" + :> Capture "projectUuid" U.UUID :> "files" :> QueryParam "q" String :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireFileList)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectFileList)) list_GET :: Maybe String @@ -33,8 +33,8 @@ list_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireFileList)) -list_GET mTokenHeader mServerUrl qtnUuid mQuery mPage mSize mSort = + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectFileList)) +list_GET mTokenHeader mServerUrl uuid mQuery mPage mSize mSort = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInMaybeAuthService -> runInMaybeAuthService NoTransaction $ - addTraceUuidHeader =<< getQuestionnaireFilesPage mQuery (Just qtnUuid) (Pageable mPage mSize) (parseSortQuery mSort) + addTraceUuidHeader =<< getProjectFilesPage mQuery (Just uuid) (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/Project/File/List_POST.hs similarity index 64% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/File/List_POST.hs rename to wizard-server/src/Wizard/Api/Handler/Project/File/List_POST.hs index e7202b7bd..7844104d3 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/List_POST.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/File/List_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.File.List_POST where +module Wizard.Api.Handler.Project.File.List_POST where import qualified Data.UUID as U import Servant @@ -9,24 +9,24 @@ import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Api.Resource.File.FileCreateDTO import Wizard.Api.Resource.File.FileCreateJM () -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileListJM () +import Wizard.Api.Resource.Project.File.ProjectFileListJM () import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Service.Questionnaire.File.QuestionnaireFileService +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Service.Project.File.ProjectFileService type List_POST = Header "Authorization" String :> Header "Host" String :> MultipartForm Mem FileCreateDTO - :> "questionnaires" + :> "projects" :> Capture "uuid" U.UUID :> "files" :> Capture "questionUuid" U.UUID - :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireFileList) + :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectFileList) -list_POST :: Maybe String -> Maybe String -> FileCreateDTO -> U.UUID -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireFileList) -list_POST mTokenHeader mServerUrl reqDto qtnUuid questionUuid = +list_POST :: Maybe String -> Maybe String -> FileCreateDTO -> U.UUID -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectFileList) +list_POST mTokenHeader mServerUrl reqDto projectUuid questionUuid = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService Transactional $ addTraceUuidHeader =<< do - createQuestionnaireFile qtnUuid questionUuid reqDto + createProjectFile projectUuid questionUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/List_GET.hs similarity index 85% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/List_GET.hs index f9f24eb3e..30114b458 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.List_GET where +module Wizard.Api.Handler.Project.List_GET where import Servant @@ -8,15 +8,15 @@ import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Shared.Common.Util.String (splitOn) import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.ProjectService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" + :> "projects" :> QueryParam "q" String :> QueryParam "isTemplate" Bool :> QueryParam "isMigrating" Bool @@ -29,7 +29,7 @@ type List_GET = :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireDTO)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectDTO)) list_GET :: Maybe String @@ -46,7 +46,7 @@ list_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireDTO)) + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectDTO)) list_GET mTokenHeader mServerUrl mQuery mIsTemplate mIsMigrating mProjectTagsL mProjectTagsOp mUserUuidsL mUserUuidsOp mKnowledgeModelPackageIdsL mKnowledgeModelPackageIdsOp mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ @@ -54,7 +54,7 @@ list_GET mTokenHeader mServerUrl mQuery mIsTemplate mIsMigrating mProjectTagsL m let mUserUuids = fmap (splitOn ",") mUserUuidsL let mProjectTags = fmap (splitOn ",") mProjectTagsL let mKnowledgeModelPackageIds = fmap (splitOn ",") mKnowledgeModelPackageIdsL - getQuestionnairesForCurrentUserPageDto + getProjectsForCurrentUserPageDto mQuery mIsTemplate mIsMigrating diff --git a/wizard-server/src/Wizard/Api/Handler/Project/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/Project/List_POST.hs new file mode 100644 index 000000000..a2cbb7156 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/List_POST.hs @@ -0,0 +1,29 @@ +module Wizard.Api.Handler.Project.List_POST where + +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.ProjectCreateDTO +import Wizard.Api.Resource.Project.ProjectCreateJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type List_POST = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectCreateDTO + :> "projects" + :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDTO) + +list_POST + :: Maybe String + -> Maybe String + -> ProjectCreateDTO + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDTO) +list_POST mTokenHeader mServerUrl reqDto = + getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInMaybeAuthService -> + runInMaybeAuthService Transactional $ addTraceUuidHeader =<< createProject reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST_CloneUuid.hs b/wizard-server/src/Wizard/Api/Handler/Project/List_POST_CloneUuid.hs similarity index 56% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST_CloneUuid.hs rename to wizard-server/src/Wizard/Api/Handler/Project/List_POST_CloneUuid.hs index 871a6d7ab..21112fd59 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST_CloneUuid.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/List_POST_CloneUuid.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.List_POST_CloneUuid where +module Wizard.Api.Handler.Project.List_POST_CloneUuid where import qualified Data.UUID as U import Servant @@ -6,21 +6,21 @@ import Servant import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.ProjectService type List_POST_CloneUuid = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "clone" - :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDTO) + :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDTO) list_POST_CloneUuid - :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDTO) -list_POST_CloneUuid mTokenHeader mServerUrl cloneUuid = + :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDTO) +list_POST_CloneUuid mTokenHeader mServerUrl uuid = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< cloneQuestionnaire cloneUuid + runInAuthService Transactional $ addTraceUuidHeader =<< cloneProject uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Project/List_POST_FromTemplate.hs b/wizard-server/src/Wizard/Api/Handler/Project/List_POST_FromTemplate.hs new file mode 100644 index 000000000..e86fe4436 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/List_POST_FromTemplate.hs @@ -0,0 +1,30 @@ +module Wizard.Api.Handler.Project.List_POST_FromTemplate where + +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateDTO +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.ProjectService + +type List_POST_FromTemplate = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectCreateFromTemplateDTO + :> "projects" + :> "from-template" + :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectDTO) + +list_POST_FromTemplate + :: Maybe String + -> Maybe String + -> ProjectCreateFromTemplateDTO + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectDTO) +list_POST_FromTemplate mTokenHeader mServerUrl reqDto = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< createProjectFromTemplate reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Migration/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/Migration/Api.hs new file mode 100644 index 000000000..7d1a807d7 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Migration/Api.hs @@ -0,0 +1,31 @@ +module Wizard.Api.Handler.Project.Migration.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.Migration.List_Current_Completion_POST +import Wizard.Api.Handler.Project.Migration.List_Current_DELETE +import Wizard.Api.Handler.Project.Migration.List_Current_GET +import Wizard.Api.Handler.Project.Migration.List_Current_PUT +import Wizard.Api.Handler.Project.Migration.List_POST +import Wizard.Model.Context.BaseContext + +type MigrationAPI = + Tags "Project Migration" + :> ( List_POST + :<|> List_Current_GET + :<|> List_Current_PUT + :<|> List_Current_DELETE + :<|> List_Current_Completion_POST + ) + +migrationApi :: Proxy MigrationAPI +migrationApi = Proxy + +migrationServer :: ServerT MigrationAPI BaseContextM +migrationServer = + list_POST + :<|> list_current_GET + :<|> list_current_PUT + :<|> list_current_DELETE + :<|> list_current_completion_POST diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_Completion_POST.hs b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_Completion_POST.hs similarity index 70% rename from wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_Completion_POST.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_Completion_POST.hs index 2b28b0aa5..57a87d2db 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_Completion_POST.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_Completion_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.Questionnaire.List_Current_Completion_POST where +module Wizard.Api.Handler.Project.Migration.List_Current_Completion_POST where import qualified Data.UUID as U import Servant @@ -7,13 +7,13 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Migration.MigrationService +import Wizard.Service.Project.Migration.ProjectMigrationService type List_Current_Completion_POST = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "migrations" :> "current" :> "completion" @@ -21,9 +21,9 @@ type List_Current_Completion_POST = list_current_completion_POST :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] NoContent) -list_current_completion_POST mTokenHeader mServerUrl qtnUuid = +list_current_completion_POST mTokenHeader mServerUrl uuid = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService Transactional $ addTraceUuidHeader =<< do - finishQuestionnaireMigration qtnUuid + finishProjectMigration uuid return NoContent diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_DELETE.hs b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_DELETE.hs similarity index 71% rename from wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_DELETE.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_DELETE.hs index 933f4ab27..3878cebf1 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_DELETE.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.Questionnaire.List_Current_DELETE where +module Wizard.Api.Handler.Project.Migration.List_Current_DELETE where import qualified Data.UUID as U import Servant @@ -7,22 +7,22 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Migration.MigrationService +import Wizard.Service.Project.Migration.ProjectMigrationService type List_Current_DELETE = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "migrations" :> "current" :> Verb DELETE 204 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] NoContent) list_current_DELETE :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] NoContent) -list_current_DELETE mTokenHeader mServerUrl qtnUuid = +list_current_DELETE mTokenHeader mServerUrl uuid = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService Transactional $ addTraceUuidHeader =<< do - cancelQuestionnaireMigration qtnUuid + cancelProjectMigration uuid return NoContent diff --git a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_GET.hs similarity index 50% rename from wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_GET.hs index a5bb2986b..373ef134b 100644 --- a/wizard-server/src/Wizard/Api/Handler/Migration/Questionnaire/List_Current_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Migration.Questionnaire.List_Current_GET where +module Wizard.Api.Handler.Project.Migration.List_Current_GET where import qualified Data.UUID as U import Servant @@ -6,22 +6,22 @@ import Servant import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateJM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Migration.MigrationService +import Wizard.Service.Project.Migration.ProjectMigrationService type List_Current_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "migrations" :> "current" - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] MigratorStateDTO) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectMigrationDTO) list_current_GET - :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] MigratorStateDTO) -list_current_GET mTokenHeader mServerUrl qtnUuid = + :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectMigrationDTO) +list_current_GET mTokenHeader mServerUrl uuid = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getQuestionnaireMigration qtnUuid + runInAuthService NoTransaction $ addTraceUuidHeader =<< getProjectMigration uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_PUT.hs new file mode 100644 index 000000000..60e5c70f0 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_Current_PUT.hs @@ -0,0 +1,34 @@ +module Wizard.Api.Handler.Project.Migration.List_Current_PUT where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeJM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Migration.ProjectMigrationService + +type List_Current_PUT = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectMigrationChangeDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "migrations" + :> "current" + :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectMigrationDTO) + +list_current_PUT + :: Maybe String + -> Maybe String + -> ProjectMigrationChangeDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectMigrationDTO) +list_current_PUT mTokenHeader mServerUrl reqDto uuid = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< modifyProjectMigration uuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_POST.hs new file mode 100644 index 000000000..0b699b332 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Migration/List_POST.hs @@ -0,0 +1,33 @@ +module Wizard.Api.Handler.Project.Migration.List_POST where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateJM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Migration.ProjectMigrationService + +type List_POST = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectMigrationCreateDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "migrations" + :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectMigrationDTO) + +list_POST + :: Maybe String + -> Maybe String + -> ProjectMigrationCreateDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectMigrationDTO) +list_POST mTokenHeader mServerUrl reqDto uuid = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< createProjectMigration uuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Tag/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/Tag/Api.hs new file mode 100644 index 000000000..9cd51d78a --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Tag/Api.hs @@ -0,0 +1,17 @@ +module Wizard.Api.Handler.Project.Tag.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.Tag.List_Suggestions_GET +import Wizard.Model.Context.BaseContext + +type TagAPI = + Tags "Project Tag" + :> List_Suggestions_GET + +tagApi :: Proxy TagAPI +tagApi = Proxy + +tagServer :: ServerT TagAPI BaseContextM +tagServer = list_suggestions_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/ProjectTag/List_Suggestions_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Tag/List_Suggestions_GET.hs similarity index 88% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/ProjectTag/List_Suggestions_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Tag/List_Suggestions_GET.hs index 9e67282d5..67404c19c 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/ProjectTag/List_Suggestions_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Tag/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.ProjectTag.List_Suggestions_GET where +module Wizard.Api.Handler.Project.Tag.List_Suggestions_GET where import Servant @@ -9,12 +9,12 @@ import Shared.Common.Model.Context.TransactionState import Shared.Common.Util.String (splitOn) import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.ProjectTag.ProjectTagService +import Wizard.Service.Project.Tag.ProjectTagService type List_Suggestions_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" + :> "projects" :> "project-tags" :> "suggestions" :> QueryParam "q" String diff --git a/wizard-server/src/Wizard/Api/Handler/Project/User/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/User/Api.hs new file mode 100644 index 000000000..d5f881255 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/User/Api.hs @@ -0,0 +1,17 @@ +module Wizard.Api.Handler.Project.User.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.User.List_Suggestions_GET +import Wizard.Model.Context.BaseContext + +type UserAPI = + Tags "Project User" + :> List_Suggestions_GET + +userApi :: Proxy UserAPI +userApi = Proxy + +userServer :: ServerT UserAPI BaseContextM +userServer = list_suggestions_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/User/List_Suggestions_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/User/List_Suggestions_GET.hs similarity index 81% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/User/List_Suggestions_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/User/List_Suggestions_GET.hs index beff1bfbd..b8beb86e9 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/User/List_Suggestions_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/User/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.User.List_Suggestions_GET where +module Wizard.Api.Handler.Project.User.List_Suggestions_GET where import qualified Data.UUID as U import Servant @@ -9,14 +9,14 @@ import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.User.QuestionnaireUserService +import Wizard.Service.Project.User.ProjectUserService import WizardLib.Public.Api.Resource.User.UserSuggestionJM () import WizardLib.Public.Model.User.UserSuggestion type List_Suggestions_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" + :> "projects" :> Capture "uuid" U.UUID :> "users" :> "suggestions" @@ -40,4 +40,4 @@ list_suggestions_GET list_suggestions_GET mTokenHeader mServerUrl uuid mQuery mEditor mPage mSize mSort = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInMaybeAuthService -> runInMaybeAuthService NoTransaction $ - addTraceUuidHeader =<< getQuestionnaireUserSuggestionsPage uuid mQuery mEditor (Pageable mPage mSize) (parseSortQuery mSort) + addTraceUuidHeader =<< getProjectUserSuggestionsPage uuid mQuery mEditor (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Version/Api.hs b/wizard-server/src/Wizard/Api/Handler/Project/Version/Api.hs new file mode 100644 index 000000000..3b50e6d41 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Version/Api.hs @@ -0,0 +1,28 @@ +module Wizard.Api.Handler.Project.Version.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.Project.Version.Detail_DELETE +import Wizard.Api.Handler.Project.Version.Detail_PUT +import Wizard.Api.Handler.Project.Version.List_GET +import Wizard.Api.Handler.Project.Version.List_POST +import Wizard.Model.Context.BaseContext + +type VersionAPI = + Tags "Project Version" + :> ( List_GET + :<|> List_POST + :<|> Detail_PUT + :<|> Detail_DELETE + ) + +versionApi :: Proxy VersionAPI +versionApi = Proxy + +versionServer :: ServerT VersionAPI BaseContextM +versionServer = + list_GET + :<|> list_POST + :<|> detail_PUT + :<|> detail_DELETE diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Detail_DELETE.hs b/wizard-server/src/Wizard/Api/Handler/Project/Version/Detail_DELETE.hs similarity index 68% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Detail_DELETE.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Version/Detail_DELETE.hs index ef688bba3..1d69cf303 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Detail_DELETE.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Version/Detail_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Version.Detail_DELETE where +module Wizard.Api.Handler.Project.Version.Detail_DELETE where import qualified Data.UUID as U import Servant @@ -7,15 +7,15 @@ import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionService +import Wizard.Service.Project.Version.ProjectVersionService type Detail_DELETE = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "projectUuid" U.UUID :> "versions" - :> Capture "vUuid" U.UUID + :> Capture "versionUuid" U.UUID :> Verb DELETE 204 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] NoContent) detail_DELETE @@ -24,9 +24,9 @@ detail_DELETE -> U.UUID -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] NoContent) -detail_DELETE mTokenHeader mServerUrl qtnUuid vUuid = +detail_DELETE mTokenHeader mServerUrl projectUuid versionUuid = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService Transactional $ addTraceUuidHeader =<< do - deleteVersion qtnUuid vUuid + deleteVersion projectUuid versionUuid return NoContent diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Version/Detail_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Project/Version/Detail_PUT.hs new file mode 100644 index 000000000..4c43732c8 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Version/Detail_PUT.hs @@ -0,0 +1,35 @@ +module Wizard.Api.Handler.Project.Version.Detail_PUT where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeJM () +import Wizard.Api.Resource.Project.Version.ProjectVersionListJM () +import Wizard.Model.Context.BaseContext +import Wizard.Model.Project.Version.ProjectVersionList +import Wizard.Service.Project.Version.ProjectVersionService + +type Detail_PUT = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectVersionChangeDTO + :> "projects" + :> Capture "projectUuid" U.UUID + :> "versions" + :> Capture "versionUuid" U.UUID + :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectVersionList) + +detail_PUT + :: Maybe String + -> Maybe String + -> ProjectVersionChangeDTO + -> U.UUID + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectVersionList) +detail_PUT mTokenHeader mServerUrl reqDto projectUuid versionUuid = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< modifyVersion projectUuid versionUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/Project/Version/List_GET.hs similarity index 53% rename from wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/Project/Version/List_GET.hs index 23a0ac326..5f757c995 100644 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/Project/Version/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.Questionnaire.Version.List_GET where +module Wizard.Api.Handler.Project.Version.List_GET where import qualified Data.UUID as U import Servant @@ -6,24 +6,24 @@ import Servant import Shared.Common.Api.Handler.Common import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListJM () +import Wizard.Api.Resource.Project.Version.ProjectVersionListJM () import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionService +import Wizard.Model.Project.Version.ProjectVersionList +import Wizard.Service.Project.Version.ProjectVersionService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID + :> "projects" + :> Capture "uuid" U.UUID :> "versions" - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] [QuestionnaireVersionList]) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] [ProjectVersionList]) list_GET :: Maybe String -> Maybe String -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] [QuestionnaireVersionList]) -list_GET mTokenHeader mServerUrl qtnUuid = + -> BaseContextM (Headers '[Header "x-trace-uuid" String] [ProjectVersionList]) +list_GET mTokenHeader mServerUrl uuid = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getVersions qtnUuid + runInAuthService NoTransaction $ addTraceUuidHeader =<< getVersions uuid diff --git a/wizard-server/src/Wizard/Api/Handler/Project/Version/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/Project/Version/List_POST.hs new file mode 100644 index 000000000..e9388cb43 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/Project/Version/List_POST.hs @@ -0,0 +1,33 @@ +module Wizard.Api.Handler.Project.Version.List_POST where + +import qualified Data.UUID as U +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeJM () +import Wizard.Api.Resource.Project.Version.ProjectVersionListJM () +import Wizard.Model.Context.BaseContext +import Wizard.Model.Project.Version.ProjectVersionList +import Wizard.Service.Project.Version.ProjectVersionService + +type List_POST = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectVersionChangeDTO + :> "projects" + :> Capture "uuid" U.UUID + :> "versions" + :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectVersionList) + +list_POST + :: Maybe String + -> Maybe String + -> ProjectVersionChangeDTO + -> U.UUID + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectVersionList) +list_POST mTokenHeader mServerUrl reqDto uuid = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< createVersion uuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectAction/Api.hs b/wizard-server/src/Wizard/Api/Handler/ProjectAction/Api.hs new file mode 100644 index 000000000..e84cc93ed --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectAction/Api.hs @@ -0,0 +1,28 @@ +module Wizard.Api.Handler.ProjectAction.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.ProjectAction.Detail_GET +import Wizard.Api.Handler.ProjectAction.Detail_PUT +import Wizard.Api.Handler.ProjectAction.List_GET +import Wizard.Api.Handler.ProjectAction.List_Suggestions_GET +import Wizard.Model.Context.BaseContext + +type ProjectActionAPI = + Tags "Project Action" + :> ( List_GET + :<|> List_Suggestions_GET + :<|> Detail_GET + :<|> Detail_PUT + ) + +projectActionApi :: Proxy ProjectActionAPI +projectActionApi = Proxy + +projectActionServer :: ServerT ProjectActionAPI BaseContextM +projectActionServer = + list_GET + :<|> list_suggestions_GET + :<|> detail_GET + :<|> detail_PUT diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_GET.hs new file mode 100644 index 000000000..fe4e16643 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_GET.hs @@ -0,0 +1,27 @@ +module Wizard.Api.Handler.ProjectAction.Detail_GET where + +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Action.ProjectActionService + +type Detail_GET = + Header "Authorization" String + :> Header "Host" String + :> "project-actions" + :> Capture "id" String + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectActionDTO) + +detail_GET + :: Maybe String + -> Maybe String + -> String + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectActionDTO) +detail_GET mTokenHeader mServerUrl paId = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< getProjectAction paId diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_PUT.hs b/wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_PUT.hs new file mode 100644 index 000000000..2b698fc16 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectAction/Detail_PUT.hs @@ -0,0 +1,31 @@ +module Wizard.Api.Handler.ProjectAction.Detail_PUT where + +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Action.ProjectActionChangeDTO +import Wizard.Api.Resource.Project.Action.ProjectActionChangeJM () +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Action.ProjectActionService + +type Detail_PUT = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectActionChangeDTO + :> "project-actions" + :> Capture "id" String + :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectActionDTO) + +detail_PUT + :: Maybe String + -> Maybe String + -> ProjectActionChangeDTO + -> String + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectActionDTO) +detail_PUT mTokenHeader mServerUrl reqDto paId = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< modifyProjectAction paId reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireFile/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectAction/List_GET.hs similarity index 65% rename from wizard-server/src/Wizard/Api/Handler/QuestionnaireFile/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/ProjectAction/List_GET.hs index 3931691e5..664100089 100644 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireFile/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/ProjectAction/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.QuestionnaireFile.List_GET where +module Wizard.Api.Handler.ProjectAction.List_GET where import Servant @@ -7,20 +7,20 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileListJM () +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionJM () import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Service.Questionnaire.File.QuestionnaireFileService +import Wizard.Service.Project.Action.ProjectActionService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaire-files" + :> "project-actions" :> QueryParam "q" String :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireFileList)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectActionDTO)) list_GET :: Maybe String @@ -29,8 +29,8 @@ list_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireFileList)) + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectActionDTO)) list_GET mTokenHeader mServerUrl mQuery mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ - addTraceUuidHeader =<< getQuestionnaireFilesPage mQuery Nothing (Pageable mPage mSize) (parseSortQuery mSort) + addTraceUuidHeader =<< getProjectActionsPageDto mQuery (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/List_Suggestions_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectAction/List_Suggestions_GET.hs similarity index 60% rename from wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/List_Suggestions_GET.hs rename to wizard-server/src/Wizard/Api/Handler/ProjectAction/List_Suggestions_GET.hs index fcb3035e2..462b6b056 100644 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/List_Suggestions_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/ProjectAction/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.QuestionnaireAction.List_Suggestions_GET where +module Wizard.Api.Handler.ProjectAction.List_Suggestions_GET where import qualified Data.UUID as U import Servant @@ -8,23 +8,23 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionJM () +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireAction.QuestionnaireActionService +import Wizard.Service.Project.Action.ProjectActionService type List_Suggestions_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaire-actions" + :> "project-actions" :> "suggestions" - :> QueryParam "questionnaireUuid" U.UUID + :> QueryParam "projectUuid" U.UUID :> QueryParam "q" String :> QueryParam "enabled" Bool :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireActionDTO)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectActionDTO)) list_suggestions_GET :: Maybe String @@ -35,9 +35,9 @@ list_suggestions_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireActionDTO)) -list_suggestions_GET mTokenHeader mServerUrl mQuestionnaireUuid mQuery mEnabled mPage mSize mSort = + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectActionDTO)) +list_suggestions_GET mTokenHeader mServerUrl mProjectUuid mQuery mEnabled mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ addTraceUuidHeader - =<< getQuestionnaireActionSuggestions mQuestionnaireUuid mQuery mEnabled (Pageable mPage mSize) (parseSortQuery mSort) + =<< getProjectActionSuggestions mProjectUuid mQuery mEnabled (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectCommentThread/Api.hs b/wizard-server/src/Wizard/Api/Handler/ProjectCommentThread/Api.hs new file mode 100644 index 000000000..7c4c49fb3 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectCommentThread/Api.hs @@ -0,0 +1,18 @@ +module Wizard.Api.Handler.ProjectCommentThread.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.ProjectCommentThread.List_GET +import Wizard.Model.Context.BaseContext + +type ProjectCommentThreadAPI = + Tags "Project Comment Thread" + :> List_GET + +projectCommentThreadApi :: Proxy ProjectCommentThreadAPI +projectCommentThreadApi = Proxy + +projectCommentThreadServer :: ServerT ProjectCommentThreadAPI BaseContextM +projectCommentThreadServer = + list_GET diff --git a/wizard-server/src/Wizard/Api/Handler/CommentThread/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectCommentThread/List_GET.hs similarity index 59% rename from wizard-server/src/Wizard/Api/Handler/CommentThread/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/ProjectCommentThread/List_GET.hs index 7972437b7..a0f72265c 100644 --- a/wizard-server/src/Wizard/Api/Handler/CommentThread/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/ProjectCommentThread/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.CommentThread.List_GET where +module Wizard.Api.Handler.ProjectCommentThread.List_GET where import qualified Data.UUID as U import Servant @@ -8,22 +8,22 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadAssignedJM () +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadAssignedJM () import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentService +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import Wizard.Service.Project.Comment.ProjectCommentService type List_GET = Header "Authorization" String :> Header "Host" String - :> "comment-threads" + :> "project-comment-threads" :> QueryParam "q" String - :> QueryParam "questionnaireUuid" U.UUID + :> QueryParam "projectUuid" U.UUID :> QueryParam "resolved" Bool :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireCommentThreadAssigned)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectCommentThreadAssigned)) list_GET :: Maybe String @@ -34,9 +34,9 @@ list_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireCommentThreadAssigned)) -list_GET mTokenHeader mServerUrl mQuery mQuestionnaireUuid resolved mPage mSize mSort = + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectCommentThreadAssigned)) +list_GET mTokenHeader mServerUrl mQuery mProjectUuid resolved mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ addTraceUuidHeader - =<< getQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid resolved (Pageable mPage mSize) (parseSortQuery mSort) + =<< getProjectCommentThreadsPage mQuery mProjectUuid resolved (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectFile/Api.hs b/wizard-server/src/Wizard/Api/Handler/ProjectFile/Api.hs new file mode 100644 index 000000000..738e57f3b --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectFile/Api.hs @@ -0,0 +1,18 @@ +module Wizard.Api.Handler.ProjectFile.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.ProjectFile.List_GET +import Wizard.Model.Context.BaseContext + +type ProjectFileAPI = + Tags "Project File" + :> List_GET + +projectFileApi :: Proxy ProjectFileAPI +projectFileApi = Proxy + +projectFileServer :: ServerT ProjectFileAPI BaseContextM +projectFileServer = + list_GET diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectFile/List_GET.hs similarity index 64% rename from wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/ProjectFile/List_GET.hs index d09851b11..c3f7a00e8 100644 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/ProjectFile/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.QuestionnaireAction.List_GET where +module Wizard.Api.Handler.ProjectFile.List_GET where import Servant @@ -7,20 +7,20 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionJM () +import Wizard.Api.Resource.Project.File.ProjectFileListJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireAction.QuestionnaireActionService +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Service.Project.File.ProjectFileService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaire-actions" + :> "project-files" :> QueryParam "q" String :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireActionDTO)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectFileList)) list_GET :: Maybe String @@ -29,8 +29,8 @@ list_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireActionDTO)) + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectFileList)) list_GET mTokenHeader mServerUrl mQuery mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ - addTraceUuidHeader =<< getQuestionnaireActionsPageDto mQuery (Pageable mPage mSize) (parseSortQuery mSort) + addTraceUuidHeader =<< getProjectFilesPage mQuery Nothing (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Api.hs b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Api.hs new file mode 100644 index 000000000..0d9dbdf37 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Api.hs @@ -0,0 +1,28 @@ +module Wizard.Api.Handler.ProjectImporter.Api where + +import Servant +import Servant.Swagger.Tags + +import Wizard.Api.Handler.ProjectImporter.Detail_GET +import Wizard.Api.Handler.ProjectImporter.Detail_PUT +import Wizard.Api.Handler.ProjectImporter.List_GET +import Wizard.Api.Handler.ProjectImporter.List_Suggestions_GET +import Wizard.Model.Context.BaseContext + +type ProjectImporterAPI = + Tags "Project Importer" + :> ( List_GET + :<|> List_Suggestions_GET + :<|> Detail_GET + :<|> Detail_PUT + ) + +projectImporterApi :: Proxy ProjectImporterAPI +projectImporterApi = Proxy + +projectImporterServer :: ServerT ProjectImporterAPI BaseContextM +projectImporterServer = + list_GET + :<|> list_suggestions_GET + :<|> detail_GET + :<|> detail_PUT diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_GET.hs new file mode 100644 index 000000000..312e5f6db --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_GET.hs @@ -0,0 +1,27 @@ +module Wizard.Api.Handler.ProjectImporter.Detail_GET where + +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Importer.ProjectImporterService + +type Detail_GET = + Header "Authorization" String + :> Header "Host" String + :> "project-importers" + :> Capture "piId" String + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectImporterDTO) + +detail_GET + :: Maybe String + -> Maybe String + -> String + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectImporterDTO) +detail_GET mTokenHeader mServerUrl piId = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< getProjectImporter piId diff --git a/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_PUT.hs b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_PUT.hs new file mode 100644 index 000000000..2b6a8ea89 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/Detail_PUT.hs @@ -0,0 +1,31 @@ +module Wizard.Api.Handler.ProjectImporter.Detail_PUT where + +import Servant + +import Shared.Common.Api.Handler.Common +import Shared.Common.Model.Context.TransactionState +import Wizard.Api.Handler.Common +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeJM () +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () +import Wizard.Model.Context.BaseContext +import Wizard.Service.Project.Importer.ProjectImporterService + +type Detail_PUT = + Header "Authorization" String + :> Header "Host" String + :> ReqBody '[SafeJSON] ProjectImporterChangeDTO + :> "project-importers" + :> Capture "piId" String + :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] ProjectImporterDTO) + +detail_PUT + :: Maybe String + -> Maybe String + -> ProjectImporterChangeDTO + -> String + -> BaseContextM (Headers '[Header "x-trace-uuid" String] ProjectImporterDTO) +detail_PUT mTokenHeader mServerUrl reqDto piId = + getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> + runInAuthService Transactional $ addTraceUuidHeader =<< modifyProjectImporter piId reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/List_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/List_GET.hs similarity index 63% rename from wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/List_GET.hs rename to wizard-server/src/Wizard/Api/Handler/ProjectImporter/List_GET.hs index 2c4b92aee..6b8210b41 100644 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/List_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.QuestionnaireImporter.List_GET where +module Wizard.Api.Handler.ProjectImporter.List_GET where import Servant @@ -7,20 +7,20 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterService +import Wizard.Service.Project.Importer.ProjectImporterService type List_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaire-importers" + :> "project-importers" :> QueryParam "q" String :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireImporterDTO)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectImporterDTO)) list_GET :: Maybe String @@ -29,8 +29,8 @@ list_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireImporterDTO)) + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectImporterDTO)) list_GET mTokenHeader mServerUrl mQuery mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ - addTraceUuidHeader =<< getQuestionnaireImportersPageDto mQuery (Pageable mPage mSize) (parseSortQuery mSort) + addTraceUuidHeader =<< getProjectImportersPageDto mQuery (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/List_Suggestions_GET.hs b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/List_Suggestions_GET.hs similarity index 59% rename from wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/List_Suggestions_GET.hs rename to wizard-server/src/Wizard/Api/Handler/ProjectImporter/List_Suggestions_GET.hs index d39d6948f..774e2c785 100644 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/List_Suggestions_GET.hs +++ b/wizard-server/src/Wizard/Api/Handler/ProjectImporter/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Handler.QuestionnaireImporter.List_Suggestions_GET where +module Wizard.Api.Handler.ProjectImporter.List_Suggestions_GET where import qualified Data.UUID as U import Servant @@ -8,23 +8,23 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Context.TransactionState import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterService +import Wizard.Service.Project.Importer.ProjectImporterService type List_Suggestions_GET = Header "Authorization" String :> Header "Host" String - :> "questionnaire-importers" + :> "project-importers" :> "suggestions" - :> QueryParam "questionnaireUuid" U.UUID + :> QueryParam "projectUuid" U.UUID :> QueryParam "q" String :> QueryParam "enabled" Bool :> QueryParam "page" Int :> QueryParam "size" Int :> QueryParam "sort" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireImporterDTO)) + :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] (Page ProjectImporterDTO)) list_suggestions_GET :: Maybe String @@ -35,9 +35,9 @@ list_suggestions_GET -> Maybe Int -> Maybe Int -> Maybe String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page QuestionnaireImporterDTO)) -list_suggestions_GET mTokenHeader mServerUrl mQuestionnaireUuid mQuery mEnabled mPage mSize mSort = + -> BaseContextM (Headers '[Header "x-trace-uuid" String] (Page ProjectImporterDTO)) +list_suggestions_GET mTokenHeader mServerUrl mProjectUuid mQuery mEnabled mPage mSize mSort = getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService NoTransaction $ addTraceUuidHeader - =<< getQuestionnaireImporterSuggestions mQuestionnaireUuid mQuery mEnabled (Pageable mPage mSize) (parseSortQuery mSort) + =<< getProjectImporterSuggestions mProjectUuid mQuery mEnabled (Pageable mPage mSize) (parseSortQuery mSort) diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Api.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Api.hs deleted file mode 100644 index 3967f8625..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Api.hs +++ /dev/null @@ -1,82 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.Questionnaire.Comment.Api -import Wizard.Api.Handler.Questionnaire.Detail_Content_PUT -import Wizard.Api.Handler.Questionnaire.Detail_DELETE -import Wizard.Api.Handler.Questionnaire.Detail_Documents_GET -import Wizard.Api.Handler.Questionnaire.Detail_Documents_Preview_GET -import Wizard.Api.Handler.Questionnaire.Detail_GET -import Wizard.Api.Handler.Questionnaire.Detail_Preview_GET -import Wizard.Api.Handler.Questionnaire.Detail_Questionnaire_GET -import Wizard.Api.Handler.Questionnaire.Detail_Report_GET -import Wizard.Api.Handler.Questionnaire.Detail_Revert_POST -import Wizard.Api.Handler.Questionnaire.Detail_Revert_Preview_POST -import Wizard.Api.Handler.Questionnaire.Detail_Settings_GET -import Wizard.Api.Handler.Questionnaire.Detail_Settings_PUT -import Wizard.Api.Handler.Questionnaire.Detail_Share_PUT -import Wizard.Api.Handler.Questionnaire.Detail_WS -import Wizard.Api.Handler.Questionnaire.File.Api -import Wizard.Api.Handler.Questionnaire.List_GET -import Wizard.Api.Handler.Questionnaire.List_POST -import Wizard.Api.Handler.Questionnaire.List_POST_CloneUuid -import Wizard.Api.Handler.Questionnaire.List_POST_FromTemplate -import Wizard.Api.Handler.Questionnaire.ProjectTag.List_Suggestions_GET -import Wizard.Api.Handler.Questionnaire.User.Api -import Wizard.Model.Context.BaseContext - -type QuestionnaireAPI = - Tags "Questionnaire" - :> ( List_GET - :<|> List_POST - :<|> List_POST_FromTemplate - :<|> List_POST_CloneUuid - :<|> Detail_GET - :<|> Detail_Questionnaire_GET - :<|> Detail_Preview_GET - :<|> Detail_Settings_GET - :<|> Detail_Settings_PUT - :<|> Detail_Share_PUT - :<|> Detail_DELETE - :<|> Detail_Content_PUT - :<|> Detail_Report_GET - :<|> Detail_Documents_GET - :<|> Detail_Documents_Preview_GET - :<|> Detail_WS - :<|> Detail_Revert_POST - :<|> Detail_Revert_Preview_POST - :<|> List_Suggestions_GET - :<|> QuestionnaireCommentAPI - :<|> QuestionnaireFileAPI - :<|> QuestionnaireUserAPI - ) - -questionnaireApi :: Proxy QuestionnaireAPI -questionnaireApi = Proxy - -questionnaireServer :: ServerT QuestionnaireAPI BaseContextM -questionnaireServer = - list_GET - :<|> list_POST - :<|> list_POST_FromTemplate - :<|> list_POST_CloneUuid - :<|> detail_GET - :<|> detail_questionnaire_GET - :<|> detail_preview_GET - :<|> detail_settings_GET - :<|> detail_settings_PUT - :<|> detail_share_PUT - :<|> detail_DELETE - :<|> detail_content_PUT - :<|> detail_report_GET - :<|> detail_documents_GET - :<|> detail_documents_preview_GET - :<|> detail_WS - :<|> detail_revert_POST - :<|> detail_revert_preview_POST - :<|> list_suggestions_GET - :<|> questionnaireCommentServer - :<|> questionnaireFileServer - :<|> questionnaireUserServer diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Comment/Api.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Comment/Api.hs deleted file mode 100644 index d8a8779ed..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Comment/Api.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Comment.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.Questionnaire.Comment.List_GET -import Wizard.Model.Context.BaseContext - -type QuestionnaireCommentAPI = - Tags "Questionnaire Comment" - :> List_GET - -questionnaireCommentApi :: Proxy QuestionnaireCommentAPI -questionnaireCommentApi = Proxy - -questionnaireCommentServer :: ServerT QuestionnaireCommentAPI BaseContextM -questionnaireCommentServer = list_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Content_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Content_PUT.hs deleted file mode 100644 index 473047886..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Content_PUT.hs +++ /dev/null @@ -1,31 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Content_PUT where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_Content_PUT = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireContentChangeDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "content" - :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireContentChangeDTO) - -detail_content_PUT - :: Maybe String - -> Maybe String - -> QuestionnaireContentChangeDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireContentChangeDTO) -detail_content_PUT mTokenHeader mServerUrl reqDto qtnUuid = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< modifyContent qtnUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_GET.hs deleted file mode 100644 index 059e877d8..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_GET.hs +++ /dev/null @@ -1,25 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_GET where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_GET = - Header "Authorization" String - :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailDTO) - -detail_GET - :: Maybe String -> Maybe String -> U.UUID -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailDTO) -detail_GET mTokenHeader mServerUrl qtnUuid = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getQuestionnaireDetailByUuid qtnUuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Preview_GET.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Preview_GET.hs deleted file mode 100644 index 893b5f197..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Preview_GET.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Preview_GET where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailPreviewJM () -import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireDetailPreview -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_Preview_GET = - Header "Authorization" String - :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "preview" - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailPreview) - -detail_preview_GET - :: Maybe String - -> Maybe String - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailPreview) -detail_preview_GET mTokenHeader mServerUrl qtnUuid = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getQuestionnaireDetailPreviewById qtnUuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Questionnaire_GET.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Questionnaire_GET.hs deleted file mode 100644 index 5c873c481..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Questionnaire_GET.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Questionnaire_GET where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_Questionnaire_GET = - Header "Authorization" String - :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "questionnaire" - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailQuestionnaireDTO) - -detail_questionnaire_GET - :: Maybe String - -> Maybe String - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailQuestionnaireDTO) -detail_questionnaire_GET mTokenHeader mServerUrl qtnUuid = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getQuestionnaireDetailQuestionnaireByUuid qtnUuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_POST.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_POST.hs deleted file mode 100644 index 2eed407c5..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_POST.hs +++ /dev/null @@ -1,33 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Revert_POST where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentJM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionService - -type Detail_Revert_POST = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireVersionRevertDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "revert" - :> Post '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireContentDTO) - -detail_revert_POST - :: Maybe String - -> Maybe String - -> QuestionnaireVersionRevertDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireContentDTO) -detail_revert_POST mTokenHeader mServerUrl reqDto qtnUuid = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< revertToEvent qtnUuid reqDto True diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_Preview_POST.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_Preview_POST.hs deleted file mode 100644 index b6cd1dca9..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Revert_Preview_POST.hs +++ /dev/null @@ -1,34 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Revert_Preview_POST where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentJM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionService - -type Detail_Revert_Preview_POST = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireVersionRevertDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "revert" - :> "preview" - :> Post '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireContentDTO) - -detail_revert_preview_POST - :: Maybe String - -> Maybe String - -> QuestionnaireVersionRevertDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireContentDTO) -detail_revert_preview_POST mTokenHeader mServerUrl reqDto qtnUuid = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< revertToEvent qtnUuid reqDto False diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_GET.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_GET.hs deleted file mode 100644 index 7c3b7bf1f..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_GET.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Settings_GET where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailSettingsJM () -import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireDetailSettings -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_Settings_GET = - Header "Authorization" String - :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "settings" - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailSettings) - -detail_settings_GET - :: Maybe String - -> Maybe String - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDetailSettings) -detail_settings_GET mTokenHeader mServerUrl qtnUuid = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getQuestionnaireDetailSettingsById qtnUuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_PUT.hs deleted file mode 100644 index 89920b770..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Settings_PUT.hs +++ /dev/null @@ -1,31 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Settings_PUT where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_Settings_PUT = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireSettingsChangeDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "settings" - :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireSettingsChangeDTO) - -detail_settings_PUT - :: Maybe String - -> Maybe String - -> QuestionnaireSettingsChangeDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireSettingsChangeDTO) -detail_settings_PUT mTokenHeader mServerUrl reqDto qtnUuid = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< modifyQuestionnaireSettings qtnUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Share_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Share_PUT.hs deleted file mode 100644 index 2dc548552..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Detail_Share_PUT.hs +++ /dev/null @@ -1,31 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Detail_Share_PUT where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_Share_PUT = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireShareChangeDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "share" - :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireShareChangeDTO) - -detail_share_PUT - :: Maybe String - -> Maybe String - -> QuestionnaireShareChangeDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireShareChangeDTO) -detail_share_PUT mTokenHeader mServerUrl reqDto qtnUuid = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< modifyQuestionnaireShare qtnUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Api.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Api.hs deleted file mode 100644 index 95cd6f90d..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Api.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Event.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.Questionnaire.Event.Detail_GET -import Wizard.Api.Handler.Questionnaire.Event.List_GET -import Wizard.Model.Context.BaseContext - -type QuestionnaireEventAPI = - Tags "Questionnaire Event" - :> ( List_GET - :<|> Detail_GET - ) - -questionnaireEventApi :: Proxy QuestionnaireEventAPI -questionnaireEventApi = Proxy - -questionnaireEventServer :: ServerT QuestionnaireEventAPI BaseContextM -questionnaireEventServer = list_GET :<|> detail_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Detail_GET.hs deleted file mode 100644 index da5cce722..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Event/Detail_GET.hs +++ /dev/null @@ -1,31 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Event.Detail_GET where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type Detail_GET = - Header "Authorization" String - :> Header "Host" String - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "events" - :> Capture "eventUuid" U.UUID - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireEventDTO) - -detail_GET - :: Maybe String - -> Maybe String - -> U.UUID - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireEventDTO) -detail_GET mTokenHeader mServerUrl qtnUuid eventUuid = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService NoTransaction $ addTraceUuidHeader =<< getQuestionnaireEventForQtnUuid qtnUuid eventUuid diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Api.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Api.hs deleted file mode 100644 index 3ad0720ad..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/File/Api.hs +++ /dev/null @@ -1,28 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.File.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.Questionnaire.File.Detail_DELETE -import Wizard.Api.Handler.Questionnaire.File.Detail_Download_GET -import Wizard.Api.Handler.Questionnaire.File.List_GET -import Wizard.Api.Handler.Questionnaire.File.List_POST -import Wizard.Model.Context.BaseContext - -type QuestionnaireFileAPI = - Tags "Questionnaire File" - :> ( List_GET - :<|> List_POST - :<|> Detail_DELETE - :<|> Detail_Download_GET - ) - -questionnaireFileApi :: Proxy QuestionnaireFileAPI -questionnaireFileApi = Proxy - -questionnaireFileServer :: ServerT QuestionnaireFileAPI BaseContextM -questionnaireFileServer = - list_GET - :<|> list_POST - :<|> detail_DELETE - :<|> detail_download_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST.hs deleted file mode 100644 index 3fe7b35d7..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.List_POST where - -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type List_POST = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireCreateDTO - :> "questionnaires" - :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDTO) - -list_POST - :: Maybe String - -> Maybe String - -> QuestionnaireCreateDTO - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDTO) -list_POST mTokenHeader mServerUrl reqDto = - getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInMaybeAuthService -> - runInMaybeAuthService Transactional $ addTraceUuidHeader =<< createQuestionnaire reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST_FromTemplate.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST_FromTemplate.hs deleted file mode 100644 index beac77a82..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/List_POST_FromTemplate.hs +++ /dev/null @@ -1,30 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.List_POST_FromTemplate where - -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.Questionnaire.QuestionnaireService - -type List_POST_FromTemplate = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireCreateFromTemplateDTO - :> "questionnaires" - :> "from-template" - :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireDTO) - -list_POST_FromTemplate - :: Maybe String - -> Maybe String - -> QuestionnaireCreateFromTemplateDTO - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireDTO) -list_POST_FromTemplate mTokenHeader mServerUrl reqDto = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< createQuestionnaireFromTemplate reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/User/Api.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/User/Api.hs deleted file mode 100644 index 77a18c345..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/User/Api.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.User.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.Questionnaire.User.List_Suggestions_GET -import Wizard.Model.Context.BaseContext - -type QuestionnaireUserAPI = - Tags "Questionnaire User" - :> List_Suggestions_GET - -questionnaireUserApi :: Proxy QuestionnaireUserAPI -questionnaireUserApi = Proxy - -questionnaireUserServer :: ServerT QuestionnaireUserAPI BaseContextM -questionnaireUserServer = list_suggestions_GET diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Api.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Api.hs deleted file mode 100644 index 210c77583..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Api.hs +++ /dev/null @@ -1,24 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Version.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.Questionnaire.Version.Detail_DELETE -import Wizard.Api.Handler.Questionnaire.Version.Detail_PUT -import Wizard.Api.Handler.Questionnaire.Version.List_GET -import Wizard.Api.Handler.Questionnaire.Version.List_POST -import Wizard.Model.Context.BaseContext - -type QuestionnaireVersionAPI = - Tags "Questionnaire Version" - :> ( List_GET - :<|> List_POST - :<|> Detail_PUT - :<|> Detail_DELETE - ) - -questionnaireVersionApi :: Proxy QuestionnaireVersionAPI -questionnaireVersionApi = Proxy - -questionnaireVersionServer :: ServerT QuestionnaireVersionAPI BaseContextM -questionnaireVersionServer = list_GET :<|> list_POST :<|> detail_PUT :<|> detail_DELETE diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Detail_PUT.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Detail_PUT.hs deleted file mode 100644 index 8508a7bda..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/Detail_PUT.hs +++ /dev/null @@ -1,35 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Version.Detail_PUT where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeJM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListJM () -import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionService - -type Detail_PUT = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireVersionChangeDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "versions" - :> Capture "vUuid" U.UUID - :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireVersionList) - -detail_PUT - :: Maybe String - -> Maybe String - -> QuestionnaireVersionChangeDTO - -> U.UUID - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireVersionList) -detail_PUT mTokenHeader mServerUrl reqDto qtnUuid vUuid = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< modifyVersion qtnUuid vUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/List_POST.hs deleted file mode 100644 index e185fbefb..000000000 --- a/wizard-server/src/Wizard/Api/Handler/Questionnaire/Version/List_POST.hs +++ /dev/null @@ -1,33 +0,0 @@ -module Wizard.Api.Handler.Questionnaire.Version.List_POST where - -import qualified Data.UUID as U -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeJM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListJM () -import Wizard.Model.Context.BaseContext -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionService - -type List_POST = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireVersionChangeDTO - :> "questionnaires" - :> Capture "qtnUuid" U.UUID - :> "versions" - :> Verb 'POST 201 '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireVersionList) - -list_POST - :: Maybe String - -> Maybe String - -> QuestionnaireVersionChangeDTO - -> U.UUID - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireVersionList) -list_POST mTokenHeader mServerUrl reqDto qtnUuid = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< createVersion qtnUuid reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Api.hs b/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Api.hs deleted file mode 100644 index 1c56d36e6..000000000 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Api.hs +++ /dev/null @@ -1,24 +0,0 @@ -module Wizard.Api.Handler.QuestionnaireAction.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.QuestionnaireAction.Detail_GET -import Wizard.Api.Handler.QuestionnaireAction.Detail_PUT -import Wizard.Api.Handler.QuestionnaireAction.List_GET -import Wizard.Api.Handler.QuestionnaireAction.List_Suggestions_GET -import Wizard.Model.Context.BaseContext - -type QuestionnaireActionAPI = - Tags "Questionnaire Action" - :> ( List_GET - :<|> List_Suggestions_GET - :<|> Detail_GET - :<|> Detail_PUT - ) - -questionnaireActionApi :: Proxy QuestionnaireActionAPI -questionnaireActionApi = Proxy - -questionnaireActionServer :: ServerT QuestionnaireActionAPI BaseContextM -questionnaireActionServer = list_GET :<|> list_suggestions_GET :<|> detail_GET :<|> detail_PUT diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_GET.hs deleted file mode 100644 index e9c6222ab..000000000 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_GET.hs +++ /dev/null @@ -1,27 +0,0 @@ -module Wizard.Api.Handler.QuestionnaireAction.Detail_GET where - -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireAction.QuestionnaireActionService - -type Detail_GET = - Header "Authorization" String - :> Header "Host" String - :> "questionnaire-actions" - :> Capture "id" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireActionDTO) - -detail_GET - :: Maybe String - -> Maybe String - -> String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireActionDTO) -detail_GET mTokenHeader mServerUrl qaId = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< getQuestionnaireAction qaId diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_PUT.hs b/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_PUT.hs deleted file mode 100644 index c3de7eaae..000000000 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireAction/Detail_PUT.hs +++ /dev/null @@ -1,31 +0,0 @@ -module Wizard.Api.Handler.QuestionnaireAction.Detail_PUT where - -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeJM () -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireAction.QuestionnaireActionService - -type Detail_PUT = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireActionChangeDTO - :> "questionnaire-actions" - :> Capture "id" String - :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireActionDTO) - -detail_PUT - :: Maybe String - -> Maybe String - -> QuestionnaireActionChangeDTO - -> String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireActionDTO) -detail_PUT mTokenHeader mServerUrl reqDto qaId = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< modifyQuestionnaireAction qaId reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireFile/Api.hs b/wizard-server/src/Wizard/Api/Handler/QuestionnaireFile/Api.hs deleted file mode 100644 index 1cfca6163..000000000 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireFile/Api.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Api.Handler.QuestionnaireFile.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.QuestionnaireFile.List_GET -import Wizard.Model.Context.BaseContext - -type QuestionnaireFileAPI = - Tags "Questionnaire File" - :> List_GET - -questionnaireFileApi :: Proxy QuestionnaireFileAPI -questionnaireFileApi = Proxy - -questionnaireFileServer :: ServerT QuestionnaireFileAPI BaseContextM -questionnaireFileServer = - list_GET diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Api.hs b/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Api.hs deleted file mode 100644 index 162f4de7d..000000000 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Api.hs +++ /dev/null @@ -1,24 +0,0 @@ -module Wizard.Api.Handler.QuestionnaireImporter.Api where - -import Servant -import Servant.Swagger.Tags - -import Wizard.Api.Handler.QuestionnaireImporter.Detail_GET -import Wizard.Api.Handler.QuestionnaireImporter.Detail_PUT -import Wizard.Api.Handler.QuestionnaireImporter.List_GET -import Wizard.Api.Handler.QuestionnaireImporter.List_Suggestions_GET -import Wizard.Model.Context.BaseContext - -type QuestionnaireImporterAPI = - Tags "Questionnaire Importer" - :> ( List_GET - :<|> List_Suggestions_GET - :<|> Detail_GET - :<|> Detail_PUT - ) - -questionnaireImporterApi :: Proxy QuestionnaireImporterAPI -questionnaireImporterApi = Proxy - -questionnaireImporterServer :: ServerT QuestionnaireImporterAPI BaseContextM -questionnaireImporterServer = list_GET :<|> list_suggestions_GET :<|> detail_GET :<|> detail_PUT diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_GET.hs b/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_GET.hs deleted file mode 100644 index 7844ce436..000000000 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_GET.hs +++ /dev/null @@ -1,27 +0,0 @@ -module Wizard.Api.Handler.QuestionnaireImporter.Detail_GET where - -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterService - -type Detail_GET = - Header "Authorization" String - :> Header "Host" String - :> "questionnaire-importers" - :> Capture "qiId" String - :> Get '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireImporterDTO) - -detail_GET - :: Maybe String - -> Maybe String - -> String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireImporterDTO) -detail_GET mTokenHeader mServerUrl qiId = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< getQuestionnaireImporter qiId diff --git a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_PUT.hs b/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_PUT.hs deleted file mode 100644 index 5a3a1828e..000000000 --- a/wizard-server/src/Wizard/Api/Handler/QuestionnaireImporter/Detail_PUT.hs +++ /dev/null @@ -1,31 +0,0 @@ -module Wizard.Api.Handler.QuestionnaireImporter.Detail_PUT where - -import Servant - -import Shared.Common.Api.Handler.Common -import Shared.Common.Model.Context.TransactionState -import Wizard.Api.Handler.Common -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeJM () -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () -import Wizard.Model.Context.BaseContext -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterService - -type Detail_PUT = - Header "Authorization" String - :> Header "Host" String - :> ReqBody '[SafeJSON] QuestionnaireImporterChangeDTO - :> "questionnaire-importers" - :> Capture "qiId" String - :> Put '[SafeJSON] (Headers '[Header "x-trace-uuid" String] QuestionnaireImporterDTO) - -detail_PUT - :: Maybe String - -> Maybe String - -> QuestionnaireImporterChangeDTO - -> String - -> BaseContextM (Headers '[Header "x-trace-uuid" String] QuestionnaireImporterDTO) -detail_PUT mTokenHeader mServerUrl reqDto qiId = - getAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> - runInAuthService Transactional $ addTraceUuidHeader =<< modifyQuestionnaireImporter qiId reqDto diff --git a/wizard-server/src/Wizard/Api/Handler/Swagger/Api.hs b/wizard-server/src/Wizard/Api/Handler/Swagger/Api.hs index 5bda6046a..80e4248d1 100644 --- a/wizard-server/src/Wizard/Api/Handler/Swagger/Api.hs +++ b/wizard-server/src/Wizard/Api/Handler/Swagger/Api.hs @@ -73,33 +73,33 @@ import Wizard.Api.Resource.Locale.LocaleDetailSM () import Wizard.Api.Resource.Locale.LocaleSM () import Wizard.Api.Resource.PersistentCommand.PersistentCommandDetailSM () import Wizard.Api.Resource.PersistentCommand.PersistentCommandSM () -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListSM () -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeSM () -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateSM () -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadAssignedSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailPreviewSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailSettingsSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionSM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeSM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertSM () -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeSM () -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionSM () -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeSM () -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterSM () +import Wizard.Api.Resource.Project.Action.ProjectActionChangeSM () +import Wizard.Api.Resource.Project.Action.ProjectActionSM () +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadAssignedSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailPreviewSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailSettingsSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsSM () +import Wizard.Api.Resource.Project.Event.ProjectEventListSM () +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeSM () +import Wizard.Api.Resource.Project.Importer.ProjectImporterSM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeSM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateSM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationSM () +import Wizard.Api.Resource.Project.ProjectContentChangeSM () +import Wizard.Api.Resource.Project.ProjectContentSM () +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateSM () +import Wizard.Api.Resource.Project.ProjectCreateSM () +import Wizard.Api.Resource.Project.ProjectReportSM () +import Wizard.Api.Resource.Project.ProjectSM () +import Wizard.Api.Resource.Project.ProjectSettingsChangeSM () +import Wizard.Api.Resource.Project.ProjectShareChangeSM () +import Wizard.Api.Resource.Project.ProjectSimpleSM () +import Wizard.Api.Resource.Project.ProjectSuggestionSM () +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeSM () +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertSM () import Wizard.Api.Resource.Registry.RegistryConfirmationSM () import Wizard.Api.Resource.Registry.RegistryCreateSM () import Wizard.Api.Resource.Registry.RegistryOrganizationSM () @@ -128,7 +128,7 @@ import Wizard.Api.Resource.User.UserSubmissionPropSM () import Wizard.Api.Resource.UserToken.ApiKeyCreateSM () import Wizard.Api.Resource.UserToken.AppKeyCreateSM () import Wizard.Api.Resource.UserToken.UserTokenListSM () -import Wizard.Api.Resource.Websocket.QuestionnaireActionSM () +import Wizard.Api.Resource.Websocket.ProjectMessageSM () import Wizard.Api.Resource.Websocket.WebsocketSM () import WizardLib.Public.Api.Resource.PersistentCommand.PersistentCommandListSM () import WizardLib.Public.Api.Resource.TemporaryFile.TemporaryFileSM () diff --git a/wizard-server/src/Wizard/Api/Handler/TypeHint/List_POST.hs b/wizard-server/src/Wizard/Api/Handler/TypeHint/List_POST.hs index 89f4ca1ca..fc1cb0aa8 100644 --- a/wizard-server/src/Wizard/Api/Handler/TypeHint/List_POST.hs +++ b/wizard-server/src/Wizard/Api/Handler/TypeHint/List_POST.hs @@ -24,7 +24,7 @@ list_POST -> Maybe String -> TypeHintRequestDTO -> BaseContextM (Headers '[Header "x-trace-uuid" String] [TypeHintIDTO]) -list_POST mTokenHeader mServerUrl reqDto@(QuestionnaireTypeHintRequest' _) = +list_POST mTokenHeader mServerUrl reqDto@(ProjectTypeHintRequest' _) = getMaybeAuthServiceExecutor mTokenHeader mServerUrl $ \runInAuthService -> runInAuthService Transactional $ addTraceUuidHeader =<< getTypeHints reqDto list_POST mTokenHeader mServerUrl reqDto = diff --git a/wizard-server/src/Wizard/Api/Resource/Common/PageSM.hs b/wizard-server/src/Wizard/Api/Resource/Common/PageSM.hs index 4f4f84fae..835fa852a 100644 --- a/wizard-server/src/Wizard/Api/Resource/Common/PageSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Common/PageSM.hs @@ -29,16 +29,16 @@ import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSuggestio import Wizard.Api.Resource.Locale.LocaleDTO import Wizard.Api.Resource.Locale.LocaleSM () import Wizard.Api.Resource.PersistentCommand.PersistentCommandSM () -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListSM () -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileListSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadAssignedSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionSM () -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionSM () -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterSM () +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionSM () +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadAssignedSM () +import Wizard.Api.Resource.Project.Event.ProjectEventListSM () +import Wizard.Api.Resource.Project.File.ProjectFileListSM () +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterSM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectSM () +import Wizard.Api.Resource.Project.ProjectSuggestionSM () import Wizard.Api.Resource.Tenant.TenantDTO import Wizard.Api.Resource.Tenant.TenantSM () import Wizard.Api.Resource.User.Group.UserGroupSuggestionSM () @@ -48,28 +48,28 @@ import Wizard.Database.Migration.Development.Document.Data.Documents import Wizard.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditors import Wizard.Database.Migration.Development.Locale.Data.Locales -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireFiles -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.ProjectFiles +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.Tenant.Data.Tenants import Wizard.Database.Migration.Development.User.Data.Users import Wizard.Model.DocumentTemplate.DocumentTemplateDraftList import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorList import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorSuggestion import Wizard.Model.KnowledgeModel.Package.KnowledgeModelPackageSuggestion -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Model.Questionnaire.QuestionnaireSuggestion +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectSuggestion import Wizard.Model.User.UserGroupSuggestion import Wizard.Service.DocumentTemplate.Draft.DocumentTemplateDraftMapper import qualified Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageMapper as P_Mapper -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper -import qualified Wizard.Service.Questionnaire.QuestionnaireMapper as QTN_Mapper +import Wizard.Service.Project.Event.ProjectEventMapper +import qualified Wizard.Service.Project.ProjectMapper as PRJ_Mapper import qualified Wizard.Service.Tenant.TenantMapper as TNT_Mapper import qualified Wizard.Service.User.Group.UserGroupMapper as UG_Mapper import qualified Wizard.Service.User.UserMapper as U_Mapper @@ -125,41 +125,41 @@ instance ToSchema (Page KnowledgeModelEditorSuggestion) where declareNamedSchema = toSwaggerWithDtoName "Page KnowledgeModelEditorSuggestion" (Page "knowledgeModelEditors" pageMetadata [amsterdamKnowledgeModelEditorSuggestion]) -instance ToSchema (Page QuestionnaireDTO) where +instance ToSchema (Page ProjectDTO) where declareNamedSchema = - toSwaggerWithDtoName "Page QuestionnaireDTO" (Page "questionnaires" pageMetadata [questionnaire1Dto]) + toSwaggerWithDtoName "Page ProjectDTO" (Page "projects" pageMetadata [project1Dto]) -instance ToSchema (Page QuestionnaireSuggestion) where +instance ToSchema (Page ProjectSuggestion) where declareNamedSchema = - toSwaggerWithDtoName "Page QuestionnaireSuggestion" (Page "questionnaires" pageMetadata [QTN_Mapper.toSuggestion questionnaire1]) + toSwaggerWithDtoName "Page ProjectSuggestion" (Page "projects" pageMetadata [PRJ_Mapper.toSuggestion project1]) -instance ToSchema (Page QuestionnaireCommentThreadAssigned) where +instance ToSchema (Page ProjectCommentThreadAssigned) where declareNamedSchema = - toSwaggerWithDtoName "Page QuestionnaireCommentThreadAssigned" (Page "commentThreads" pageMetadata [cmtAssigned]) + toSwaggerWithDtoName "Page ProjectCommentThreadAssigned" (Page "commentThreads" pageMetadata [cmtAssigned]) -instance ToSchema (Page QuestionnaireActionDTO) where +instance ToSchema (Page ProjectActionDTO) where declareNamedSchema = toSwaggerWithDtoName - "Page QuestionnaireActionDTO" - (Page "questionnaireActions" pageMetadata [questionnaireActionFtp3Dto]) + "Page ProjectActionDTO" + (Page "projectActions" pageMetadata [projectActionFtp3Dto]) -instance ToSchema (Page QuestionnaireEventList) where +instance ToSchema (Page ProjectEventList) where declareNamedSchema = toSwaggerWithDtoName - "Page QuestionnaireEventList" - (Page "questionnaireEvents" pageMetadata [SetReplyEventList' (toSetReplyEventList (sre_rQ1 questionnaire1.uuid) (Just userAlbert))]) + "Page ProjectEventList" + (Page "projectEvents" pageMetadata [SetReplyEventList' (toSetReplyEventList (sre_rQ1 project1.uuid) (Just userAlbert))]) -instance ToSchema (Page QuestionnaireFileList) where +instance ToSchema (Page ProjectFileList) where declareNamedSchema = toSwaggerWithDtoName - "Page QuestionnaireFileList" - (Page "questionnaireFiles" pageMetadata [questionnaireFileList]) + "Page ProjectFileList" + (Page "projectFiles" pageMetadata [projectFileList]) -instance ToSchema (Page QuestionnaireImporterDTO) where +instance ToSchema (Page ProjectImporterDTO) where declareNamedSchema = toSwaggerWithDtoName - "Page QuestionnaireImporterDTO" - (Page "questionnaireImporters" pageMetadata [questionnaireImporterBio3Dto]) + "Page ProjectImporterDTO" + (Page "projectImporters" pageMetadata [projectImporterBio3Dto]) instance ToSchema (Page DocumentTemplateSimpleDTO) where declareNamedSchema = diff --git a/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigDTO.hs b/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigDTO.hs index f892dc4e8..d11ed1f61 100644 --- a/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigDTO.hs @@ -21,7 +21,7 @@ data ClientConfigDTO , dashboardAndLoginScreen :: TenantConfigDashboardAndLoginScreen , lookAndFeel :: TenantConfigLookAndFeel , registry :: ClientConfigRegistryDTO - , questionnaire :: ClientConfigQuestionnaireDTO + , project :: ClientConfigProjectDTO , submission :: SimpleFeature , cloud :: ClientConfigCloudDTO , owl :: TenantConfigOwl @@ -58,10 +58,10 @@ data ClientConfigRegistryDTO = ClientConfigRegistryDTO } deriving (Show, Eq, Generic) -data ClientConfigQuestionnaireDTO = ClientConfigQuestionnaireDTO - { questionnaireVisibility :: TenantConfigQuestionnaireVisibility - , questionnaireSharing :: TenantConfigQuestionnaireSharing - , questionnaireCreation :: QuestionnaireCreation +data ClientConfigProjectDTO = ClientConfigProjectDTO + { projectVisibility :: TenantConfigProjectVisibility + , projectSharing :: TenantConfigProjectSharing + , projectCreation :: ProjectCreation , projectTagging :: SimpleFeature , summaryReport :: SimpleFeature , feedback :: SimpleFeature diff --git a/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigJM.hs b/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigJM.hs index 86ede33ef..a3c9e9dd1 100644 --- a/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigJM.hs @@ -38,10 +38,10 @@ instance FromJSON ClientConfigRegistryDTO where instance ToJSON ClientConfigRegistryDTO where toJSON = genericToJSON jsonOptions -instance FromJSON ClientConfigQuestionnaireDTO where +instance FromJSON ClientConfigProjectDTO where parseJSON = genericParseJSON jsonOptions -instance ToJSON ClientConfigQuestionnaireDTO where +instance ToJSON ClientConfigProjectDTO where toJSON = genericToJSON jsonOptions instance FromJSON ClientConfigCloudDTO where diff --git a/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigSM.hs b/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigSM.hs index 691b03c86..e04e8c818 100644 --- a/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Config/ClientConfigSM.hs @@ -18,7 +18,7 @@ import Wizard.Service.User.UserMapper import qualified WizardLib.Public.Database.Migration.Development.Tenant.Data.TenantConfigs as STC instance ToSchema ClientConfigDTO where - declareNamedSchema = toSwaggerWithType "type" (toClientConfigDTO S.defaultConfig TC.defaultOrganization TC.defaultAuthentication TC.defaultPrivacyAndSupport TC.defaultDashboardAndLoginScreen STC.defaultLookAndFeel TC.defaultRegistry TC.defaultQuestionnaire TC.defaultSubmission STC.defaultFeatures TC.defaultOwl (Just $ toUserProfile (toDTO userAlbert) []) [] defaultTenant) + declareNamedSchema = toSwaggerWithType "type" (toClientConfigDTO S.defaultConfig TC.defaultOrganization TC.defaultAuthentication TC.defaultPrivacyAndSupport TC.defaultDashboardAndLoginScreen STC.defaultLookAndFeel TC.defaultRegistry TC.defaultProject TC.defaultSubmission STC.defaultFeatures TC.defaultOwl (Just $ toUserProfile (toDTO userAlbert) []) [] defaultTenant) instance ToSchema ClientConfigAuthDTO where declareNamedSchema = toSwagger (toClientAuthDTO TC.defaultAuthentication) @@ -32,8 +32,8 @@ instance ToSchema ClientConfigAuthExternalServiceDTO where instance ToSchema ClientConfigRegistryDTO where declareNamedSchema = toSwagger (toClientConfigRegistryDTO S.defaultRegistry TC.defaultRegistry) -instance ToSchema ClientConfigQuestionnaireDTO where - declareNamedSchema = toSwagger (toClientConfigQuestionnaireDTO TC.defaultQuestionnaire) +instance ToSchema ClientConfigProjectDTO where + declareNamedSchema = toSwagger (toClientConfigProjectDTO TC.defaultProject) instance ToSchema ClientConfigCloudDTO where declareNamedSchema = toSwagger (toClientConfigCloudDTO S_S.defaultCloud defaultTenant) diff --git a/wizard-server/src/Wizard/Api/Resource/Document/DocumentCreateDTO.hs b/wizard-server/src/Wizard/Api/Resource/Document/DocumentCreateDTO.hs index f6f76a8e4..3cfdf3693 100644 --- a/wizard-server/src/Wizard/Api/Resource/Document/DocumentCreateDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Document/DocumentCreateDTO.hs @@ -5,8 +5,8 @@ import GHC.Generics data DocumentCreateDTO = DocumentCreateDTO { name :: String - , questionnaireUuid :: U.UUID - , questionnaireEventUuid :: Maybe U.UUID + , projectUuid :: U.UUID + , projectEventUuid :: Maybe U.UUID , documentTemplateId :: String , formatUuid :: U.UUID } diff --git a/wizard-server/src/Wizard/Api/Resource/Document/DocumentDTO.hs b/wizard-server/src/Wizard/Api/Resource/Document/DocumentDTO.hs index 3af611d16..cd894b005 100644 --- a/wizard-server/src/Wizard/Api/Resource/Document/DocumentDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Document/DocumentDTO.hs @@ -8,16 +8,16 @@ import GHC.Int import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateFormatSimple import Wizard.Api.Resource.Submission.SubmissionJM () import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.QuestionnaireSimple +import Wizard.Model.Project.ProjectSimple import Wizard.Model.Submission.SubmissionList data DocumentDTO = DocumentDTO { uuid :: U.UUID , name :: String , state :: DocumentState - , questionnaire :: Maybe QuestionnaireSimple - , questionnaireEventUuid :: Maybe U.UUID - , questionnaireVersion :: Maybe String + , project :: Maybe ProjectSimple + , projectEventUuid :: Maybe U.UUID + , projectVersion :: Maybe String , documentTemplateId :: String , documentTemplateName :: String , format :: Maybe DocumentTemplateFormatSimple diff --git a/wizard-server/src/Wizard/Api/Resource/Document/DocumentJM.hs b/wizard-server/src/Wizard/Api/Resource/Document/DocumentJM.hs index e37459714..f6836d5a0 100644 --- a/wizard-server/src/Wizard/Api/Resource/Document/DocumentJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Document/DocumentJM.hs @@ -5,7 +5,7 @@ import Data.Aeson import Shared.Common.Util.Aeson import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateFormatSimpleJM () import Wizard.Api.Resource.Document.DocumentDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleJM () +import Wizard.Api.Resource.Project.ProjectSimpleJM () import Wizard.Model.Document.Document instance FromJSON DocumentState diff --git a/wizard-server/src/Wizard/Api/Resource/Document/DocumentSM.hs b/wizard-server/src/Wizard/Api/Resource/Document/DocumentSM.hs index a200bbc5e..f5caee507 100644 --- a/wizard-server/src/Wizard/Api/Resource/Document/DocumentSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Document/DocumentSM.hs @@ -6,7 +6,7 @@ import Shared.Common.Util.Swagger import Wizard.Api.Resource.Document.DocumentDTO import Wizard.Api.Resource.Document.DocumentJM () import Wizard.Api.Resource.DocumentTemplate.DocumentTemplateSimpleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleSM () +import Wizard.Api.Resource.Project.ProjectSimpleSM () import Wizard.Api.Resource.Submission.SubmissionSM () import Wizard.Database.Migration.Development.Document.Data.Documents import Wizard.Model.Document.Document diff --git a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataChangeDTO.hs index bf91354f0..10f8f4bbc 100644 --- a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataChangeDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataChangeDTO.hs @@ -4,7 +4,7 @@ import qualified Data.UUID as U import GHC.Generics data DocumentTemplateDraftDataChangeDTO = DocumentTemplateDraftDataChangeDTO - { questionnaireUuid :: Maybe U.UUID + { projectUuid :: Maybe U.UUID , knowledgeModelEditorUuid :: Maybe U.UUID , formatUuid :: Maybe U.UUID } diff --git a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataDTO.hs b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataDTO.hs index a06942879..ba92e2f24 100644 --- a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataDTO.hs @@ -4,11 +4,11 @@ import qualified Data.UUID as U import GHC.Generics import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorSuggestion -import Wizard.Model.Questionnaire.QuestionnaireSuggestion +import Wizard.Model.Project.ProjectSuggestion data DocumentTemplateDraftDataDTO = DocumentTemplateDraftDataDTO - { questionnaireUuid :: Maybe U.UUID - , questionnaire :: Maybe QuestionnaireSuggestion + { projectUuid :: Maybe U.UUID + , project :: Maybe ProjectSuggestion , knowledgeModelEditorUuid :: Maybe U.UUID , knowledgeModelEditor :: Maybe KnowledgeModelEditorSuggestion , formatUuid :: Maybe U.UUID diff --git a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataJM.hs b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataJM.hs index f0a48850a..06eab8dbb 100644 --- a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataJM.hs @@ -5,7 +5,7 @@ import Data.Aeson import Shared.Common.Util.Aeson import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataDTO import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorSuggestionJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionJM () +import Wizard.Api.Resource.Project.ProjectSuggestionJM () instance FromJSON DocumentTemplateDraftDataDTO where parseJSON = genericParseJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataSM.hs b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataSM.hs index 89bea6530..d155bace2 100644 --- a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDataSM.hs @@ -6,7 +6,7 @@ import Shared.Common.Util.Swagger import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataDTO import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataJM () import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorSuggestionSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionSM () +import Wizard.Api.Resource.Project.ProjectSuggestionSM () import Wizard.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateDrafts instance ToSchema DocumentTemplateDraftDataDTO where diff --git a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailJM.hs b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailJM.hs index db91a672a..ebed3a6b4 100644 --- a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailJM.hs @@ -6,7 +6,7 @@ import Shared.Common.Util.Aeson import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateJM () import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackagePatternJM () import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorSuggestionJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionJM () +import Wizard.Api.Resource.Project.ProjectSuggestionJM () import Wizard.Model.DocumentTemplate.DocumentTemplateDraftDetail instance FromJSON DocumentTemplateDraftDetail where diff --git a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailSM.hs b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailSM.hs index dfe9b2b26..7c202938f 100644 --- a/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/DocumentTemplate/Draft/DocumentTemplateDraftDetailSM.hs @@ -9,7 +9,7 @@ import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.D import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackagePatternSM () import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDetailJM () import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorSuggestionSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionSM () +import Wizard.Api.Resource.Project.ProjectSuggestionSM () import Wizard.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateDrafts import Wizard.Model.DocumentTemplate.DocumentTemplateDraftDetail import Wizard.Service.DocumentTemplate.Draft.DocumentTemplateDraftMapper diff --git a/wizard-server/src/Wizard/Api/Resource/Feedback/FeedbackSM.hs b/wizard-server/src/Wizard/Api/Resource/Feedback/FeedbackSM.hs index ae026d2d8..7dd8ad438 100644 --- a/wizard-server/src/Wizard/Api/Resource/Feedback/FeedbackSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Feedback/FeedbackSM.hs @@ -7,8 +7,8 @@ import Wizard.Api.Resource.Feedback.FeedbackDTO import Wizard.Api.Resource.Feedback.FeedbackJM () import Wizard.Database.Migration.Development.Feedback.Data.Feedbacks import Wizard.Database.Migration.Development.Tenant.Data.TenantConfigs -import Wizard.Model.Config.ServerConfigDM hiding (defaultQuestionnaire) +import Wizard.Model.Config.ServerConfigDM hiding (defaultProject) import Wizard.Service.Feedback.FeedbackMapper instance ToSchema FeedbackDTO where - declareNamedSchema = toSwagger (toDTO defaultConfig defaultQuestionnaire feedback1) + declareNamedSchema = toSwagger (toDTO defaultConfig defaultProject feedback1) diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesDTO.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesDTO.hs index 8e604f28b..98cc9955a 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesDTO.hs @@ -4,7 +4,7 @@ import qualified Data.Map.Strict as M import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply data SetRepliesDTO = SetRepliesDTO { uuid :: U.UUID diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesJM.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesJM.hs index 32599affb..c92a12004 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesJM.hs @@ -4,7 +4,7 @@ import Data.Aeson import Shared.Common.Util.Aeson import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () +import Wizard.Api.Resource.Project.ProjectReplyJM () instance FromJSON SetRepliesDTO where parseJSON = genericParseJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesSM.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesSM.hs index 75552f770..5c7d8ab5b 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/Event/SetRepliesSM.hs @@ -5,7 +5,7 @@ import Data.Swagger import Shared.Common.Util.Swagger import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesDTO import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () +import Wizard.Api.Resource.Project.ProjectReplySM () import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorEvents instance ToSchema SetRepliesDTO where diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailDTO.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailDTO.hs index ef5e71ba6..b9c41c8a9 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailDTO.hs @@ -9,7 +9,7 @@ import Shared.KnowledgeModel.Model.KnowledgeModel.Event.KnowledgeModelEvent import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleDTO import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorState -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply data KnowledgeModelEditorDetailDTO = KnowledgeModelEditorDetailDTO { uuid :: U.UUID diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailJM.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailJM.hs index 842288465..b95d04e44 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailJM.hs @@ -7,7 +7,7 @@ import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.Event.KnowledgeModelEve import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorDetailDTO import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorStateJM () import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () +import Wizard.Api.Resource.Project.ProjectReplyJM () instance FromJSON KnowledgeModelEditorDetailDTO where parseJSON = genericParseJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailSM.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailSM.hs index 583dfd2db..ef320457b 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Editor/KnowledgeModelEditorDetailSM.hs @@ -8,7 +8,7 @@ import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorDetailDTO import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorDetailJM () import Wizard.Api.Resource.KnowledgeModel.Editor.KnowledgeModelEditorStateSM () import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () +import Wizard.Api.Resource.Project.ProjectReplySM () import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditors instance ToSchema KnowledgeModelEditorDetailDTO where diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationCreateSM.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationCreateSM.hs index d8cb83a46..784baca63 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationCreateSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationCreateSM.hs @@ -8,4 +8,4 @@ import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationCreat import Wizard.Database.Migration.Development.KnowledgeModel.Data.Migration.KnowledgeModelMigrations instance ToSchema KnowledgeModelMigrationCreateDTO where - declareNamedSchema = toSwagger migratorStateCreate + declareNamedSchema = toSwagger knowledgeModelMigrationCreateDTO diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationResolutionSM.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationResolutionSM.hs index 3805c03a9..1d6c6c6f3 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationResolutionSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationResolutionSM.hs @@ -10,4 +10,4 @@ import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationResol import Wizard.Database.Migration.Development.KnowledgeModel.Data.Migration.KnowledgeModelMigrations instance ToSchema KnowledgeModelMigrationResolutionDTO where - declareNamedSchema = toSwagger migratorConflict + declareNamedSchema = toSwagger knowledgeModelMigrationResolutionDTO diff --git a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationSM.hs b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationSM.hs index 6531380fa..af4349679 100644 --- a/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/KnowledgeModel/Migration/KnowledgeModelMigrationSM.hs @@ -9,4 +9,4 @@ import Wizard.Api.Resource.KnowledgeModel.Migration.KnowledgeModelMigrationState import Wizard.Database.Migration.Development.KnowledgeModel.Data.Migration.KnowledgeModelMigrations instance ToSchema KnowledgeModelMigrationDTO where - declareNamedSchema = toSwagger migratorState + declareNamedSchema = toSwagger knowledgeModelMigrationDTO diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeDTO.hs new file mode 100644 index 000000000..48ec002e8 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeDTO.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.Acl.ProjectPermChangeDTO where + +import qualified Data.UUID as U +import GHC.Generics + +import Wizard.Model.Project.Acl.ProjectPerm + +data ProjectPermChangeDTO = ProjectPermChangeDTO + { memberType :: ProjectPermType + , memberUuid :: U.UUID + , perms :: [String] + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeJM.hs new file mode 100644 index 000000000..1d3764f0f --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeJM.hs @@ -0,0 +1,15 @@ +module Wizard.Api.Resource.Project.Acl.ProjectPermChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Acl.ProjectPermChangeDTO +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () + +instance FromJSON ProjectPermChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectPermChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeSM.hs new file mode 100644 index 000000000..417118362 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermChangeSM.hs @@ -0,0 +1,15 @@ +module Wizard.Api.Resource.Project.Acl.ProjectPermChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Acl.ProjectPermChangeDTO +import Wizard.Api.Resource.Project.Acl.ProjectPermChangeJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectPermChangeDTO where + declareNamedSchema = toSwagger (toProjectPermChangeDTO project1AlbertEditProjectPerm) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermDTO.hs new file mode 100644 index 000000000..8d9207315 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermDTO.hs @@ -0,0 +1,29 @@ +module Wizard.Api.Resource.Project.Acl.ProjectPermDTO where + +import qualified Data.UUID as U +import GHC.Generics +import GHC.Records + +import Wizard.Api.Resource.Acl.MemberDTO +import Wizard.Model.Project.Acl.ProjectPerm + +data ProjectPermDTO = ProjectPermDTO + { projectUuid :: U.UUID + , member :: MemberDTO + , perms :: [String] + } + deriving (Generic, Eq, Show) + +instance Ord ProjectPermDTO where + compare a b = compare a.member.uuid b.member.uuid + +instance ProjectPermC ProjectPermDTO + +instance HasField "memberType" ProjectPermDTO ProjectPermType where + getField perm = + case perm.member of + UserMemberDTO {} -> UserProjectPermType + UserGroupMemberDTO {} -> UserGroupProjectPermType + +instance HasField "memberUuid" ProjectPermDTO U.UUID where + getField perm = perm.member.uuid diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermJM.hs new file mode 100644 index 000000000..4d4c77367 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermJM.hs @@ -0,0 +1,24 @@ +module Wizard.Api.Resource.Project.Acl.ProjectPermJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Acl.MemberJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Acl.ProjectPerm + +instance FromJSON ProjectPermType + +instance ToJSON ProjectPermType + +instance FromJSON ProjectPerm where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectPerm where + toJSON = genericToJSON jsonOptions + +instance FromJSON ProjectPermDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectPermDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermSM.hs new file mode 100644 index 000000000..0220fd0aa --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Acl/ProjectPermSM.hs @@ -0,0 +1,21 @@ +module Wizard.Api.Resource.Project.Acl.ProjectPermSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Acl.MemberSM () +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.User.Data.Users +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectPermType + +instance ToSchema ProjectPerm where + declareNamedSchema = toSwagger bioGroupEditProjectPerm + +instance ToSchema ProjectPermDTO where + declareNamedSchema = + toSwagger (toUserProjectPermDTO bioGroupEditProjectPerm userAlbert) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeDTO.hs new file mode 100644 index 000000000..c18a47c57 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeDTO.hs @@ -0,0 +1,8 @@ +module Wizard.Api.Resource.Project.Action.ProjectActionChangeDTO where + +import GHC.Generics + +data ProjectActionChangeDTO = ProjectActionChangeDTO + { enabled :: Bool + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeJM.hs new file mode 100644 index 000000000..dc5330c4e --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Action.ProjectActionChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Action.ProjectActionChangeDTO + +instance FromJSON ProjectActionChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectActionChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeSM.hs new file mode 100644 index 000000000..2891bf36a --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionChangeSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Action.ProjectActionChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Action.ProjectActionChangeDTO +import Wizard.Api.Resource.Project.Action.ProjectActionChangeJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import Wizard.Service.Project.Action.ProjectActionMapper + +instance ToSchema ProjectActionChangeDTO where + declareNamedSchema = toSwagger (toChangeDTO projectActionFtp1) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionDTO.hs similarity index 58% rename from wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionDTO.hs index 7a656d1a9..4259f09c8 100644 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionDTO.hs @@ -1,10 +1,10 @@ -module Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO where +module Wizard.Api.Resource.Project.Action.ProjectActionDTO where import Data.Time import GHC.Generics -data QuestionnaireActionDTO = QuestionnaireActionDTO - { qaId :: String +data ProjectActionDTO = ProjectActionDTO + { paId :: String , name :: String , description :: String , url :: String diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionJM.hs similarity index 52% rename from wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionJM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionJM.hs index 15c65c55b..86953a737 100644 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionJM.hs @@ -1,14 +1,14 @@ -module Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionJM where +module Wizard.Api.Resource.Project.Action.ProjectActionJM where import Data.Aeson import Shared.Common.Util.Aeson import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionDTO import Wizard.Api.Resource.User.UserJM () -instance FromJSON QuestionnaireActionDTO where +instance FromJSON ProjectActionDTO where parseJSON = genericParseJSON jsonOptions -instance ToJSON QuestionnaireActionDTO where +instance ToJSON ProjectActionDTO where toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionSM.hs new file mode 100644 index 000000000..4ce8f22a2 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Action/ProjectActionSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Action.ProjectActionSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import Wizard.Service.Project.Action.ProjectActionMapper + +instance ToSchema ProjectActionDTO where + declareNamedSchema = toSwagger (toDTO projectActionFtp1) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedJM.hs new file mode 100644 index 000000000..d73a1b805 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedJM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.Comment.ProjectCommentThreadAssignedJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import WizardLib.Public.Api.Resource.User.UserSuggestionJM () + +instance FromJSON ProjectCommentThreadAssigned where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectCommentThreadAssigned where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedSM.hs new file mode 100644 index 000000000..e47c09b34 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadAssignedSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Comment.ProjectCommentThreadAssignedSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadAssignedJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import WizardLib.Public.Api.Resource.User.UserSuggestionSM () + +instance ToSchema ProjectCommentThreadAssigned where + declareNamedSchema = toSwagger cmtAssigned diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListJM.hs new file mode 100644 index 000000000..3ed504fe0 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListJM.hs @@ -0,0 +1,19 @@ +module Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Model.Project.Comment.ProjectCommentList +import WizardLib.Public.Api.Resource.User.UserSuggestionJM () + +instance FromJSON ProjectCommentThreadList where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectCommentThreadList where + toJSON = genericToJSON jsonOptions + +instance FromJSON ProjectCommentList where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectCommentList where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListSM.hs new file mode 100644 index 000000000..8429b47ce --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadListSM.hs @@ -0,0 +1,15 @@ +module Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Model.Project.Comment.ProjectCommentList +import WizardLib.Public.Api.Resource.User.UserSuggestionSM () + +instance ToSchema ProjectCommentThreadList where + declareNamedSchema = toSwagger cmtQ1_t1Dto + +instance ToSchema ProjectCommentList where + declareNamedSchema = toSwagger cmtQ1_t1_1Dto diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadNotificationJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadNotificationJM.hs new file mode 100644 index 000000000..25ba7fb7a --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Comment/ProjectCommentThreadNotificationJM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.Comment.ProjectCommentThreadNotificationJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.User.UserSimpleJM () +import Wizard.Model.Project.Comment.ProjectCommentThreadNotification + +instance FromJSON ProjectCommentThreadNotification where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectCommentThreadNotification where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailDTO.hs new file mode 100644 index 000000000..8da568fec --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailDTO.hs @@ -0,0 +1,20 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailDTO where + +import qualified Data.UUID as U +import GHC.Generics + +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Project + +data ProjectDetailDTO = ProjectDetailDTO + { uuid :: U.UUID + , name :: String + , sharing :: ProjectSharing + , visibility :: ProjectVisibility + , knowledgeModelPackageId :: String + , isTemplate :: Bool + , migrationUuid :: Maybe U.UUID + , permissions :: [ProjectPermDTO] + , fileCount :: Int + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailJM.hs new file mode 100644 index 000000000..ca8d3a6ac --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailJM.hs @@ -0,0 +1,15 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailDTO +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () + +instance FromJSON ProjectDetailDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectDetailDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewJM.hs new file mode 100644 index 000000000..487ae6117 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewJM.hs @@ -0,0 +1,16 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailPreviewJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () +import Wizard.Model.Project.Detail.ProjectDetailPreview + +instance FromJSON ProjectDetailPreview where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectDetailPreview where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewSM.hs new file mode 100644 index 000000000..452354b80 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailPreviewSM.hs @@ -0,0 +1,35 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailPreviewSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateSM () +import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateFormats +import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates +import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate +import qualified Shared.DocumentTemplate.Service.DocumentTemplate.DocumentTemplateMapper as DocumentTemplateMapper +import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelSM () +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailPreviewJM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.Detail.ProjectDetailPreview +import Wizard.Model.Project.Project + +instance ToSchema ProjectDetailPreview where + declareNamedSchema = + toSwagger $ + ProjectDetailPreview + { uuid = project1.uuid + , name = project1.name + , visibility = project1.visibility + , sharing = project1.sharing + , knowledgeModelPackageId = project1.knowledgeModelPackageId + , isTemplate = project1.isTemplate + , documentTemplateId = Just wizardDocumentTemplate.tId + , migrationUuid = Nothing + , permissions = [project1AlbertEditProjectPermDto] + , format = Just . DocumentTemplateMapper.toFormatSimple $ formatJson + , fileCount = 0 + } diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireDTO.hs similarity index 50% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireDTO.hs index 126844b4f..dfc70f0ab 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireDTO.hs @@ -1,20 +1,20 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO where +module Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO where import qualified Data.Map.Strict as M import qualified Data.UUID as U import GHC.Generics import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectReply -data QuestionnaireDetailQuestionnaireDTO = QuestionnaireDetailQuestionnaireDTO +data ProjectDetailQuestionnaireDTO = ProjectDetailQuestionnaireDTO { uuid :: U.UUID , name :: String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing + , visibility :: ProjectVisibility + , sharing :: ProjectSharing , knowledgeModelPackageId :: String , selectedQuestionTagUuids :: [U.UUID] , isTemplate :: Bool @@ -23,12 +23,12 @@ data QuestionnaireDetailQuestionnaireDTO = QuestionnaireDetailQuestionnaireDTO , labels :: M.Map String [U.UUID] , phaseUuid :: Maybe U.UUID , migrationUuid :: Maybe U.UUID - , permissions :: [QuestionnairePermDTO] - , files :: [QuestionnaireFileSimple] + , permissions :: [ProjectPermDTO] + , files :: [ProjectFileSimple] , unresolvedCommentCounts :: M.Map String (M.Map U.UUID Int) , resolvedCommentCounts :: M.Map String (M.Map U.UUID Int) - , questionnaireActionsAvailable :: Int - , questionnaireImportersAvailable :: Int + , projectActionsAvailable :: Int + , projectImportersAvailable :: Int , fileCount :: Int } deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireJM.hs new file mode 100644 index 000000000..7a8e250f4 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireJM.hs @@ -0,0 +1,18 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.File.ProjectFileSimpleJM () +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () + +instance FromJSON ProjectDetailQuestionnaireDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectDetailQuestionnaireDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireSM.hs new file mode 100644 index 000000000..611d6f2fa --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailQuestionnaireSM.hs @@ -0,0 +1,57 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireSM where + +import Data.Map.Strict as M +import Data.Swagger + +import Shared.Common.Util.Swagger +import Shared.Common.Util.Uuid +import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelSM () +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireJM () +import Wizard.Api.Resource.Project.File.ProjectFileSimpleSM () +import Wizard.Api.Resource.Project.ProjectReplySM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Database.Migration.Development.Project.Data.ProjectLabels +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.Project + +instance ToSchema ProjectDetailQuestionnaireDTO where + declareNamedSchema = + toSwagger $ + ProjectDetailQuestionnaireDTO + { uuid = project1.uuid + , name = project1.name + , visibility = project1.visibility + , sharing = project1.sharing + , knowledgeModelPackageId = project1.knowledgeModelPackageId + , selectedQuestionTagUuids = project1.selectedQuestionTagUuids + , isTemplate = project1.isTemplate + , knowledgeModel = km1 + , replies = fReplies + , labels = fLabels + , phaseUuid = Just . u' $ "4b376e49-1589-429b-9590-c654378f0bd5" + , migrationUuid = Nothing + , permissions = [project1AlbertEditProjectPermDto] + , files = [] + , unresolvedCommentCounts = + M.fromList + [ + ( "4f61fdfa-ce82-41b5-a1e6-218beaf41660.0dc58313-eb80-4f74-a8c1-347b644665d5" + , M.fromList [(u' "f1de85a9-7f22-4d0c-bc23-3315cc4c85d7", 4)] + ) + ] + , resolvedCommentCounts = + M.fromList + [ + ( "4f61fdfa-ce82-41b5-a1e6-218beaf41660.0dc58313-eb80-4f74-a8c1-347b644665d5" + , M.fromList [(u' "f1de85a9-7f22-4d0c-bc23-3315cc4c85d7", 2)] + ) + ] + , projectActionsAvailable = 1 + , projectImportersAvailable = 2 + , fileCount = 0 + } diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportDTO.hs similarity index 55% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportDTO.hs index 39b9813c0..523e8e1ea 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportDTO.hs @@ -1,22 +1,22 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportDTO where +module Wizard.Api.Resource.Project.Detail.ProjectDetailReportDTO where import qualified Data.UUID as U import GHC.Generics import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Project import Wizard.Model.Report.Report -data QuestionnaireDetailReportDTO = QuestionnaireDetailReportDTO +data ProjectDetailReportDTO = ProjectDetailReportDTO { uuid :: U.UUID , name :: String - , sharing :: QuestionnaireSharing - , visibility :: QuestionnaireVisibility + , sharing :: ProjectSharing + , visibility :: ProjectVisibility , knowledgeModelPackageId :: String , isTemplate :: Bool , migrationUuid :: Maybe U.UUID - , permissions :: [QuestionnairePermDTO] + , permissions :: [ProjectPermDTO] , fileCount :: Int , totalReport :: TotalReport , chapterReports :: [ChapterReport] diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportJM.hs new file mode 100644 index 000000000..9d64a0489 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportJM.hs @@ -0,0 +1,17 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailReportJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportDTO +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () +import Wizard.Api.Resource.Report.ReportJM () + +instance FromJSON ProjectDetailReportDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectDetailReportDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportSM.hs new file mode 100644 index 000000000..094f9f71a --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailReportSM.hs @@ -0,0 +1,35 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailReportSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelSM () +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportJM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Api.Resource.Report.ReportSM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.Report.Data.Reports +import Wizard.Model.Project.Project +import Wizard.Model.Report.Report + +instance ToSchema ProjectDetailReportDTO where + declareNamedSchema = + toSwagger $ + ProjectDetailReportDTO + { uuid = project1.uuid + , name = project1.name + , visibility = project1.visibility + , sharing = project1.sharing + , knowledgeModelPackageId = project1.knowledgeModelPackageId + , isTemplate = project1.isTemplate + , migrationUuid = Nothing + , permissions = [project1AlbertEditProjectPermDto] + , fileCount = 0 + , totalReport = report1.totalReport + , chapterReports = report1.chapterReports + , chapters = report1.chapters + , metrics = report1.metrics + } diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSM.hs new file mode 100644 index 000000000..9c1775733 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSM.hs @@ -0,0 +1,27 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailJM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.Project + +instance ToSchema ProjectDetailDTO where + declareNamedSchema = + toSwagger $ + ProjectDetailDTO + { uuid = project1.uuid + , name = project1.name + , visibility = project1.visibility + , sharing = project1.sharing + , knowledgeModelPackageId = project1.knowledgeModelPackageId + , isTemplate = project1.isTemplate + , migrationUuid = Nothing + , permissions = [project1AlbertEditProjectPermDto] + , fileCount = 0 + } diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSettingsJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSettingsJM.hs new file mode 100644 index 000000000..35d583bb7 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSettingsJM.hs @@ -0,0 +1,22 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailSettingsJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateJM () +import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateJM () +import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelJM () +import Wizard.Api.Resource.DocumentTemplate.DocumentTemplateStateJM () +import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectStateJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () +import Wizard.Model.Project.Detail.ProjectDetailSettings + +instance FromJSON ProjectDetailSettings where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectDetailSettings where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSettingsSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSettingsSM.hs similarity index 57% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSettingsSM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSettingsSM.hs index 9632e5d4f..e18c6c44d 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSettingsSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailSettingsSM.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailSettingsSM where +module Wizard.Api.Resource.Project.Detail.ProjectDetailSettingsSM where import Data.Swagger @@ -15,34 +15,34 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage import Wizard.Api.Resource.DocumentTemplate.DocumentTemplateStateSM () import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailSettingsJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireStateSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListSM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailSettingsJM () +import Wizard.Api.Resource.Project.ProjectReplySM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectStateSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Api.Resource.Project.Version.ProjectVersionListSM () +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Model.DocumentTemplate.DocumentTemplateState -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireDetailSettings +import Wizard.Model.Project.Detail.ProjectDetailSettings +import Wizard.Model.Project.Project import qualified Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageMapper as PackageMapper -instance ToSchema QuestionnaireDetailSettings where +instance ToSchema ProjectDetailSettings where declareNamedSchema = toSwagger $ - QuestionnaireDetailSettings - { uuid = questionnaire1.uuid - , name = questionnaire1.name - , description = questionnaire1.description - , visibility = questionnaire1.visibility - , sharing = questionnaire1.sharing - , selectedQuestionTagUuids = questionnaire1.selectedQuestionTagUuids - , isTemplate = questionnaire1.isTemplate + ProjectDetailSettings + { uuid = project1.uuid + , name = project1.name + , description = project1.description + , visibility = project1.visibility + , sharing = project1.sharing + , selectedQuestionTagUuids = project1.selectedQuestionTagUuids + , isTemplate = project1.isTemplate , migrationUuid = Nothing - , permissions = [qtn1AlbertEditQtnPermDto] - , projectTags = questionnaire1.projectTags + , permissions = [project1AlbertEditProjectPermDto] + , projectTags = project1.projectTags , knowledgeModelPackageId = netherlandsKmPackageV2.pId , knowledgeModelPackage = PackageMapper.toSimpleDTO netherlandsKmPackageV2 , knowledgeModelTags = [tagDataScience] diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsDTO.hs similarity index 66% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsDTO.hs index 4b72a3147..c24298d23 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsDTO.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO where +module Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO where import qualified Data.Map.Strict as M import qualified Data.UUID as U @@ -6,16 +6,16 @@ import GHC.Generics import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateDTO import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateFormatSimple -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Project -data QuestionnaireDetailWsDTO = QuestionnaireDetailWsDTO +data ProjectDetailWsDTO = ProjectDetailWsDTO { name :: String , description :: Maybe String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing + , visibility :: ProjectVisibility + , sharing :: ProjectSharing , projectTags :: [String] - , permissions :: [QuestionnairePermDTO] + , permissions :: [ProjectPermDTO] , documentTemplateId :: Maybe String , documentTemplate :: Maybe DocumentTemplateDTO , formatUuid :: Maybe U.UUID diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsJM.hs new file mode 100644 index 000000000..2624ff4a8 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsJM.hs @@ -0,0 +1,17 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailWsJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateJM () +import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () + +instance FromJSON ProjectDetailWsDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectDetailWsDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsSM.hs new file mode 100644 index 000000000..9323c74f3 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Detail/ProjectDetailWsSM.hs @@ -0,0 +1,17 @@ +module Wizard.Api.Resource.Project.Detail.ProjectDetailWsSM where + +import qualified Data.Map.Strict as M +import Data.Swagger + +import Shared.Common.Util.Swagger +import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateSM () +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsJM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectDetailWsDTO where + declareNamedSchema = toSwagger (toDetailWsDTO project1 Nothing Nothing [] M.empty M.empty M.empty) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeDTO.hs similarity index 94% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeDTO.hs index 9238449a8..e55a2e890 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeDTO.hs @@ -1,12 +1,12 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO where +module Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO where import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import WizardLib.Public.Model.User.UserSuggestion -data QuestionnaireEventChangeDTO +data ProjectEventChangeDTO = SetReplyEventChangeDTO' SetReplyEventChangeDTO | ClearReplyEventChangeDTO' ClearReplyEventChangeDTO | SetPhaseEventChangeDTO' SetPhaseEventChangeDTO diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeJM.hs similarity index 91% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeJM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeJM.hs index 8980f81ea..244b3adba 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeJM.hs @@ -1,17 +1,17 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeJM where +module Wizard.Api.Resource.Project.Event.ProjectEventChangeJM where import Control.Monad import Data.Aeson import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO +import Wizard.Api.Resource.Project.ProjectReplyJM () import WizardLib.Public.Api.Resource.User.UserSuggestionJM () -instance ToJSON QuestionnaireEventChangeDTO where +instance ToJSON ProjectEventChangeDTO where toJSON = toSumJSONWithTypeField "type" "ChangeDTO" -instance FromJSON QuestionnaireEventChangeDTO where +instance FromJSON ProjectEventChangeDTO where parseJSON (Object o) = do eventType <- o .: "type" case eventType of diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeSM.hs similarity index 55% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeSM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeSM.hs index e173cb0ee..4730b0ae9 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventChangeSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventChangeSM.hs @@ -1,36 +1,36 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeSM where +module Wizard.Api.Resource.Project.Event.ProjectEventChangeSM where import Data.Swagger import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeJM () -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO +import Wizard.Api.Resource.Project.Event.ProjectEventChangeJM () +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Api.Resource.Project.ProjectReplySM () +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper import WizardLib.Public.Api.Resource.User.UserSuggestionSM () -instance ToSchema QuestionnaireEventChangeDTO where +instance ToSchema ProjectEventChangeDTO where declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions instance ToSchema SetReplyEventChangeDTO where declareNamedSchema = - toSwagger (toSetReplyEventChangeDTO (sre_rQ1 questionnaire1.uuid)) + toSwagger (toSetReplyEventChangeDTO (sre_rQ1 project1.uuid)) instance ToSchema ClearReplyEventChangeDTO where declareNamedSchema = - toSwagger (toClearReplyEventChangeDTO (cre_rQ1 questionnaire1.uuid)) + toSwagger (toClearReplyEventChangeDTO (cre_rQ1 project1.uuid)) instance ToSchema SetPhaseEventChangeDTO where declareNamedSchema = - toSwagger (toSetPhaseEventChangeDTO (sphse_1 questionnaire1.uuid)) + toSwagger (toSetPhaseEventChangeDTO (sphse_1 project1.uuid)) instance ToSchema SetLabelsEventChangeDTO where declareNamedSchema = - toSwagger (toSetLabelsEventChangeDTO (slble_rQ2 questionnaire1.uuid)) + toSwagger (toSetLabelsEventChangeDTO (slble_rQ2 project1.uuid)) instance ToSchema ResolveCommentThreadEventChangeDTO where declareNamedSchema = toSwagger rtche_rQ1_t1 diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventDTO.hs similarity index 97% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventDTO.hs index b5ab520d1..7ebfe0c09 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventDTO.hs @@ -1,13 +1,13 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO where +module Wizard.Api.Resource.Project.Event.ProjectEventDTO where import Data.Time import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import WizardLib.Public.Model.User.UserSuggestion -data QuestionnaireEventDTO +data ProjectEventDTO = SetReplyEventDTO' SetReplyEventDTO | ClearReplyEventDTO' ClearReplyEventDTO | SetPhaseEventDTO' SetPhaseEventDTO diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventJM.hs similarity index 91% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventJM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventJM.hs index e56464a45..a7abc18d2 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventJM.hs @@ -1,18 +1,18 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM where +module Wizard.Api.Resource.Project.Event.ProjectEventJM where import Control.Monad import Data.Aeson import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Model.Questionnaire.QuestionnaireEvent +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Model.Project.Event.ProjectEvent import WizardLib.Public.Api.Resource.User.UserSuggestionJM () -instance ToJSON QuestionnaireEventDTO where +instance ToJSON ProjectEventDTO where toJSON = toSumJSON -instance FromJSON QuestionnaireEventDTO where +instance FromJSON ProjectEventDTO where parseJSON (Object o) = do eventType <- o .: "type" case eventType of @@ -98,10 +98,10 @@ instance ToJSON DeleteCommentEventDTO where -- -------------------------------------------- -- -------------------------------------------- -instance ToJSON QuestionnaireEvent where +instance ToJSON ProjectEvent where toJSON = toSumJSONWithTypeField "type" "" -instance FromJSON QuestionnaireEvent where +instance FromJSON ProjectEvent where parseJSON (Object o) = do eventType <- o .: "type" case eventType of diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventListJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventListJM.hs similarity index 82% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventListJM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventListJM.hs index e14477dcf..c3798f921 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventListJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventListJM.hs @@ -1,17 +1,17 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListJM where +module Wizard.Api.Resource.Project.Event.ProjectEventListJM where import Control.Monad import Data.Aeson import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Model.Questionnaire.QuestionnaireEventList +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Model.Project.Event.ProjectEventList import WizardLib.Public.Api.Resource.User.UserSuggestionJM () -instance ToJSON QuestionnaireEventList where +instance ToJSON ProjectEventList where toJSON = toSumJSONWithTypeField "type" "List" -instance FromJSON QuestionnaireEventList where +instance FromJSON ProjectEventList where parseJSON (Object o) = do eventType <- o .: "type" case eventType of diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventListSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventListSM.hs new file mode 100644 index 000000000..431796454 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventListSM.hs @@ -0,0 +1,29 @@ +module Wizard.Api.Resource.Project.Event.ProjectEventListSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Event.ProjectEventListJM () +import Wizard.Api.Resource.Project.ProjectReplySM () +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.User.Data.Users +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper +import WizardLib.Public.Api.Resource.User.UserSuggestionSM () + +instance ToSchema ProjectEventList where + declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions + +instance ToSchema SetReplyEventList where + declareNamedSchema = toSwagger (toSetReplyEventList (sre_rQ1 project1.uuid) (Just userAlbert)) + +instance ToSchema ClearReplyEventList where + declareNamedSchema = toSwagger (toClearReplyEventList (cre_rQ1 project1.uuid) (Just userAlbert)) + +instance ToSchema SetPhaseEventList where + declareNamedSchema = toSwagger (toSetPhaseEventList (sphse_1 project1.uuid) (Just userAlbert)) + +instance ToSchema SetLabelsEventList where + declareNamedSchema = toSwagger (toSetLabelsEventList (slble_rQ2 project1.uuid) (Just userAlbert)) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventSM.hs similarity index 57% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventSM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventSM.hs index 020052619..1f07d956f 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Event/ProjectEventSM.hs @@ -1,32 +1,32 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventSM where +module Wizard.Api.Resource.Project.Event.ProjectEventSM where import Data.Swagger import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Api.Resource.Project.ProjectReplySM () +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper import WizardLib.Public.Api.Resource.User.UserSuggestionSM () -instance ToSchema QuestionnaireEventDTO where +instance ToSchema ProjectEventDTO where declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions instance ToSchema SetReplyEventDTO where - declareNamedSchema = toSwagger (toSetReplyEventDTO (sre_rQ1 questionnaire1.uuid) (Just userAlbert)) + declareNamedSchema = toSwagger (toSetReplyEventDTO (sre_rQ1 project1.uuid) (Just userAlbert)) instance ToSchema ClearReplyEventDTO where - declareNamedSchema = toSwagger (toClearReplyEventDTO (cre_rQ1 questionnaire1.uuid) (Just userAlbert)) + declareNamedSchema = toSwagger (toClearReplyEventDTO (cre_rQ1 project1.uuid) (Just userAlbert)) instance ToSchema SetPhaseEventDTO where - declareNamedSchema = toSwagger (toSetPhaseEventDTO (sphse_1 questionnaire1.uuid) (Just userAlbert)) + declareNamedSchema = toSwagger (toSetPhaseEventDTO (sphse_1 project1.uuid) (Just userAlbert)) instance ToSchema SetLabelsEventDTO where - declareNamedSchema = toSwagger (toSetLabelsEventDTO (slble_rQ2 questionnaire1.uuid) (Just userAlbert)) + declareNamedSchema = toSwagger (toSetLabelsEventDTO (slble_rQ2 project1.uuid) (Just userAlbert)) instance ToSchema ResolveCommentThreadEventDTO where declareNamedSchema = toSwagger rte_rQ1_t1 diff --git a/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListJM.hs new file mode 100644 index 000000000..992c92574 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListJM.hs @@ -0,0 +1,14 @@ +module Wizard.Api.Resource.Project.File.ProjectFileListJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.ProjectSimpleJM () +import Wizard.Model.Project.File.ProjectFileList +import WizardLib.Public.Api.Resource.User.UserSuggestionJM () + +instance FromJSON ProjectFileList where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectFileList where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListSM.hs new file mode 100644 index 000000000..d7ec8b539 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileListSM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.File.ProjectFileListSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.File.ProjectFileListJM () +import Wizard.Api.Resource.Project.ProjectSimpleSM () +import Wizard.Database.Migration.Development.Project.Data.ProjectFiles +import Wizard.Model.Project.File.ProjectFileList +import WizardLib.Public.Api.Resource.User.UserSuggestionSM () + +instance ToSchema ProjectFileList where + declareNamedSchema = toSwagger projectFileList diff --git a/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleJM.hs new file mode 100644 index 000000000..22fc98024 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.File.ProjectFileSimpleJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Model.Project.File.ProjectFileSimple + +instance FromJSON ProjectFileSimple where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectFileSimple where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleSM.hs new file mode 100644 index 000000000..04e39be53 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/File/ProjectFileSimpleSM.hs @@ -0,0 +1,11 @@ +module Wizard.Api.Resource.Project.File.ProjectFileSimpleSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.File.ProjectFileSimpleJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectFiles +import Wizard.Model.Project.File.ProjectFileSimple + +instance ToSchema ProjectFileSimple where + declareNamedSchema = toSwagger projectFileSimple diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeDTO.hs new file mode 100644 index 000000000..f1d26c6df --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeDTO.hs @@ -0,0 +1,8 @@ +module Wizard.Api.Resource.Project.Importer.ProjectImporterChangeDTO where + +import GHC.Generics + +data ProjectImporterChangeDTO = ProjectImporterChangeDTO + { enabled :: Bool + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeJM.hs new file mode 100644 index 000000000..8b84721dc --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Importer.ProjectImporterChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeDTO + +instance FromJSON ProjectImporterChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectImporterChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeSM.hs new file mode 100644 index 000000000..2380eb711 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterChangeSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Importer.ProjectImporterChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import Wizard.Service.Project.Importer.ProjectImporterMapper + +instance ToSchema ProjectImporterChangeDTO where + declareNamedSchema = toSwagger (toChangeDTO projectImporterBio1) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterDTO.hs similarity index 57% rename from wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterDTO.hs index b1b30d90a..b78ba843f 100644 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterDTO.hs @@ -1,10 +1,10 @@ -module Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO where +module Wizard.Api.Resource.Project.Importer.ProjectImporterDTO where import Data.Time import GHC.Generics -data QuestionnaireImporterDTO = QuestionnaireImporterDTO - { qiId :: String +data ProjectImporterDTO = ProjectImporterDTO + { piId :: String , name :: String , description :: String , url :: String diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterJM.hs similarity index 50% rename from wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterJM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterJM.hs index 3b892438f..5ce289d8d 100644 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterJM.hs @@ -1,14 +1,14 @@ -module Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM where +module Wizard.Api.Resource.Project.Importer.ProjectImporterJM where import Data.Aeson import Shared.Common.Util.Aeson import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO import Wizard.Api.Resource.User.UserJM () -instance FromJSON QuestionnaireImporterDTO where +instance FromJSON ProjectImporterDTO where parseJSON = genericParseJSON jsonOptions -instance ToJSON QuestionnaireImporterDTO where +instance ToJSON ProjectImporterDTO where toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterSM.hs new file mode 100644 index 000000000..82eaef2c7 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Importer/ProjectImporterSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Importer.ProjectImporterSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import Wizard.Service.Project.Importer.ProjectImporterMapper + +instance ToSchema ProjectImporterDTO where + declareNamedSchema = toSwagger (toDTO projectImporterBio1) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeDTO.hs new file mode 100644 index 000000000..a3c1a4ba0 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeDTO.hs @@ -0,0 +1,9 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO where + +import qualified Data.UUID as U +import GHC.Generics + +data ProjectMigrationChangeDTO = ProjectMigrationChangeDTO + { resolvedQuestionUuids :: [U.UUID] + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeJM.hs new file mode 100644 index 000000000..425568528 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO + +instance FromJSON ProjectMigrationChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectMigrationChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeSM.hs new file mode 100644 index 000000000..0aba1f1bb --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationChangeSM.hs @@ -0,0 +1,11 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations + +instance ToSchema ProjectMigrationChangeDTO where + declareNamedSchema = toSwagger projectMigrationChangeDto diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateDTO.hs similarity index 54% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateDTO.hs index 1b3520fa0..1045e0025 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateDTO.hs @@ -1,9 +1,9 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateDTO where +module Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateDTO where import qualified Data.UUID as U import GHC.Generics -data MigratorStateCreateDTO = MigratorStateCreateDTO +data ProjectMigrationCreateDTO = ProjectMigrationCreateDTO { targetKnowledgeModelPackageId :: String , targetTagUuids :: [U.UUID] } diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateJM.hs new file mode 100644 index 000000000..ac9b6acc4 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateDTO + +instance FromJSON ProjectMigrationCreateDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectMigrationCreateDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateSM.hs new file mode 100644 index 000000000..7d27c3611 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationCreateSM.hs @@ -0,0 +1,11 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations + +instance ToSchema ProjectMigrationCreateDTO where + declareNamedSchema = toSwagger projectMigrationCreateDto diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationDTO.hs new file mode 100644 index 000000000..299d3c572 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationDTO.hs @@ -0,0 +1,14 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO where + +import qualified Data.UUID as U +import GHC.Generics + +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO + +data ProjectMigrationDTO = ProjectMigrationDTO + { oldProject :: ProjectDetailQuestionnaireDTO + , newProject :: ProjectDetailQuestionnaireDTO + , resolvedQuestionUuids :: [U.UUID] + , tenantUuid :: U.UUID + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationJM.hs new file mode 100644 index 000000000..226c643e6 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationJM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireJM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO + +instance FromJSON ProjectMigrationDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectMigrationDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationSM.hs new file mode 100644 index 000000000..30740a771 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Migration/ProjectMigrationSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Migration.ProjectMigrationSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireSM () +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations + +instance ToSchema ProjectMigrationDTO where + declareNamedSchema = toSwagger projectMigrationDto diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeDTO.hs new file mode 100644 index 000000000..e2af715a2 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeDTO.hs @@ -0,0 +1,10 @@ +module Wizard.Api.Resource.Project.ProjectContentChangeDTO where + +import GHC.Generics + +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO + +data ProjectContentChangeDTO = ProjectContentChangeDTO + { events :: [ProjectEventChangeDTO] + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeJM.hs new file mode 100644 index 000000000..d966dd263 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeJM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.ProjectContentChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Event.ProjectEventChangeJM () +import Wizard.Api.Resource.Project.ProjectContentChangeDTO + +instance FromJSON ProjectContentChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectContentChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeSM.hs new file mode 100644 index 000000000..555fb4ea2 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentChangeSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectContentChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Event.ProjectEventChangeSM () +import Wizard.Api.Resource.Project.ProjectContentChangeDTO +import Wizard.Api.Resource.Project.ProjectContentChangeJM () +import Wizard.Database.Migration.Development.Project.Data.Projects + +instance ToSchema ProjectContentChangeDTO where + declareNamedSchema = toSwagger contentChangeDTO diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentDTO.hs new file mode 100644 index 000000000..7b7a8ec4a --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentDTO.hs @@ -0,0 +1,20 @@ +module Wizard.Api.Resource.Project.ProjectContentDTO where + +import qualified Data.Map.Strict as M +import qualified Data.UUID as U +import GHC.Generics + +import Wizard.Model.Project.Comment.ProjectCommentList +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.Version.ProjectVersionList + +data ProjectContentDTO = ProjectContentDTO + { phaseUuid :: Maybe U.UUID + , replies :: M.Map String Reply + , commentThreadsMap :: M.Map String [ProjectCommentThreadList] + , labels :: M.Map String [U.UUID] + , events :: [ProjectEventList] + , versions :: [ProjectVersionList] + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentJM.hs new file mode 100644 index 000000000..18f3d270e --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentJM.hs @@ -0,0 +1,16 @@ +module Wizard.Api.Resource.Project.ProjectContentJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListJM () +import Wizard.Api.Resource.Project.Event.ProjectEventListJM () +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Api.Resource.Project.Version.ProjectVersionListJM () + +instance FromJSON ProjectContentDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectContentDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentSM.hs new file mode 100644 index 000000000..3e920e513 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectContentSM.hs @@ -0,0 +1,17 @@ +module Wizard.Api.Resource.Project.ProjectContentSM where + +import qualified Data.Map.Strict as M +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListSM () +import Wizard.Api.Resource.Project.Event.ProjectEventListSM () +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Api.Resource.Project.ProjectContentJM () +import Wizard.Api.Resource.Project.ProjectReplySM () +import Wizard.Api.Resource.Project.Version.ProjectVersionListSM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectContentDTO where + declareNamedSchema = toSwagger (toContentDTO project1Ctn M.empty [] []) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateDTO.hs similarity index 50% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateDTO.hs index 989e73fda..8c7e146da 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateDTO.hs @@ -1,15 +1,15 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO where +module Wizard.Api.Resource.Project.ProjectCreateDTO where import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project -data QuestionnaireCreateDTO = QuestionnaireCreateDTO +data ProjectCreateDTO = ProjectCreateDTO { name :: String , knowledgeModelPackageId :: String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing + , visibility :: ProjectVisibility + , sharing :: ProjectSharing , questionTagUuids :: [U.UUID] , documentTemplateId :: Maybe String , formatUuid :: Maybe U.UUID diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateDTO.hs new file mode 100644 index 000000000..dd1bacc12 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateDTO.hs @@ -0,0 +1,10 @@ +module Wizard.Api.Resource.Project.ProjectCreateFromTemplateDTO where + +import qualified Data.UUID as U +import GHC.Generics + +data ProjectCreateFromTemplateDTO = ProjectCreateFromTemplateDTO + { name :: String + , projectUuid :: U.UUID + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateJM.hs new file mode 100644 index 000000000..32b68e689 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectCreateFromTemplateJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateDTO + +instance FromJSON ProjectCreateFromTemplateDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectCreateFromTemplateDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateSM.hs new file mode 100644 index 000000000..8f4d24e03 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateFromTemplateSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectCreateFromTemplateSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateDTO +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateJM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectCreateFromTemplateDTO where + declareNamedSchema = toSwagger (toCreateFromTemplateDTO project1) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateJM.hs new file mode 100644 index 000000000..45f28d884 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateJM.hs @@ -0,0 +1,14 @@ +module Wizard.Api.Resource.Project.ProjectCreateJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.ProjectCreateDTO +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () + +instance FromJSON ProjectCreateDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectCreateDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateSM.hs new file mode 100644 index 000000000..43b235928 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectCreateSM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.ProjectCreateSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.ProjectCreateDTO +import Wizard.Api.Resource.Project.ProjectCreateJM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Database.Migration.Development.Project.Data.Projects + +instance ToSchema ProjectCreateDTO where + declareNamedSchema = toSwagger project1Create diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectDTO.hs similarity index 61% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/ProjectDTO.hs index c5cef66ea..89c48a30c 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectDTO.hs @@ -1,30 +1,30 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDTO where +module Wizard.Api.Resource.Project.ProjectDTO where import Data.Time import qualified Data.UUID as U import GHC.Generics import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackageSimple -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireState +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectState -data QuestionnaireDTO = QuestionnaireDTO +data ProjectDTO = ProjectDTO { uuid :: U.UUID , name :: String , description :: Maybe String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing - , state :: QuestionnaireState + , visibility :: ProjectVisibility + , sharing :: ProjectSharing + , state :: ProjectState , knowledgeModelPackage :: KnowledgeModelPackageSimple - , permissions :: [QuestionnairePermDTO] + , permissions :: [ProjectPermDTO] , isTemplate :: Bool , createdAt :: UTCTime , updatedAt :: UTCTime } deriving (Show, Generic) -instance Eq QuestionnaireDTO where +instance Eq ProjectDTO where a == b = a.uuid == b.uuid && a.name == b.name diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectJM.hs new file mode 100644 index 000000000..adcf55d0c --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectJM.hs @@ -0,0 +1,19 @@ +module Wizard.Api.Resource.Project.ProjectJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectReportJM () +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectStateJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () +import Wizard.Api.Resource.User.UserJM () + +instance FromJSON ProjectDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReplyJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReplyJM.hs similarity index 85% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReplyJM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/ProjectReplyJM.hs index c8bd8ff1c..a44010886 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReplyJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReplyJM.hs @@ -1,9 +1,9 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM where +module Wizard.Api.Resource.Project.ProjectReplyJM where import Data.Aeson import Shared.Common.Util.Aeson -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import WizardLib.Public.Api.Resource.User.UserSuggestionJM () instance ToJSON Reply where diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReplySM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReplySM.hs similarity index 61% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReplySM.hs rename to wizard-server/src/Wizard/Api/Resource/Project/ProjectReplySM.hs index f628ec3f8..870fa4974 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReplySM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReplySM.hs @@ -1,12 +1,12 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM where +module Wizard.Api.Resource.Project.ProjectReplySM where import Data.Swagger import Shared.Common.Api.Resource.Common.AesonSM () import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Model.Project.ProjectReply import WizardLib.Public.Api.Resource.User.UserSuggestionSM () instance ToSchema Reply where diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportDTO.hs similarity index 50% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/ProjectReportDTO.hs index 71c2b5901..cdbdff2e8 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportDTO.hs @@ -1,10 +1,10 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireReportDTO where +module Wizard.Api.Resource.Project.ProjectReportDTO where import GHC.Generics import Wizard.Model.Report.Report -data QuestionnaireReportDTO = QuestionnaireReportDTO +data ProjectReportDTO = ProjectReportDTO { indications :: [Indication] } deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportJM.hs new file mode 100644 index 000000000..ec631b917 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportJM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.ProjectReportJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.ProjectReportDTO +import Wizard.Api.Resource.Report.ReportJM () + +instance FromJSON ProjectReportDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectReportDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportSM.hs new file mode 100644 index 000000000..281fd2f11 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectReportSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectReportSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.ProjectReportDTO +import Wizard.Api.Resource.Project.ProjectReportJM () +import Wizard.Api.Resource.Report.ReportSM () +import Wizard.Database.Migration.Development.Report.Data.Reports + +instance ToSchema ProjectReportDTO where + declareNamedSchema = toSwagger projectReport diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSM.hs new file mode 100644 index 000000000..9c6086cfd --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSM.hs @@ -0,0 +1,22 @@ +module Wizard.Api.Resource.Project.ProjectSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages +import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleSM () +import Wizard.Api.Resource.Project.Acl.ProjectPermSM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectJM () +import Wizard.Api.Resource.Project.ProjectReportSM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectStateSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Api.Resource.User.UserSM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.ProjectState +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectDTO where + declareNamedSchema = + toSwagger (toDTO project1 germanyKmPackage DefaultProjectState [project1AlbertEditProjectPermDto]) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeDTO.hs similarity index 63% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeDTO.hs index e307fa2c5..9a9f5b659 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeDTO.hs @@ -1,9 +1,9 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO where +module Wizard.Api.Resource.Project.ProjectSettingsChangeDTO where import qualified Data.UUID as U import GHC.Generics -data QuestionnaireSettingsChangeDTO = QuestionnaireSettingsChangeDTO +data ProjectSettingsChangeDTO = ProjectSettingsChangeDTO { name :: String , description :: Maybe String , projectTags :: [String] diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeJM.hs new file mode 100644 index 000000000..a12dbcc41 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectSettingsChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO + +instance FromJSON ProjectSettingsChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectSettingsChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeSM.hs new file mode 100644 index 000000000..a142adb4a --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSettingsChangeSM.hs @@ -0,0 +1,11 @@ +module Wizard.Api.Resource.Project.ProjectSettingsChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO +import Wizard.Api.Resource.Project.ProjectSettingsChangeJM () +import Wizard.Database.Migration.Development.Project.Data.Projects + +instance ToSchema ProjectSettingsChangeDTO where + declareNamedSchema = toSwagger project1SettingsChange diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeDTO.hs new file mode 100644 index 000000000..1b0dd5faa --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeDTO.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.ProjectShareChangeDTO where + +import GHC.Generics + +import Wizard.Api.Resource.Project.Acl.ProjectPermChangeDTO +import Wizard.Model.Project.Project + +data ProjectShareChangeDTO = ProjectShareChangeDTO + { visibility :: ProjectVisibility + , sharing :: ProjectSharing + , permissions :: [ProjectPermChangeDTO] + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeJM.hs new file mode 100644 index 000000000..6fb4d5fea --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeJM.hs @@ -0,0 +1,15 @@ +module Wizard.Api.Resource.Project.ProjectShareChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Acl.ProjectPermChangeJM () +import Wizard.Api.Resource.Project.ProjectShareChangeDTO +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () + +instance FromJSON ProjectShareChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectShareChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeSM.hs new file mode 100644 index 000000000..69e26de8d --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectShareChangeSM.hs @@ -0,0 +1,14 @@ +module Wizard.Api.Resource.Project.ProjectShareChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Acl.ProjectPermChangeSM () +import Wizard.Api.Resource.Project.ProjectShareChangeDTO +import Wizard.Api.Resource.Project.ProjectShareChangeJM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () +import Wizard.Database.Migration.Development.Project.Data.Projects + +instance ToSchema ProjectShareChangeDTO where + declareNamedSchema = toSwagger project1EditedShareChange diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingJM.hs new file mode 100644 index 000000000..a76d0c106 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingJM.hs @@ -0,0 +1,9 @@ +module Wizard.Api.Resource.Project.ProjectSharingJM where + +import Data.Aeson + +import Wizard.Model.Project.Project + +instance FromJSON ProjectSharing + +instance ToJSON ProjectSharing diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingSM.hs new file mode 100644 index 000000000..d68adece8 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSharingSM.hs @@ -0,0 +1,7 @@ +module Wizard.Api.Resource.Project.ProjectSharingSM where + +import Data.Swagger + +import Wizard.Model.Project.Project + +instance ToSchema ProjectSharing diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleJM.hs new file mode 100644 index 000000000..86de51d54 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectSimpleJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Model.Project.ProjectSimple + +instance FromJSON ProjectSimple where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectSimple where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleSM.hs new file mode 100644 index 000000000..7ba58072c --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSimpleSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectSimpleSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.ProjectSimpleJM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.ProjectSimple +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectSimple where + declareNamedSchema = toSwagger (toSimple project1) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectStateJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectStateJM.hs new file mode 100644 index 000000000..f962cff34 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectStateJM.hs @@ -0,0 +1,9 @@ +module Wizard.Api.Resource.Project.ProjectStateJM where + +import Data.Aeson + +import Wizard.Model.Project.ProjectState + +instance FromJSON ProjectState + +instance ToJSON ProjectState diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectStateSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectStateSM.hs new file mode 100644 index 000000000..640d7158f --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectStateSM.hs @@ -0,0 +1,7 @@ +module Wizard.Api.Resource.Project.ProjectStateSM where + +import Data.Swagger + +import Wizard.Model.Project.ProjectState + +instance ToSchema ProjectState diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionJM.hs new file mode 100644 index 000000000..72c70d49f --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectSuggestionJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Model.Project.ProjectSuggestion + +instance FromJSON ProjectSuggestion where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectSuggestion where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionSM.hs new file mode 100644 index 000000000..6aeff11c0 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectSuggestionSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.ProjectSuggestionSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.ProjectSuggestionJM () +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.ProjectSuggestion +import Wizard.Service.Project.ProjectMapper + +instance ToSchema ProjectSuggestion where + declareNamedSchema = toSwagger (toSuggestion project1) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilityJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilityJM.hs new file mode 100644 index 000000000..df2855c32 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilityJM.hs @@ -0,0 +1,9 @@ +module Wizard.Api.Resource.Project.ProjectVisibilityJM where + +import Data.Aeson + +import Wizard.Model.Project.Project + +instance FromJSON ProjectVisibility + +instance ToJSON ProjectVisibility diff --git a/wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilitySM.hs b/wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilitySM.hs new file mode 100644 index 000000000..7e3397ce3 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/ProjectVisibilitySM.hs @@ -0,0 +1,7 @@ +module Wizard.Api.Resource.Project.ProjectVisibilitySM where + +import Data.Swagger + +import Wizard.Model.Project.Project + +instance ToSchema ProjectVisibility diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeDTO.hs similarity index 51% rename from wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeDTO.hs index acc16efba..9ddfb0201 100644 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeDTO.hs @@ -1,9 +1,9 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO where +module Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO where import qualified Data.UUID as U import GHC.Generics -data QuestionnaireVersionChangeDTO = QuestionnaireVersionChangeDTO +data ProjectVersionChangeDTO = ProjectVersionChangeDTO { name :: String , description :: Maybe String , eventUuid :: U.UUID diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeJM.hs new file mode 100644 index 000000000..aac5d2fe6 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Version.ProjectVersionChangeJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO + +instance FromJSON ProjectVersionChangeDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectVersionChangeDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeSM.hs new file mode 100644 index 000000000..0e0d3f309 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionChangeSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Version.ProjectVersionChangeSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects + +instance ToSchema ProjectVersionChangeDTO where + declareNamedSchema = toSwagger (projectVersion2ChangeDto project1Uuid) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListJM.hs new file mode 100644 index 000000000..2b2dcd7e1 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListJM.hs @@ -0,0 +1,20 @@ +module Wizard.Api.Resource.Project.Version.ProjectVersionListJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList +import WizardLib.Public.Api.Resource.User.UserSuggestionJM () + +instance FromJSON ProjectVersion where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectVersion where + toJSON = genericToJSON jsonOptions + +instance FromJSON ProjectVersionList where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectVersionList where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListSM.hs new file mode 100644 index 000000000..5494cac08 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionListSM.hs @@ -0,0 +1,13 @@ +module Wizard.Api.Resource.Project.Version.ProjectVersionListSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Version.ProjectVersionListJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.Version.ProjectVersionList +import WizardLib.Public.Api.Resource.User.UserSuggestionSM () + +instance ToSchema ProjectVersionList where + declareNamedSchema = toSwagger (projectVersion1List project1Uuid) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertDTO.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertDTO.hs new file mode 100644 index 000000000..7197f4be9 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertDTO.hs @@ -0,0 +1,9 @@ +module Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO where + +import qualified Data.UUID as U +import GHC.Generics + +data ProjectVersionRevertDTO = ProjectVersionRevertDTO + { eventUuid :: U.UUID + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertJM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertJM.hs new file mode 100644 index 000000000..199207323 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertJM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Version.ProjectVersionRevertJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO + +instance FromJSON ProjectVersionRevertDTO where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectVersionRevertDTO where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertSM.hs b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertSM.hs new file mode 100644 index 000000000..473874035 --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Project/Version/ProjectVersionRevertSM.hs @@ -0,0 +1,12 @@ +module Wizard.Api.Resource.Project.Version.ProjectVersionRevertSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects + +instance ToSchema ProjectVersionRevertDTO where + declareNamedSchema = toSwagger (projectVersion1RevertDto project1Uuid) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventListSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventListSM.hs deleted file mode 100644 index 5e99a8edd..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Event/QuestionnaireEventListSM.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper -import WizardLib.Public.Api.Resource.User.UserSuggestionSM () - -instance ToSchema QuestionnaireEventList where - declareNamedSchema = genericDeclareNamedSchemaUnrestricted defaultSchemaOptions - -instance ToSchema SetReplyEventList where - declareNamedSchema = toSwagger (toSetReplyEventList (sre_rQ1 questionnaire1.uuid) (Just userAlbert)) - -instance ToSchema ClearReplyEventList where - declareNamedSchema = toSwagger (toClearReplyEventList (cre_rQ1 questionnaire1.uuid) (Just userAlbert)) - -instance ToSchema SetPhaseEventList where - declareNamedSchema = toSwagger (toSetPhaseEventList (sphse_1 questionnaire1.uuid) (Just userAlbert)) - -instance ToSchema SetLabelsEventList where - declareNamedSchema = toSwagger (toSetLabelsEventList (slble_rQ2 questionnaire1.uuid) (Just userAlbert)) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListJM.hs deleted file mode 100644 index 151214d36..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListJM.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileListJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleJM () -import Wizard.Model.Questionnaire.QuestionnaireFileList -import WizardLib.Public.Api.Resource.User.UserSuggestionJM () - -instance FromJSON QuestionnaireFileList where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireFileList where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListSM.hs deleted file mode 100644 index 64604a868..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileListSM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileListSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileListJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleSM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireFiles -import Wizard.Model.Questionnaire.QuestionnaireFileList -import WizardLib.Public.Api.Resource.User.UserSuggestionSM () - -instance ToSchema QuestionnaireFileList where - declareNamedSchema = toSwagger questionnaireFileList diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleJM.hs deleted file mode 100644 index 2c5da897d..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Model.Questionnaire.QuestionnaireFileSimple - -instance FromJSON QuestionnaireFileSimple where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireFileSimple where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleSM.hs deleted file mode 100644 index 621e22fa2..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/File/QuestionnaireFileSimpleSM.hs +++ /dev/null @@ -1,11 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireFiles -import Wizard.Model.Questionnaire.QuestionnaireFileSimple - -instance ToSchema QuestionnaireFileSimple where - declareNamedSchema = toSwagger questionnaireFileSimple diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeDTO.hs deleted file mode 100644 index 27908c237..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeDTO.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO where - -import qualified Data.UUID as U -import GHC.Generics - -data MigratorStateChangeDTO = MigratorStateChangeDTO - { resolvedQuestionUuids :: [U.UUID] - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeJM.hs deleted file mode 100644 index c20d8697d..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO - -instance FromJSON MigratorStateChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON MigratorStateChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeSM.hs deleted file mode 100644 index 0c2f27799..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateChangeSM.hs +++ /dev/null @@ -1,11 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates - -instance ToSchema MigratorStateChangeDTO where - declareNamedSchema = toSwagger migratorStateChange diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateJM.hs deleted file mode 100644 index 144e645c7..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateDTO - -instance FromJSON MigratorStateCreateDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON MigratorStateCreateDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateSM.hs deleted file mode 100644 index e955a1f2f..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateCreateSM.hs +++ /dev/null @@ -1,11 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates - -instance ToSchema MigratorStateCreateDTO where - declareNamedSchema = toSwagger migratorStateCreate diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateDTO.hs deleted file mode 100644 index 68ea1fef6..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateDTO.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO where - -import qualified Data.UUID as U -import GHC.Generics - -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO - -data MigratorStateDTO = MigratorStateDTO - { oldQuestionnaire :: QuestionnaireDetailQuestionnaireDTO - , newQuestionnaire :: QuestionnaireDetailQuestionnaireDTO - , resolvedQuestionUuids :: [U.UUID] - , tenantUuid :: U.UUID - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateJM.hs deleted file mode 100644 index 73801b86c..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateJM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireJM () - -instance FromJSON MigratorStateDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON MigratorStateDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateSM.hs deleted file mode 100644 index 02cc75fa7..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Migration/MigratorStateSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Migration.MigratorStateSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireSM () -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates - -instance ToSchema MigratorStateDTO where - declareNamedSchema = toSwagger nlQtnMigrationStateDto diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedJM.hs deleted file mode 100644 index be9494a06..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedJM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadAssignedJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned -import WizardLib.Public.Api.Resource.User.UserSuggestionJM () - -instance FromJSON QuestionnaireCommentThreadAssigned where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireCommentThreadAssigned where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedSM.hs deleted file mode 100644 index 6d1ebdba0..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadAssignedSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadAssignedSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadAssignedJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned -import WizardLib.Public.Api.Resource.User.UserSuggestionSM () - -instance ToSchema QuestionnaireCommentThreadAssigned where - declareNamedSchema = toSwagger cmtAssigned diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListJM.hs deleted file mode 100644 index fd4a07c54..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListJM.hs +++ /dev/null @@ -1,19 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import WizardLib.Public.Api.Resource.User.UserSuggestionJM () - -instance FromJSON QuestionnaireCommentThreadList where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireCommentThreadList where - toJSON = genericToJSON jsonOptions - -instance FromJSON QuestionnaireCommentList where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireCommentList where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListSM.hs deleted file mode 100644 index 853037de5..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadListSM.hs +++ /dev/null @@ -1,15 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import WizardLib.Public.Api.Resource.User.UserSuggestionSM () - -instance ToSchema QuestionnaireCommentThreadList where - declareNamedSchema = toSwagger cmtQ1_t1Dto - -instance ToSchema QuestionnaireCommentList where - declareNamedSchema = toSwagger cmtQ1_t1_1Dto diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadNotificationJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadNotificationJM.hs deleted file mode 100644 index 62b4c24c1..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCommentThreadNotificationJM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadNotificationJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.User.UserSimpleJM () -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadNotification - -instance FromJSON QuestionnaireCommentThreadNotification where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireCommentThreadNotification where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeDTO.hs deleted file mode 100644 index c1de53e1d..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeDTO.hs +++ /dev/null @@ -1,10 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO where - -import GHC.Generics - -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO - -data QuestionnaireContentChangeDTO = QuestionnaireContentChangeDTO - { events :: [QuestionnaireEventChangeDTO] - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeJM.hs deleted file mode 100644 index b47eed7ad..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeJM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO - -instance FromJSON QuestionnaireContentChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireContentChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeSM.hs deleted file mode 100644 index e4c42ad5e..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentChangeSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires - -instance ToSchema QuestionnaireContentChangeDTO where - declareNamedSchema = toSwagger contentChangeDTO diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentDTO.hs deleted file mode 100644 index c4d5e972a..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentDTO.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO where - -import qualified Data.Map.Strict as M -import qualified Data.UUID as U -import GHC.Generics - -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireVersionList - -data QuestionnaireContentDTO = QuestionnaireContentDTO - { phaseUuid :: Maybe U.UUID - , replies :: M.Map String Reply - , commentThreadsMap :: M.Map String [QuestionnaireCommentThreadList] - , labels :: M.Map String [U.UUID] - , events :: [QuestionnaireEventList] - , versions :: [QuestionnaireVersionList] - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentJM.hs deleted file mode 100644 index 2c65d4398..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentJM.hs +++ /dev/null @@ -1,16 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireContentJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListJM () - -instance FromJSON QuestionnaireContentDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireContentDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentSM.hs deleted file mode 100644 index 4ea6f2ccc..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireContentSM.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireContentSM where - -import qualified Data.Map.Strict as M -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventListSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListSM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnaireContentDTO where - declareNamedSchema = toSwagger (toContentDTO questionnaire1Ctn M.empty [] []) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateDTO.hs deleted file mode 100644 index 89f0288d7..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateDTO.hs +++ /dev/null @@ -1,10 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateDTO where - -import qualified Data.UUID as U -import GHC.Generics - -data QuestionnaireCreateFromTemplateDTO = QuestionnaireCreateFromTemplateDTO - { name :: String - , questionnaireUuid :: U.UUID - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateJM.hs deleted file mode 100644 index 10c3563c4..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateDTO - -instance FromJSON QuestionnaireCreateFromTemplateDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireCreateFromTemplateDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateSM.hs deleted file mode 100644 index 4daf331d7..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateFromTemplateSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnaireCreateFromTemplateDTO where - declareNamedSchema = toSwagger (toCreateFromTemplateDTO questionnaire1) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateJM.hs deleted file mode 100644 index 1b7a96e99..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateJM.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCreateJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () - -instance FromJSON QuestionnaireCreateDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireCreateDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateSM.hs deleted file mode 100644 index 05d34a69c..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireCreateSM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireCreateSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires - -instance ToSchema QuestionnaireCreateDTO where - declareNamedSchema = toSwagger questionnaire1Create diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailDTO.hs deleted file mode 100644 index 67e0f1bf9..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailDTO.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailDTO where - -import qualified Data.UUID as U -import GHC.Generics - -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire - -data QuestionnaireDetailDTO = QuestionnaireDetailDTO - { uuid :: U.UUID - , name :: String - , sharing :: QuestionnaireSharing - , visibility :: QuestionnaireVisibility - , knowledgeModelPackageId :: String - , isTemplate :: Bool - , migrationUuid :: Maybe U.UUID - , permissions :: [QuestionnairePermDTO] - , fileCount :: Int - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailJM.hs deleted file mode 100644 index 1874f4cc1..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailJM.hs +++ /dev/null @@ -1,15 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () - -instance FromJSON QuestionnaireDetailDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireDetailDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewJM.hs deleted file mode 100644 index 1fd3dc486..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewJM.hs +++ /dev/null @@ -1,16 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailPreviewJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () -import Wizard.Model.Questionnaire.QuestionnaireDetailPreview - -instance FromJSON QuestionnaireDetailPreview where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireDetailPreview where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewSM.hs deleted file mode 100644 index 151c1e1de..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailPreviewSM.hs +++ /dev/null @@ -1,35 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailPreviewSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateSM () -import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateFormats -import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates -import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate -import qualified Shared.DocumentTemplate.Service.DocumentTemplate.DocumentTemplateMapper as DocumentTemplateMapper -import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailPreviewJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireDetailPreview - -instance ToSchema QuestionnaireDetailPreview where - declareNamedSchema = - toSwagger $ - QuestionnaireDetailPreview - { uuid = questionnaire1.uuid - , name = questionnaire1.name - , visibility = questionnaire1.visibility - , sharing = questionnaire1.sharing - , knowledgeModelPackageId = questionnaire1.knowledgeModelPackageId - , isTemplate = questionnaire1.isTemplate - , documentTemplateId = Just wizardDocumentTemplate.tId - , migrationUuid = Nothing - , permissions = [qtn1AlbertEditQtnPermDto] - , format = Just . DocumentTemplateMapper.toFormatSimple $ formatJson - , fileCount = 0 - } diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireJM.hs deleted file mode 100644 index 9b50720da..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireJM.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelJM () -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () - -instance FromJSON QuestionnaireDetailQuestionnaireDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireDetailQuestionnaireDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireSM.hs deleted file mode 100644 index 2d04a4bf1..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailQuestionnaireSM.hs +++ /dev/null @@ -1,57 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireSM where - -import Data.Map.Strict as M -import Data.Swagger - -import Shared.Common.Util.Swagger -import Shared.Common.Util.Uuid -import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelSM () -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireLabels -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.Questionnaire - -instance ToSchema QuestionnaireDetailQuestionnaireDTO where - declareNamedSchema = - toSwagger $ - QuestionnaireDetailQuestionnaireDTO - { uuid = questionnaire1.uuid - , name = questionnaire1.name - , visibility = questionnaire1.visibility - , sharing = questionnaire1.sharing - , knowledgeModelPackageId = questionnaire1.knowledgeModelPackageId - , selectedQuestionTagUuids = questionnaire1.selectedQuestionTagUuids - , isTemplate = questionnaire1.isTemplate - , knowledgeModel = km1 - , replies = fReplies - , labels = fLabels - , phaseUuid = Just . u' $ "4b376e49-1589-429b-9590-c654378f0bd5" - , migrationUuid = Nothing - , permissions = [qtn1AlbertEditQtnPermDto] - , files = [] - , unresolvedCommentCounts = - M.fromList - [ - ( "4f61fdfa-ce82-41b5-a1e6-218beaf41660.0dc58313-eb80-4f74-a8c1-347b644665d5" - , M.fromList [(u' "f1de85a9-7f22-4d0c-bc23-3315cc4c85d7", 4)] - ) - ] - , resolvedCommentCounts = - M.fromList - [ - ( "4f61fdfa-ce82-41b5-a1e6-218beaf41660.0dc58313-eb80-4f74-a8c1-347b644665d5" - , M.fromList [(u' "f1de85a9-7f22-4d0c-bc23-3315cc4c85d7", 2)] - ) - ] - , questionnaireActionsAvailable = 1 - , questionnaireImportersAvailable = 2 - , fileCount = 0 - } diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportJM.hs deleted file mode 100644 index 4414d2985..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportJM.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () -import Wizard.Api.Resource.Report.ReportJM () - -instance FromJSON QuestionnaireDetailReportDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireDetailReportDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportSM.hs deleted file mode 100644 index a04efe87f..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailReportSM.hs +++ /dev/null @@ -1,35 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Api.Resource.Report.ReportSM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.Report.Data.Reports -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Report.Report - -instance ToSchema QuestionnaireDetailReportDTO where - declareNamedSchema = - toSwagger $ - QuestionnaireDetailReportDTO - { uuid = questionnaire1.uuid - , name = questionnaire1.name - , visibility = questionnaire1.visibility - , sharing = questionnaire1.sharing - , knowledgeModelPackageId = questionnaire1.knowledgeModelPackageId - , isTemplate = questionnaire1.isTemplate - , migrationUuid = Nothing - , permissions = [qtn1AlbertEditQtnPermDto] - , fileCount = 0 - , totalReport = report1.totalReport - , chapterReports = report1.chapterReports - , chapters = report1.chapters - , metrics = report1.metrics - } diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSM.hs deleted file mode 100644 index 38c57507a..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSM.hs +++ /dev/null @@ -1,27 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.Questionnaire - -instance ToSchema QuestionnaireDetailDTO where - declareNamedSchema = - toSwagger $ - QuestionnaireDetailDTO - { uuid = questionnaire1.uuid - , name = questionnaire1.name - , visibility = questionnaire1.visibility - , sharing = questionnaire1.sharing - , knowledgeModelPackageId = questionnaire1.knowledgeModelPackageId - , isTemplate = questionnaire1.isTemplate - , migrationUuid = Nothing - , permissions = [qtn1AlbertEditQtnPermDto] - , fileCount = 0 - } diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSettingsJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSettingsJM.hs deleted file mode 100644 index 0cf03d5ed..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailSettingsJM.hs +++ /dev/null @@ -1,22 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailSettingsJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateJM () -import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateJM () -import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelJM () -import Wizard.Api.Resource.DocumentTemplate.DocumentTemplateStateJM () -import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireStateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () -import Wizard.Model.Questionnaire.QuestionnaireDetailSettings - -instance FromJSON QuestionnaireDetailSettings where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireDetailSettings where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsJM.hs deleted file mode 100644 index 515624e87..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsJM.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateJM () -import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () - -instance FromJSON QuestionnaireDetailWsDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireDetailWsDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsSM.hs deleted file mode 100644 index da015cb4b..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireDetailWsSM.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsSM where - -import qualified Data.Map.Strict as M -import Data.Swagger - -import Shared.Common.Util.Swagger -import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnaireDetailWsDTO where - declareNamedSchema = toSwagger (toDetailWsDTO questionnaire1 Nothing Nothing [] M.empty M.empty M.empty) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireJM.hs deleted file mode 100644 index 841059824..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireJM.hs +++ /dev/null @@ -1,19 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireStateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () -import Wizard.Api.Resource.User.UserJM () - -instance FromJSON QuestionnaireDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeDTO.hs deleted file mode 100644 index 0edcef1f2..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeDTO.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeDTO where - -import qualified Data.UUID as U -import GHC.Generics - -import Wizard.Model.Questionnaire.QuestionnairePerm - -data QuestionnairePermChangeDTO = QuestionnairePermChangeDTO - { memberType :: QuestionnairePermType - , memberUuid :: U.UUID - , perms :: [String] - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeJM.hs deleted file mode 100644 index 47a653b77..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeJM.hs +++ /dev/null @@ -1,15 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () - -instance FromJSON QuestionnairePermChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnairePermChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeSM.hs deleted file mode 100644 index eecbded0c..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermChangeSM.hs +++ /dev/null @@ -1,15 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnairePermChangeDTO where - declareNamedSchema = toSwagger (toQuestionnairePermChangeDTO qtn1AlbertEditQtnPerm) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermDTO.hs deleted file mode 100644 index 93dfb5e95..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermDTO.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO where - -import qualified Data.UUID as U -import GHC.Generics -import GHC.Records - -import Wizard.Api.Resource.Acl.MemberDTO -import Wizard.Model.Questionnaire.QuestionnairePerm - -data QuestionnairePermDTO = QuestionnairePermDTO - { questionnaireUuid :: U.UUID - , member :: MemberDTO - , perms :: [String] - } - deriving (Generic, Eq, Show) - -instance Ord QuestionnairePermDTO where - compare a b = compare a.member.uuid b.member.uuid - -instance QuestionnairePermC QuestionnairePermDTO - -instance HasField "memberType" QuestionnairePermDTO QuestionnairePermType where - getField perm = - case perm.member of - UserMemberDTO {} -> UserQuestionnairePermType - UserGroupMemberDTO {} -> UserGroupQuestionnairePermType - -instance HasField "memberUuid" QuestionnairePermDTO U.UUID where - getField perm = perm.member.uuid diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermJM.hs deleted file mode 100644 index a002ba98f..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermJM.hs +++ /dev/null @@ -1,24 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnairePermJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Acl.MemberJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.QuestionnairePerm - -instance FromJSON QuestionnairePermType - -instance ToJSON QuestionnairePermType - -instance FromJSON QuestionnairePerm where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnairePerm where - toJSON = genericToJSON jsonOptions - -instance FromJSON QuestionnairePermDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnairePermDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermSM.hs deleted file mode 100644 index 9be77f0e7..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnairePermSM.hs +++ /dev/null @@ -1,21 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnairePermSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Acl.MemberSM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnairePermType - -instance ToSchema QuestionnairePerm where - declareNamedSchema = toSwagger bioGroupEditQtnPerm - -instance ToSchema QuestionnairePermDTO where - declareNamedSchema = - toSwagger (toUserQuestionnairePermDTO bioGroupEditQtnPerm userAlbert) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportJM.hs deleted file mode 100644 index 314fb66fa..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportJM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireReportJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportDTO -import Wizard.Api.Resource.Report.ReportJM () - -instance FromJSON QuestionnaireReportDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireReportDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportSM.hs deleted file mode 100644 index f61a2dfbe..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireReportSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireReportSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportJM () -import Wizard.Api.Resource.Report.ReportSM () -import Wizard.Database.Migration.Development.Report.Data.Reports - -instance ToSchema QuestionnaireReportDTO where - declareNamedSchema = toSwagger questionnaireReport diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSM.hs deleted file mode 100644 index 8d0d034f8..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSM.hs +++ /dev/null @@ -1,22 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireStateSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Api.Resource.User.UserSM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.QuestionnaireState -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnaireDTO where - declareNamedSchema = - toSwagger (toDTO questionnaire1 germanyKmPackage QSDefault [qtn1AlbertEditQtnPermDto]) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeJM.hs deleted file mode 100644 index 1032b294b..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO - -instance FromJSON QuestionnaireSettingsChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireSettingsChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeSM.hs deleted file mode 100644 index f0ad4cb9a..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSettingsChangeSM.hs +++ /dev/null @@ -1,11 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires - -instance ToSchema QuestionnaireSettingsChangeDTO where - declareNamedSchema = toSwagger questionnaire1SettingsChange diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeDTO.hs deleted file mode 100644 index a6ae9b0e3..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeDTO.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO where - -import GHC.Generics - -import Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeDTO -import Wizard.Model.Questionnaire.Questionnaire - -data QuestionnaireShareChangeDTO = QuestionnaireShareChangeDTO - { visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing - , permissions :: [QuestionnairePermChangeDTO] - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeJM.hs deleted file mode 100644 index 594884746..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeJM.hs +++ /dev/null @@ -1,15 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () - -instance FromJSON QuestionnaireShareChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireShareChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeSM.hs deleted file mode 100644 index 6770546ce..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireShareChangeSM.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires - -instance ToSchema QuestionnaireShareChangeDTO where - declareNamedSchema = toSwagger questionnaire1EditedShareChange diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingJM.hs deleted file mode 100644 index 076ff29b8..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingJM.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM where - -import Data.Aeson - -import Wizard.Model.Questionnaire.Questionnaire - -instance FromJSON QuestionnaireSharing - -instance ToJSON QuestionnaireSharing diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingSM.hs deleted file mode 100644 index cba5fb7fc..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSharingSM.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM where - -import Data.Swagger - -import Wizard.Model.Questionnaire.Questionnaire - -instance ToSchema QuestionnaireSharing diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleJM.hs deleted file mode 100644 index afd5a96a3..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Model.Questionnaire.QuestionnaireSimple - -instance FromJSON QuestionnaireSimple where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireSimple where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleSM.hs deleted file mode 100644 index 4df3383ff..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSimpleSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireSimpleJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.QuestionnaireSimple -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnaireSimple where - declareNamedSchema = toSwagger (toSimple questionnaire1) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateJM.hs deleted file mode 100644 index 5eb62bb14..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateJM.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireStateJM where - -import Control.Monad -import Data.Aeson - -import Wizard.Model.Questionnaire.QuestionnaireState - -instance FromJSON QuestionnaireState where - parseJSON (String "Default") = return QSDefault - parseJSON (String "Migrating") = return QSMigrating - parseJSON (String "Outdated") = return QSOutdated - parseJSON _ = mzero - -instance ToJSON QuestionnaireState where - toJSON QSDefault = "Default" - toJSON QSMigrating = "Migrating" - toJSON QSOutdated = "Outdated" diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateSM.hs deleted file mode 100644 index ef184c5bd..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireStateSM.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireStateSM where - -import Data.Swagger - -import Wizard.Model.Questionnaire.QuestionnaireState - -instance ToSchema QuestionnaireState diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionJM.hs deleted file mode 100644 index e41315dd8..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Model.Questionnaire.QuestionnaireSuggestion - -instance FromJSON QuestionnaireSuggestion where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireSuggestion where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionSM.hs deleted file mode 100644 index e59ed6d87..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireSuggestionSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.QuestionnaireSuggestionJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.QuestionnaireSuggestion -import Wizard.Service.Questionnaire.QuestionnaireMapper - -instance ToSchema QuestionnaireSuggestion where - declareNamedSchema = toSwagger (toSuggestion questionnaire1) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilityJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilityJM.hs deleted file mode 100644 index 46447f302..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilityJM.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM where - -import Data.Aeson - -import Wizard.Model.Questionnaire.Questionnaire - -instance FromJSON QuestionnaireVisibility - -instance ToJSON QuestionnaireVisibility diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilitySM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilitySM.hs deleted file mode 100644 index 0267e8b56..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/QuestionnaireVisibilitySM.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM where - -import Data.Swagger - -import Wizard.Model.Questionnaire.Questionnaire - -instance ToSchema QuestionnaireVisibility diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeJM.hs deleted file mode 100644 index e97a680b9..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO - -instance FromJSON QuestionnaireVersionChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireVersionChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeSM.hs deleted file mode 100644 index ab4906b12..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionChangeSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires - -instance ToSchema QuestionnaireVersionChangeDTO where - declareNamedSchema = toSwagger (questionnaireVersion2ChangeDto questionnaire1Uuid) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListJM.hs deleted file mode 100644 index 7fac8a599..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListJM.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import WizardLib.Public.Api.Resource.User.UserSuggestionJM () - -instance FromJSON QuestionnaireVersion where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireVersion where - toJSON = genericToJSON jsonOptions - -instance FromJSON QuestionnaireVersionList where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireVersionList where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListSM.hs deleted file mode 100644 index 65a0d5c77..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionListSM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import WizardLib.Public.Api.Resource.User.UserSuggestionSM () - -instance ToSchema QuestionnaireVersionList where - declareNamedSchema = toSwagger (questionnaireVersion1List questionnaire1Uuid) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertDTO.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertDTO.hs deleted file mode 100644 index a9617f421..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertDTO.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO where - -import qualified Data.UUID as U -import GHC.Generics - -data QuestionnaireVersionRevertDTO = QuestionnaireVersionRevertDTO - { eventUuid :: U.UUID - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertJM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertJM.hs deleted file mode 100644 index c4aff2716..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO - -instance FromJSON QuestionnaireVersionRevertDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireVersionRevertDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertSM.hs b/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertSM.hs deleted file mode 100644 index cc6f66082..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Questionnaire/Version/QuestionnaireVersionRevertSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires - -instance ToSchema QuestionnaireVersionRevertDTO where - declareNamedSchema = toSwagger (questionnaireVersion1RevertDto questionnaire1Uuid) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeDTO.hs deleted file mode 100644 index 2f579de51..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeDTO.hs +++ /dev/null @@ -1,8 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeDTO where - -import GHC.Generics - -data QuestionnaireActionChangeDTO = QuestionnaireActionChangeDTO - { enabled :: Bool - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeJM.hs deleted file mode 100644 index 39999bcc6..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeDTO - -instance FromJSON QuestionnaireActionChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireActionChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeSM.hs deleted file mode 100644 index 3cd5633be..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionChangeSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeJM () -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper - -instance ToSchema QuestionnaireActionChangeDTO where - declareNamedSchema = toSwagger (toChangeDTO questionnaireActionFtp1) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionSM.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionSM.hs deleted file mode 100644 index 366c141de..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireAction/QuestionnaireActionSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionJM () -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper - -instance ToSchema QuestionnaireActionDTO where - declareNamedSchema = toSwagger (toDTO questionnaireActionFtp1) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeDTO.hs deleted file mode 100644 index 5df775649..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeDTO.hs +++ /dev/null @@ -1,8 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeDTO where - -import GHC.Generics - -data QuestionnaireImporterChangeDTO = QuestionnaireImporterChangeDTO - { enabled :: Bool - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeJM.hs deleted file mode 100644 index b2e1e1510..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeJM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeDTO - -instance FromJSON QuestionnaireImporterChangeDTO where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireImporterChangeDTO where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeSM.hs deleted file mode 100644 index 97f3928f0..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterChangeSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeJM () -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper - -instance ToSchema QuestionnaireImporterChangeDTO where - declareNamedSchema = toSwagger (toChangeDTO questionnaireImporterBio1) diff --git a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterSM.hs b/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterSM.hs deleted file mode 100644 index dfcbd6cdc..000000000 --- a/wizard-server/src/Wizard/Api/Resource/QuestionnaireImporter/QuestionnaireImporterSM.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper - -instance ToSchema QuestionnaireImporterDTO where - declareNamedSchema = toSwagger (toDTO questionnaireImporterBio1) diff --git a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeDTO.hs b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeDTO.hs index c5c6f7bea..e8cd64667 100644 --- a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeDTO.hs @@ -19,7 +19,7 @@ data TenantConfigChangeDTO = TenantConfigChangeDTO , lookAndFeel :: TenantConfigLookAndFeelChangeDTO , registry :: TenantConfigRegistryChangeDTO , knowledgeModel :: TenantConfigKnowledgeModelChangeDTO - , questionnaire :: TenantConfigQuestionnaireChangeDTO + , project :: TenantConfigProjectChangeDTO , submission :: TenantConfigSubmissionChangeDTO , features :: TenantConfigFeaturesChangeDTO } @@ -91,13 +91,13 @@ data TenantConfigKnowledgeModelPublicChangeDTO = TenantConfigKnowledgeModelPubli } deriving (Generic, Show) -data TenantConfigQuestionnaireChangeDTO = TenantConfigQuestionnaireChangeDTO - { questionnaireVisibility :: TenantConfigQuestionnaireVisibility - , questionnaireSharing :: TenantConfigQuestionnaireSharing - , questionnaireCreation :: QuestionnaireCreation - , projectTagging :: TenantConfigQuestionnaireProjectTagging +data TenantConfigProjectChangeDTO = TenantConfigProjectChangeDTO + { projectVisibility :: TenantConfigProjectVisibility + , projectSharing :: TenantConfigProjectSharing + , projectCreation :: ProjectCreation + , projectTagging :: TenantConfigProjectProjectTagging , summaryReport :: SimpleFeature - , feedback :: TenantConfigQuestionnaireFeedback + , feedback :: TenantConfigProjectFeedback } deriving (Generic, Eq, Show) diff --git a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeJM.hs b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeJM.hs index 586c78063..e79828c68 100644 --- a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeJM.hs @@ -68,10 +68,10 @@ instance FromJSON TenantConfigKnowledgeModelPublicChangeDTO where instance ToJSON TenantConfigKnowledgeModelPublicChangeDTO where toJSON = genericToJSON jsonOptions -instance FromJSON TenantConfigQuestionnaireChangeDTO where +instance FromJSON TenantConfigProjectChangeDTO where parseJSON = genericParseJSON jsonOptions -instance ToJSON TenantConfigQuestionnaireChangeDTO where +instance ToJSON TenantConfigProjectChangeDTO where toJSON = genericToJSON jsonOptions instance FromJSON TenantConfigSubmissionChangeDTO where diff --git a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeSM.hs b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeSM.hs index 3e396397f..baa9dd6f3 100644 --- a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigChangeSM.hs @@ -40,8 +40,8 @@ instance ToSchema TenantConfigKnowledgeModelChangeDTO where instance ToSchema TenantConfigKnowledgeModelPublicChangeDTO where declareNamedSchema = toSwagger defaultKnowledgeModelPublicChangeDto -instance ToSchema TenantConfigQuestionnaireChangeDTO where - declareNamedSchema = toSwagger defaultQuestionnaireChangeDto +instance ToSchema TenantConfigProjectChangeDTO where + declareNamedSchema = toSwagger defaultProjectChangeDto instance ToSchema TenantConfigSubmissionChangeDTO where declareNamedSchema = toSwagger defaultSubmission diff --git a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigJM.hs b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigJM.hs index c776e570e..787d81fb5 100644 --- a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigJM.hs @@ -7,8 +7,8 @@ import Shared.Common.Util.Aeson import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackagePatternJM () import Shared.OpenId.Api.Resource.OpenId.Client.Definition.OpenIdClientParameterJM () import Shared.OpenId.Api.Resource.OpenId.Client.Definition.OpenIdClientStyleJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilityJM () +import Wizard.Api.Resource.Project.ProjectSharingJM () +import Wizard.Api.Resource.Project.ProjectVisibilityJM () import Wizard.Model.Tenant.Config.TenantConfig import WizardLib.Public.Api.Resource.Tenant.Config.TenantConfigJM () @@ -94,38 +94,38 @@ instance FromJSON TenantConfigKnowledgeModelPublicPackagePattern where instance ToJSON TenantConfigKnowledgeModelPublicPackagePattern where toJSON = genericToJSON jsonOptions -instance FromJSON TenantConfigQuestionnaire where +instance FromJSON TenantConfigProject where parseJSON = genericParseJSON jsonOptions -instance ToJSON TenantConfigQuestionnaire where +instance ToJSON TenantConfigProject where toJSON = genericToJSON jsonOptions -instance FromJSON TenantConfigQuestionnaireVisibility where +instance FromJSON TenantConfigProjectVisibility where parseJSON = genericParseJSON jsonOptions -instance ToJSON TenantConfigQuestionnaireVisibility where +instance ToJSON TenantConfigProjectVisibility where toJSON = genericToJSON jsonOptions -instance FromJSON TenantConfigQuestionnaireSharing where +instance FromJSON TenantConfigProjectSharing where parseJSON = genericParseJSON jsonOptions -instance ToJSON TenantConfigQuestionnaireSharing where +instance ToJSON TenantConfigProjectSharing where toJSON = genericToJSON jsonOptions -instance FromJSON QuestionnaireCreation +instance FromJSON ProjectCreation -instance ToJSON QuestionnaireCreation +instance ToJSON ProjectCreation -instance FromJSON TenantConfigQuestionnaireProjectTagging where +instance FromJSON TenantConfigProjectProjectTagging where parseJSON = genericParseJSON jsonOptions -instance ToJSON TenantConfigQuestionnaireProjectTagging where +instance ToJSON TenantConfigProjectProjectTagging where toJSON = genericToJSON jsonOptions -instance FromJSON TenantConfigQuestionnaireFeedback where +instance FromJSON TenantConfigProjectFeedback where parseJSON = genericParseJSON jsonOptions -instance ToJSON TenantConfigQuestionnaireFeedback where +instance ToJSON TenantConfigProjectFeedback where toJSON = genericToJSON jsonOptions instance FromJSON TenantConfigSubmission where diff --git a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigSM.hs b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigSM.hs index ac597f4d8..d118997f4 100644 --- a/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Tenant/Config/TenantConfigSM.hs @@ -7,8 +7,8 @@ import Shared.Common.Util.Swagger import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackagePatternSM () import Shared.OpenId.Api.Resource.OpenId.Client.Definition.OpenIdClientParameterSM () import Shared.OpenId.Api.Resource.OpenId.Client.Definition.OpenIdClientStyleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireSharingSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireVisibilitySM () +import Wizard.Api.Resource.Project.ProjectSharingSM () +import Wizard.Api.Resource.Project.ProjectVisibilitySM () import Wizard.Api.Resource.Tenant.Config.TenantConfigJM () import Wizard.Database.Migration.Development.Tenant.Data.TenantConfigs import Wizard.Model.Tenant.Config.TenantConfig @@ -55,21 +55,21 @@ instance ToSchema TenantConfigKnowledgeModelPublic where instance ToSchema TenantConfigKnowledgeModelPublicPackagePattern where declareNamedSchema = toSwagger defaultKnowledgeModelPublicPackagePattern -instance ToSchema TenantConfigQuestionnaire where - declareNamedSchema = toSwagger defaultQuestionnaire +instance ToSchema TenantConfigProject where + declareNamedSchema = toSwagger defaultProject -instance ToSchema TenantConfigQuestionnaireVisibility where - declareNamedSchema = toSwagger defaultQuestionnaireVisibility +instance ToSchema TenantConfigProjectVisibility where + declareNamedSchema = toSwagger defaultProjectVisibility -instance ToSchema TenantConfigQuestionnaireSharing where - declareNamedSchema = toSwagger defaultQuestionnaireSharing +instance ToSchema TenantConfigProjectSharing where + declareNamedSchema = toSwagger defaultProjectSharing -instance ToSchema QuestionnaireCreation +instance ToSchema ProjectCreation -instance ToSchema TenantConfigQuestionnaireProjectTagging where - declareNamedSchema = toSwagger defaultQuestionnaireProjectTagging +instance ToSchema TenantConfigProjectProjectTagging where + declareNamedSchema = toSwagger defaultProjectProjectTagging -instance ToSchema TenantConfigQuestionnaireFeedback where +instance ToSchema TenantConfigProjectFeedback where declareNamedSchema = toSwagger defaultFeedback instance ToSchema TenantConfigSubmission where diff --git a/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestDTO.hs b/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestDTO.hs index 35dc8020c..1da75258a 100644 --- a/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestDTO.hs @@ -16,7 +16,7 @@ data TypeHintLegacyRequestDTO = TypeHintLegacyRequestDTO data TypeHintRequestDTO = KnowledgeModelEditorIntegrationTypeHintRequest' KnowledgeModelEditorIntegrationTypeHintRequest | KnowledgeModelEditorQuestionTypeHintRequest' KnowledgeModelEditorQuestionTypeHintRequest - | QuestionnaireTypeHintRequest' QuestionnaireTypeHintRequest + | ProjectTypeHintRequest' ProjectTypeHintRequest deriving (Show, Eq, Generic) data KnowledgeModelEditorIntegrationTypeHintRequest = KnowledgeModelEditorIntegrationTypeHintRequest @@ -32,8 +32,8 @@ data KnowledgeModelEditorQuestionTypeHintRequest = KnowledgeModelEditorQuestionT } deriving (Show, Eq, Generic) -data QuestionnaireTypeHintRequest = QuestionnaireTypeHintRequest - { questionnaireUuid :: U.UUID +data ProjectTypeHintRequest = ProjectTypeHintRequest + { projectUuid :: U.UUID , questionUuid :: U.UUID , q :: String } diff --git a/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestJM.hs b/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestJM.hs index 1caa8762d..78f8ad1c0 100644 --- a/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestJM.hs @@ -22,7 +22,7 @@ instance FromJSON TypeHintRequestDTO where case requestType of "KnowledgeModelEditorIntegrationTypeHintRequest" -> parseJSON (Object o) >>= \v -> return (KnowledgeModelEditorIntegrationTypeHintRequest' v) "KnowledgeModelEditorQuestionTypeHintRequest" -> parseJSON (Object o) >>= \v -> return (KnowledgeModelEditorQuestionTypeHintRequest' v) - "QuestionnaireTypeHintRequest" -> parseJSON (Object o) >>= \v -> return (QuestionnaireTypeHintRequest' v) + "ProjectTypeHintRequest" -> parseJSON (Object o) >>= \v -> return (ProjectTypeHintRequest' v) _ -> fail "One of the integrations has unsupported requestType" parseJSON _ = mzero @@ -38,8 +38,8 @@ instance FromJSON KnowledgeModelEditorQuestionTypeHintRequest where instance ToJSON KnowledgeModelEditorQuestionTypeHintRequest where toJSON = genericToJSON (jsonOptionsWithTypeField "requestType") -instance FromJSON QuestionnaireTypeHintRequest where +instance FromJSON ProjectTypeHintRequest where parseJSON = genericParseJSON (jsonOptionsWithTypeField "requestType") -instance ToJSON QuestionnaireTypeHintRequest where +instance ToJSON ProjectTypeHintRequest where toJSON = genericToJSON (jsonOptionsWithTypeField "requestType") diff --git a/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestSM.hs b/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestSM.hs index d139679ec..083e2b84c 100644 --- a/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/TypeHint/TypeHintRequestSM.hs @@ -12,7 +12,7 @@ instance ToSchema TypeHintLegacyRequestDTO where declareNamedSchema = toSwagger typeHintLegacyRequest instance ToSchema TypeHintRequestDTO where - declareNamedSchema = toSwaggerWithType "requestType" questionnaireTypeHintRequest + declareNamedSchema = toSwaggerWithType "requestType" projectTypeHintRequest instance ToSchema KnowledgeModelEditorIntegrationTypeHintRequest where declareNamedSchema = toSwaggerWithType "requestType" kmEditorIntegrationTypeHintRequest' @@ -20,5 +20,5 @@ instance ToSchema KnowledgeModelEditorIntegrationTypeHintRequest where instance ToSchema KnowledgeModelEditorQuestionTypeHintRequest where declareNamedSchema = toSwaggerWithType "requestType" kmEditorQuestionTypeHintRequest' -instance ToSchema QuestionnaireTypeHintRequest where - declareNamedSchema = toSwaggerWithType "requestType" questionnaireTypeHintRequest' +instance ToSchema ProjectTypeHintRequest where + declareNamedSchema = toSwaggerWithType "requestType" projectTypeHintRequest' diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionDTO.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageDTO.hs similarity index 56% rename from wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionDTO.hs rename to wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageDTO.hs index 758e3309a..45e596a45 100644 --- a/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionDTO.hs +++ b/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageDTO.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO where +module Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO where import GHC.Generics @@ -6,23 +6,23 @@ import Wizard.Api.Resource.KnowledgeModel.Editor.Event.KnowledgeModelEditorWebSo import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesDTO import Wizard.Model.User.OnlineUserInfo -data ClientKnowledgeModelEditorActionDTO - = SetContent_ClientKnowledgeModelEditorActionDTO +data ClientKnowledgeModelEditorMessageDTO + = SetContent_ClientKnowledgeModelEditorMessageDTO { scData :: KnowledgeModelEditorWebSocketEventDTO } - | SetReplies_ClientKnowledgeModelEditorActionDTO + | SetReplies_ClientKnowledgeModelEditorMessageDTO { srData :: SetRepliesDTO } deriving (Show, Generic) -data ServerKnowledgeModelEditorActionDTO - = SetUserList_ServerKnowledgeModelEditorActionDTO +data ServerKnowledgeModelEditorMessageDTO + = SetUserList_ServerKnowledgeModelEditorMessageDTO { seData :: [OnlineUserInfo] } - | SetContent_ServerKnowledgeModelEditorActionDTO + | SetContent_ServerKnowledgeModelEditorMessageDTO { scData :: KnowledgeModelEditorWebSocketEventDTO } - | SetReplies_ServerKnowledgeModelEditorActionDTO + | SetReplies_ServerKnowledgeModelEditorMessageDTO { srData :: SetRepliesDTO } deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionJM.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageJM.hs similarity index 57% rename from wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionJM.hs rename to wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageJM.hs index d41734f14..1ee1e41a0 100644 --- a/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionJM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageJM.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionJM where +module Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageJM where import Data.Aeson @@ -6,16 +6,16 @@ import Shared.Common.Util.Aeson import Wizard.Api.Resource.KnowledgeModel.Editor.Event.KnowledgeModelEditorWebSocketEventJM () import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesJM () import Wizard.Api.Resource.User.OnlineUserInfoJM () -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO -instance FromJSON ClientKnowledgeModelEditorActionDTO where +instance FromJSON ClientKnowledgeModelEditorMessageDTO where parseJSON = genericParseJSON (jsonOptionsWithTypeField "type") -instance ToJSON ClientKnowledgeModelEditorActionDTO where +instance ToJSON ClientKnowledgeModelEditorMessageDTO where toJSON = genericToJSON (jsonOptionsWithTypeField "type") -instance FromJSON ServerKnowledgeModelEditorActionDTO where +instance FromJSON ServerKnowledgeModelEditorMessageDTO where parseJSON = genericParseJSON (jsonOptionsWithTypeField "type") -instance ToJSON ServerKnowledgeModelEditorActionDTO where +instance ToJSON ServerKnowledgeModelEditorMessageDTO where toJSON = genericToJSON (jsonOptionsWithTypeField "type") diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionSM.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageSM.hs similarity index 54% rename from wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionSM.hs rename to wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageSM.hs index 38082dc55..307e7a8b2 100644 --- a/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorActionSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Websocket/KnowledgeModelEditorMessageSM.hs @@ -1,4 +1,4 @@ -module Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionSM where +module Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageSM where import Data.Swagger @@ -6,12 +6,12 @@ import Shared.Common.Util.Swagger import Wizard.Api.Resource.KnowledgeModel.Editor.Event.KnowledgeModelEditorWebSocketEventSM () import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesSM () import Wizard.Api.Resource.User.OnlineUserInfoSM () -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionJM () -import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorActions +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageJM () +import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorMessages -instance ToSchema ClientKnowledgeModelEditorActionDTO where +instance ToSchema ClientKnowledgeModelEditorMessageDTO where declareNamedSchema = toSwagger ensureOnlineUserAction -instance ToSchema ServerKnowledgeModelEditorActionDTO where +instance ToSchema ServerKnowledgeModelEditorMessageDTO where declareNamedSchema = toSwagger setUserListAction diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageDTO.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageDTO.hs new file mode 100644 index 000000000..4270a7bcc --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageDTO.hs @@ -0,0 +1,29 @@ +module Wizard.Api.Resource.Websocket.ProjectMessageDTO where + +import GHC.Generics + +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.User.OnlineUserInfo + +data ClientProjectMessageDTO = SetContent_ClientProjectMessageDTO + { aData :: ProjectEventChangeDTO + } + deriving (Show, Generic) + +data ServerProjectMessageDTO + = SetUserList_ServerProjectMessageDTO + { ouiData :: [OnlineUserInfo] + } + | SetContent_ServerProjectMessageDTO + { qeData :: ProjectEventDTO + } + | SetProject_ServerProjectMessageDTO + { sqData :: ProjectDetailWsDTO + } + | AddFile_ServerProjectMessageDTO + { adData :: ProjectFileSimple + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageJM.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageJM.hs new file mode 100644 index 000000000..b90a28d9a --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageJM.hs @@ -0,0 +1,24 @@ +module Wizard.Api.Resource.Websocket.ProjectMessageJM where + +import Data.Aeson + +import Shared.Common.Util.Aeson +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsJM () +import Wizard.Api.Resource.Project.Event.ProjectEventChangeJM () +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Api.Resource.Project.File.ProjectFileSimpleJM () +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Api.Resource.User.OnlineUserInfoJM () +import Wizard.Api.Resource.Websocket.ProjectMessageDTO + +instance FromJSON ClientProjectMessageDTO where + parseJSON = genericParseJSON (jsonOptionsWithTypeField "type") + +instance ToJSON ClientProjectMessageDTO where + toJSON = genericToJSON (jsonOptionsWithTypeField "type") + +instance FromJSON ServerProjectMessageDTO where + parseJSON = genericParseJSON (jsonOptionsWithTypeField "type") + +instance ToJSON ServerProjectMessageDTO where + toJSON = genericToJSON (jsonOptionsWithTypeField "type") diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageSM.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageSM.hs new file mode 100644 index 000000000..261342acf --- /dev/null +++ b/wizard-server/src/Wizard/Api/Resource/Websocket/ProjectMessageSM.hs @@ -0,0 +1,20 @@ +module Wizard.Api.Resource.Websocket.ProjectMessageSM where + +import Data.Swagger + +import Shared.Common.Util.Swagger +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsSM () +import Wizard.Api.Resource.Project.Event.ProjectEventChangeSM () +import Wizard.Api.Resource.Project.Event.ProjectEventSM () +import Wizard.Api.Resource.Project.File.ProjectFileSimpleSM () +import Wizard.Api.Resource.Project.ProjectReplySM () +import Wizard.Api.Resource.User.OnlineUserInfoSM () +import Wizard.Api.Resource.Websocket.ProjectMessageDTO +import Wizard.Api.Resource.Websocket.ProjectMessageJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectMessages + +instance ToSchema ClientProjectMessageDTO where + declareNamedSchema = toSwagger ensureOnlineUserAction + +instance ToSchema ServerProjectMessageDTO where + declareNamedSchema = toSwagger setUserListAction diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionDTO.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionDTO.hs deleted file mode 100644 index 3f2e30d87..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionDTO.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Api.Resource.Websocket.QuestionnaireActionDTO where - -import GHC.Generics - -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import Wizard.Model.User.OnlineUserInfo - -data ClientQuestionnaireActionDTO = SetContent_ClientQuestionnaireActionDTO - { aData :: QuestionnaireEventChangeDTO - } - deriving (Show, Generic) - -data ServerQuestionnaireActionDTO - = SetUserList_ServerQuestionnaireActionDTO - { ouiData :: [OnlineUserInfo] - } - | SetContent_ServerQuestionnaireActionDTO - { qeData :: QuestionnaireEventDTO - } - | SetQuestionnaire_ServerQuestionnaireActionDTO - { sqData :: QuestionnaireDetailWsDTO - } - | AddFile_ServerQuestionnaireActionDTO - { adData :: QuestionnaireFileSimple - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionJM.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionJM.hs deleted file mode 100644 index a84f31dcf..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionJM.hs +++ /dev/null @@ -1,24 +0,0 @@ -module Wizard.Api.Resource.Websocket.QuestionnaireActionJM where - -import Data.Aeson - -import Shared.Common.Util.Aeson -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeJM () -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Api.Resource.User.OnlineUserInfoJM () -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO - -instance FromJSON ClientQuestionnaireActionDTO where - parseJSON = genericParseJSON (jsonOptionsWithTypeField "type") - -instance ToJSON ClientQuestionnaireActionDTO where - toJSON = genericToJSON (jsonOptionsWithTypeField "type") - -instance FromJSON ServerQuestionnaireActionDTO where - parseJSON = genericParseJSON (jsonOptionsWithTypeField "type") - -instance ToJSON ServerQuestionnaireActionDTO where - toJSON = genericToJSON (jsonOptionsWithTypeField "type") diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionSM.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionSM.hs deleted file mode 100644 index a201f8a2f..000000000 --- a/wizard-server/src/Wizard/Api/Resource/Websocket/QuestionnaireActionSM.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Wizard.Api.Resource.Websocket.QuestionnaireActionSM where - -import Data.Swagger - -import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeSM () -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventSM () -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsSM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplySM () -import Wizard.Api.Resource.User.OnlineUserInfoSM () -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO -import Wizard.Api.Resource.Websocket.QuestionnaireActionJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireActions - -instance ToSchema ClientQuestionnaireActionDTO where - declareNamedSchema = toSwagger ensureOnlineUserAction - -instance ToSchema ServerQuestionnaireActionDTO where - declareNamedSchema = toSwagger setUserListAction diff --git a/wizard-server/src/Wizard/Api/Resource/Websocket/WebsocketActionSM.hs b/wizard-server/src/Wizard/Api/Resource/Websocket/WebsocketActionSM.hs index f9c17ed33..2c7a7a72f 100644 --- a/wizard-server/src/Wizard/Api/Resource/Websocket/WebsocketActionSM.hs +++ b/wizard-server/src/Wizard/Api/Resource/Websocket/WebsocketActionSM.hs @@ -3,10 +3,10 @@ module Wizard.Api.Resource.Websocket.WebsocketActionSM where import Data.Swagger import Shared.Common.Util.Swagger -import Wizard.Api.Resource.Websocket.QuestionnaireActionSM () +import Wizard.Api.Resource.Websocket.ProjectMessageSM () import Wizard.Api.Resource.Websocket.WebsocketActionDTO import Wizard.Api.Resource.Websocket.WebsocketActionJM () -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireActions +import Wizard.Database.Migration.Development.Project.Data.ProjectMessages instance ToSchema resDto => ToSchema (Success_ServerActionDTO resDto) where declareNamedSchema = toSwagger (Success_ServerActionDTO ensureOnlineUserAction) diff --git a/wizard-server/src/Wizard/Cache/CacheFactory.hs b/wizard-server/src/Wizard/Cache/CacheFactory.hs index d5ff1d03b..c93ad2606 100644 --- a/wizard-server/src/Wizard/Cache/CacheFactory.hs +++ b/wizard-server/src/Wizard/Cache/CacheFactory.hs @@ -8,7 +8,7 @@ import Wizard.Model.Cache.ServerCache createServerCache serverConfig = do let [dataExp, websocketExp] = fmap (Just . fromHoursToTimeSpec) [serverConfig.cache.dataExpiration, serverConfig.cache.websocketExpiration] knowledgeModelEditorWebsocket <- C.newCache websocketExp - questionnaireWebsocket <- C.newCache websocketExp + projectWebsocket <- C.newCache websocketExp user <- C.newCache dataExp userToken <- C.newCache dataExp return ServerCache {..} diff --git a/wizard-server/src/Wizard/Cache/CacheUtil.hs b/wizard-server/src/Wizard/Cache/CacheUtil.hs index 5f443c9db..81b1239c2 100644 --- a/wizard-server/src/Wizard/Cache/CacheUtil.hs +++ b/wizard-server/src/Wizard/Cache/CacheUtil.hs @@ -16,7 +16,7 @@ purgeCache :: AppContextM () purgeCache = do cache <- asks cache liftIO . C.purge $ cache.knowledgeModelEditorWebsocket - liftIO . C.purge $ cache.questionnaireWebsocket + liftIO . C.purge $ cache.projectWebsocket liftIO . C.purge $ cache.user liftIO . C.purge $ cache.userToken @@ -24,7 +24,7 @@ purgeExpiredCache :: AppContextM () purgeExpiredCache = do cache <- asks cache liftIO . C.purgeExpired $ cache.knowledgeModelEditorWebsocket - liftIO . C.purgeExpired $ cache.questionnaireWebsocket + liftIO . C.purgeExpired $ cache.projectWebsocket liftIO . C.purgeExpired $ cache.user liftIO . C.purgeExpired $ cache.userToken diff --git a/wizard-server/src/Wizard/Cache/QuestionnaireWebsocketCache.hs b/wizard-server/src/Wizard/Cache/ProjectWebsocketCache.hs similarity index 80% rename from wizard-server/src/Wizard/Cache/QuestionnaireWebsocketCache.hs rename to wizard-server/src/Wizard/Cache/ProjectWebsocketCache.hs index 1787b7652..e5b3108e2 100644 --- a/wizard-server/src/Wizard/Cache/QuestionnaireWebsocketCache.hs +++ b/wizard-server/src/Wizard/Cache/ProjectWebsocketCache.hs @@ -1,4 +1,4 @@ -module Wizard.Cache.QuestionnaireWebsocketCache where +module Wizard.Cache.ProjectWebsocketCache where import Control.Monad.Except (throwError) import Control.Monad.Reader (asks, liftIO) @@ -15,7 +15,7 @@ import Wizard.Model.Context.ContextLenses () import Wizard.Model.Websocket.WebsocketRecord import WizardLib.Public.Service.Cache.Common -cacheName = "Questionnaire Websocket" +cacheName = "Project Websocket" cacheKey connectionUuid = f' "connection: '%s'" [U.toString connectionUuid] @@ -23,23 +23,23 @@ addToCache :: WebsocketRecord -> AppContextM () addToCache record = do let key = cacheKey record.connectionUuid logCacheAddBefore cacheName key - qwCache <- getCache - liftIO $ C.insert qwCache (H.hash key) record + projectCache <- getCache + liftIO $ C.insert projectCache (H.hash key) record logCacheAddAfter cacheName key return () getAllFromCache :: AppContextM [WebsocketRecord] getAllFromCache = do - qwCache <- getCache - records <- liftIO $ C.toList qwCache + projectCache <- getCache + records <- liftIO $ C.toList projectCache return . fmap (\(_, v, _) -> v) $ records getFromCache :: U.UUID -> AppContextM (Maybe WebsocketRecord) getFromCache connectionUuid = do let key = cacheKey connectionUuid logCacheGetBefore cacheName key - qwCache <- getCache - mValue <- liftIO $ C.lookup qwCache (H.hash key) + projectCache <- getCache + mValue <- liftIO $ C.lookup projectCache (H.hash key) case mValue of Just value -> do logCacheGetFound cacheName key @@ -52,8 +52,8 @@ updateCache :: WebsocketRecord -> AppContextM () updateCache record = do let key = cacheKey record.connectionUuid logCacheModifyBefore cacheName key - qwCache <- getCache - liftIO $ C.insert qwCache (H.hash key) record + projectCache <- getCache + liftIO $ C.insert projectCache (H.hash key) record logCacheModifyAfter cacheName key return () @@ -68,8 +68,8 @@ deleteFromCache :: U.UUID -> AppContextM () deleteFromCache connectionUuid = do let key = cacheKey connectionUuid logCacheDeleteBefore cacheName key - qwCache <- getCache - liftIO $ C.delete qwCache (H.hash key) + projectCache <- getCache + liftIO $ C.delete projectCache (H.hash key) logCacheDeleteFinished cacheName key countCache :: AppContextM Int @@ -80,4 +80,4 @@ countCache = do getCache :: AppContextM (C.Cache Int WebsocketRecord) getCache = do cache <- asks cache - return $ cache.questionnaireWebsocket + return $ cache.projectWebsocket diff --git a/wizard-server/src/Wizard/Constant/Acl.hs b/wizard-server/src/Wizard/Constant/Acl.hs index 2a120cef4..585e38df8 100644 --- a/wizard-server/src/Wizard/Constant/Acl.hs +++ b/wizard-server/src/Wizard/Constant/Acl.hs @@ -6,11 +6,11 @@ module Wizard.Constant.Acl ( _KM_PUBLISH_PERM, _PM_READ_PERM, _PM_WRITE_PERM, - _QTN_PERM, - _QTN_FILE_PERM, - _QTN_TML_PERM, - _QTN_ACTION_PERM, - _QTN_IMPORTER_PERM, + _PRJ_PERM, + _PRJ_FILE_PERM, + _PRJ_TML_PERM, + _PRJ_ACTION_PERM, + _PRJ_IMPORTER_PERM, _SUBM_PERM, _DOC_TML_READ_PERM, _DOC_TML_WRITE_PERM, @@ -32,15 +32,15 @@ _PM_READ_PERM = "PM_READ_PERM" _PM_WRITE_PERM = "PM_WRITE_PERM" -_QTN_PERM = "QTN_PERM" +_PRJ_PERM = "PRJ_PERM" -_QTN_FILE_PERM = "QTN_FILE_PERM" +_PRJ_FILE_PERM = "PRJ_FILE_PERM" -_QTN_TML_PERM = "QTN_TML_PERM" +_PRJ_TML_PERM = "PRJ_TML_PERM" -_QTN_ACTION_PERM = "QTN_ACTION_PERM" +_PRJ_ACTION_PERM = "PRJ_ACTION_PERM" -_QTN_IMPORTER_PERM = "QTN_IMPORTER_PERM" +_PRJ_IMPORTER_PERM = "PRJ_IMPORTER_PERM" _SUBM_PERM = "SUBM_PERM" diff --git a/wizard-server/src/Wizard/Constant/ProjectAction.hs b/wizard-server/src/Wizard/Constant/ProjectAction.hs new file mode 100644 index 000000000..833b99c2c --- /dev/null +++ b/wizard-server/src/Wizard/Constant/ProjectAction.hs @@ -0,0 +1,4 @@ +module Wizard.Constant.ProjectAction where + +projectActionMetamodelVersion :: Int +projectActionMetamodelVersion = 1 diff --git a/wizard-server/src/Wizard/Constant/ProjectImporter.hs b/wizard-server/src/Wizard/Constant/ProjectImporter.hs new file mode 100644 index 000000000..fc342aab0 --- /dev/null +++ b/wizard-server/src/Wizard/Constant/ProjectImporter.hs @@ -0,0 +1,4 @@ +module Wizard.Constant.ProjectImporter where + +projectImporterMetamodelVersion :: Int +projectImporterMetamodelVersion = 1 diff --git a/wizard-server/src/Wizard/Constant/QuestionnaireAction.hs b/wizard-server/src/Wizard/Constant/QuestionnaireAction.hs deleted file mode 100644 index c193f8a60..000000000 --- a/wizard-server/src/Wizard/Constant/QuestionnaireAction.hs +++ /dev/null @@ -1,4 +0,0 @@ -module Wizard.Constant.QuestionnaireAction where - -questionnaireActionMetamodelVersion :: Int -questionnaireActionMetamodelVersion = 1 diff --git a/wizard-server/src/Wizard/Constant/QuestionnaireImporter.hs b/wizard-server/src/Wizard/Constant/QuestionnaireImporter.hs deleted file mode 100644 index 6ac14ddc8..000000000 --- a/wizard-server/src/Wizard/Constant/QuestionnaireImporter.hs +++ /dev/null @@ -1,4 +0,0 @@ -module Wizard.Constant.QuestionnaireImporter where - -questionnaireImporterMetamodelVersion :: Int -questionnaireImporterMetamodelVersion = 1 diff --git a/wizard-server/src/Wizard/Database/DAO/Document/DocumentDAO.hs b/wizard-server/src/Wizard/Database/DAO/Document/DocumentDAO.hs index efbd61241..01648edc1 100644 --- a/wizard-server/src/Wizard/Database/DAO/Document/DocumentDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Document/DocumentDAO.hs @@ -39,23 +39,23 @@ findDocumentsForCurrentTenantFiltered params = do createFindEntitiesByFn entityName (tenantQueryUuid tenantUuid : params) findDocumentsPage :: Maybe U.UUID -> Maybe String -> Maybe String -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page DocumentList) -findDocumentsPage mQtnUuid mQtnName mDocumentTemplateId mQuery pageable sort = do +findDocumentsPage mProjectUuid mProjectName mDocumentTemplateId mQuery pageable sort = do -- 1. Prepare variables do tenantUuid <- asks currentTenantUuid let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable - let (questionnaireSelect, questionnaireSelectParams, questionnaireJoin, questionnaireCondition, questionnaireParam) = - case (mQtnUuid, mQtnName) of - (Just qtnUuid, Just qtnName) -> ("?, ", [qtnName], "", "AND doc.questionnaire_uuid = ?", [U.toString qtnUuid]) - (Just qtnUuid, Nothing) -> ("qtn.name, ", [], "LEFT JOIN questionnaire qtn ON qtn.uuid = doc.questionnaire_uuid", "AND doc.questionnaire_uuid = ?", [U.toString qtnUuid]) - _ -> ("qtn.name, ", [], "LEFT JOIN questionnaire qtn ON qtn.uuid = doc.questionnaire_uuid", "", []) + let (projectSelect, projectSelectParams, projectJoin, projectCondition, projectParam) = + case (mProjectUuid, mProjectName) of + (Just projectUuid, Just projectName) -> ("?, ", [projectName], "", "AND doc.project_uuid = ?", [U.toString projectUuid]) + (Just projectUuid, Nothing) -> ("project.name, ", [], "LEFT JOIN project ON project.uuid = doc.project_uuid", "AND doc.project_uuid = ?", [U.toString projectUuid]) + _ -> ("project.name, ", [], "LEFT JOIN project ON project.uuid = doc.project_uuid", "", []) let (documentTemplateIdCondition, documentTemplateIdParam) = case mDocumentTemplateId of Just documentTemplateId -> (" AND doc.document_template_id = ? ", [documentTemplateId]) Nothing -> ("", []) - let condition = "WHERE doc.tenant_uuid = ? AND doc.name ~* ? AND doc.durability = 'PersistentDocumentDurability' " ++ questionnaireCondition ++ documentTemplateIdCondition - let baseParams = [U.toString tenantUuid, regexM mQuery] ++ questionnaireParam ++ documentTemplateIdParam - let params = questionnaireSelectParams ++ baseParams + let condition = "WHERE doc.tenant_uuid = ? AND doc.name ~* ? AND doc.durability = 'PersistentDocumentDurability' " ++ projectCondition ++ documentTemplateIdCondition + let baseParams = [U.toString tenantUuid, regexM mQuery] ++ projectParam ++ documentTemplateIdParam + let params = projectSelectParams ++ baseParams -- 2. Get total count count <- createCountByFn "document doc" condition baseParams -- 3. Get entities @@ -65,10 +65,10 @@ findDocumentsPage mQtnUuid mQtnName mDocumentTemplateId mQuery pageable sort = d "SELECT doc.uuid, \ \ doc.name, \ \ doc.state, \ - \ doc.questionnaire_uuid, \ - \ ${questionnaireSelect} \ - \ doc.questionnaire_event_uuid, \ - \ qtn_version.name, \ + \ doc.project_uuid, \ + \ ${projectSelect} \ + \ doc.project_event_uuid, \ + \ project_version.name, \ \ doc_tml.id, \ \ doc_tml.name, \ \ ( \ @@ -84,15 +84,15 @@ findDocumentsPage mQtnUuid mQtnName mDocumentTemplateId mQuery pageable sort = d \ doc.created_by, \ \ doc.created_at \ \FROM document doc \ - \${questionnaireJoin} \ + \${projectJoin} \ \LEFT JOIN document_template doc_tml ON doc_tml.id = doc.document_template_id AND doc_tml.tenant_uuid = doc.tenant_uuid \ - \LEFT JOIN questionnaire_version qtn_version ON qtn_version.event_uuid = doc.questionnaire_event_uuid AND qtn_version.tenant_uuid = doc.tenant_uuid \ + \LEFT JOIN project_version ON project_version.event_uuid = doc.project_event_uuid AND project_version.tenant_uuid = doc.tenant_uuid \ \${condition} \ \${sort} \ \OFFSET ${offset} \ \LIMIT ${limit}" - [ ("questionnaireSelect", questionnaireSelect) - , ("questionnaireJoin", questionnaireJoin) + [ ("projectSelect", projectSelect) + , ("projectJoin", projectJoin) , ("condition", condition) , ("sort", mapSortWithPrefix "doc" sort) , ("offset", show skip) @@ -156,11 +156,11 @@ deleteDocumentByUuid uuid = do deleteDocumentByUuidAndTenantUuid :: U.UUID -> U.UUID -> AppContextM Int64 deleteDocumentByUuidAndTenantUuid uuid tenantUuid = createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] -deleteTemporalDocumentsByQuestionnaireUuid :: U.UUID -> AppContextM Int64 -deleteTemporalDocumentsByQuestionnaireUuid qtnUuid = do +deleteTemporalDocumentsByProjectUuid :: U.UUID -> AppContextM Int64 +deleteTemporalDocumentsByProjectUuid projectUuid = do tenantUuid <- asks currentTenantUuid deleteDocumentsFiltered - [tenantQueryUuid tenantUuid, ("questionnaire_uuid", U.toString qtnUuid), ("durability", "TemporallyDocumentDurability")] + [tenantQueryUuid tenantUuid, ("project_uuid", U.toString projectUuid), ("durability", "TemporallyDocumentDurability")] deleteTemporalDocumentsByDocumentTemplateId :: String -> AppContextM Int64 deleteTemporalDocumentsByDocumentTemplateId documentTemplateId = do diff --git a/wizard-server/src/Wizard/Database/DAO/DocumentTemplate/DocumentTemplateDraftDataDAO.hs b/wizard-server/src/Wizard/Database/DAO/DocumentTemplate/DocumentTemplateDraftDataDAO.hs index 6028e03d2..c47a43310 100644 --- a/wizard-server/src/Wizard/Database/DAO/DocumentTemplate/DocumentTemplateDraftDataDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/DocumentTemplate/DocumentTemplateDraftDataDAO.hs @@ -28,7 +28,7 @@ updateDraftDataById draftData = do tenantUuid <- asks currentTenantUuid let sql = fromString - "UPDATE document_template_draft_data SET document_template_id = ?, questionnaire_uuid = ?, format_uuid = ?, tenant_uuid = ?, created_at = ?, updated_at = ?, knowledge_model_editor_uuid = ? WHERE tenant_uuid = ? AND document_template_id = ?" + "UPDATE document_template_draft_data SET document_template_id = ?, project_uuid = ?, format_uuid = ?, tenant_uuid = ?, created_at = ?, updated_at = ?, knowledge_model_editor_uuid = ? WHERE tenant_uuid = ? AND document_template_id = ?" let params = toRow draftData ++ [toField draftData.tenantUuid, toField draftData.documentTemplateId] logQuery sql params let action conn = execute conn sql params diff --git a/wizard-server/src/Wizard/Database/DAO/KnowledgeModel/KnowledgeModelMigrationDAO.hs b/wizard-server/src/Wizard/Database/DAO/KnowledgeModel/KnowledgeModelMigrationDAO.hs index 1e8408aaf..6b3f549d9 100644 --- a/wizard-server/src/Wizard/Database/DAO/KnowledgeModel/KnowledgeModelMigrationDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/KnowledgeModel/KnowledgeModelMigrationDAO.hs @@ -16,26 +16,26 @@ import Wizard.Model.KnowledgeModel.Migration.KnowledgeModelMigration entityName = "knowledge_model_migration" -findMigratorStates :: AppContextM [KnowledgeModelMigration] -findMigratorStates = do +findKnowledgeModelMigrations :: AppContextM [KnowledgeModelMigration] +findKnowledgeModelMigrations = do tenantUuid <- asks currentTenantUuid createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid] -findMigratorStateByEditorUuid :: U.UUID -> AppContextM KnowledgeModelMigration -findMigratorStateByEditorUuid editorUuid = do +findKnowledgeModelMigrationByEditorUuid :: U.UUID -> AppContextM KnowledgeModelMigration +findKnowledgeModelMigrationByEditorUuid editorUuid = do tenantUuid <- asks currentTenantUuid createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("editor_uuid", U.toString editorUuid)] -findMigratorStateByEditorUuid' :: U.UUID -> AppContextM (Maybe KnowledgeModelMigration) -findMigratorStateByEditorUuid' editorUuid = do +findKnowledgeModelMigrationByEditorUuid' :: U.UUID -> AppContextM (Maybe KnowledgeModelMigration) +findKnowledgeModelMigrationByEditorUuid' editorUuid = do tenantUuid <- asks currentTenantUuid createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("editor_uuid", U.toString editorUuid)] -insertMigratorState :: KnowledgeModelMigration -> AppContextM Int64 -insertMigratorState = createInsertFn entityName +insertKnowledgeModelMigration :: KnowledgeModelMigration -> AppContextM Int64 +insertKnowledgeModelMigration = createInsertFn entityName -updateMigratorState :: KnowledgeModelMigration -> AppContextM Int64 -updateMigratorState migration = do +updateKnowledgeModelMigration :: KnowledgeModelMigration -> AppContextM Int64 +updateKnowledgeModelMigration migration = do let sql = fromString "UPDATE knowledge_model_migration SET editor_uuid = ?, metamodel_version = ?, state = ?, editor_previous_package_id = ?, target_package_id = ?, editor_previous_package_events = ?, target_package_events = ?, result_events = ?, current_knowledge_model = ?, tenant_uuid = ?, created_at = ? WHERE tenant_uuid = ? AND editor_uuid = ?" @@ -44,10 +44,10 @@ updateMigratorState migration = do let action conn = execute conn sql params runDB action -deleteMigratorStates :: AppContextM Int64 -deleteMigratorStates = createDeleteEntitiesFn entityName +deleteKnowledgeModelMigrations :: AppContextM Int64 +deleteKnowledgeModelMigrations = createDeleteEntitiesFn entityName -deleteMigratorStateByEditorUuid :: U.UUID -> AppContextM Int64 -deleteMigratorStateByEditorUuid editorUuid = do +deleteKnowledgeModelMigrationByEditorUuid :: U.UUID -> AppContextM Int64 +deleteKnowledgeModelMigrationByEditorUuid editorUuid = do tenantUuid <- asks currentTenantUuid createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("editor_uuid", U.toString editorUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/QuestionnaireAction/QuestionnaireActionDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectActionDAO.hs similarity index 74% rename from wizard-server/src/Wizard/Database/DAO/QuestionnaireAction/QuestionnaireActionDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Project/ProjectActionDAO.hs index 723ee604f..2c5b3cb81 100644 --- a/wizard-server/src/Wizard/Database/DAO/QuestionnaireAction/QuestionnaireActionDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectActionDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.QuestionnaireAction.QuestionnaireActionDAO where +module Wizard.Database.DAO.Project.ProjectActionDAO where import Control.Monad.Reader (asks) import Data.String (fromString) @@ -15,24 +15,24 @@ import Shared.Common.Model.Common.PageMetadata import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Common.Sort import Shared.Common.Util.Logger -import Wizard.Database.Mapping.QuestionnaireAction.QuestionnaireAction () +import Wizard.Database.Mapping.Project.Action.ProjectAction () import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () -import Wizard.Model.QuestionnaireAction.QuestionnaireAction +import Wizard.Model.Project.Action.ProjectAction -entityName = "questionnaire_action" +entityName = "project_action" -pageLabel = "questionnaireActions" +pageLabel = "projectActions" -findQuestionnaireActionsPage +findProjectActionsPage :: Maybe String -> Maybe String -> Maybe String -> Maybe Bool -> Pageable -> [Sort] - -> AppContextM (Page QuestionnaireAction) -findQuestionnaireActionsPage mOrganizationId mImporterId mQuery mEnabled pageable sort = + -> AppContextM (Page ProjectAction) +findProjectActionsPage mOrganizationId mImporterId mQuery mEnabled pageable sort = createFindEntitiesGroupByCoordinatePageableQuerySortFn entityName pageLabel @@ -45,41 +45,41 @@ findQuestionnaireActionsPage mOrganizationId mImporterId mQuery mEnabled pageabl mOrganizationId mImporterId -findQuestionnaireActionById :: String -> AppContextM QuestionnaireAction -findQuestionnaireActionById qaId = do +findProjectActionById :: String -> AppContextM ProjectAction +findProjectActionById paId = do tenantUuid <- asks currentTenantUuid - createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", qaId)] + createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", paId)] -insertQuestionnaireAction :: QuestionnaireAction -> AppContextM Int64 -insertQuestionnaireAction = createInsertFn entityName +insertProjectAction :: ProjectAction -> AppContextM Int64 +insertProjectAction = createInsertFn entityName -updateQuestionnaireActionById :: QuestionnaireAction -> AppContextM Int64 -updateQuestionnaireActionById importer = do +updateProjectActionById :: ProjectAction -> AppContextM Int64 +updateProjectActionById importer = do tenantUuid <- asks currentTenantUuid let sql = fromString - "UPDATE questionnaire_action SET id = ?, name = ?, organization_id = ?, action_id = ?, version = ?, metamodel_version = ?, description = ?, readme = ?, license = ?, allowed_packages = ?, url = ?, config = ?, enabled = ?, tenant_uuid = ?, created_at = ?, updated_at = ? WHERE tenant_uuid = ? AND id = ?" - let params = toRow importer ++ [toField tenantUuid, toField importer.qaId] + "UPDATE project_action SET id = ?, name = ?, organization_id = ?, action_id = ?, version = ?, metamodel_version = ?, description = ?, readme = ?, license = ?, allowed_packages = ?, url = ?, config = ?, enabled = ?, tenant_uuid = ?, created_at = ?, updated_at = ? WHERE tenant_uuid = ? AND id = ?" + let params = toRow importer ++ [toField tenantUuid, toField importer.paId] logQuery sql params let action conn = execute conn sql params runDB action -updateQuestionnaireActionPasswordById :: String -> Bool -> UTCTime -> AppContextM Int64 -updateQuestionnaireActionPasswordById qaId enabled uUpdatedAt = do +updateProjectActionPasswordById :: String -> Bool -> UTCTime -> AppContextM Int64 +updateProjectActionPasswordById paId enabled uUpdatedAt = do tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire_action SET enabled = ?, updated_at = ? WHERE tenant_uuid = ? AND uuid = ?" - let params = [toField enabled, toField uUpdatedAt, toField tenantUuid, toField qaId] + let sql = fromString "UPDATE project_action SET enabled = ?, updated_at = ? WHERE tenant_uuid = ? AND uuid = ?" + let params = [toField enabled, toField uUpdatedAt, toField tenantUuid, toField paId] logQuery sql params let action conn = execute conn sql params runDB action -deleteQuestionnaireActions :: AppContextM Int64 -deleteQuestionnaireActions = createDeleteEntitiesFn entityName +deleteProjectActions :: AppContextM Int64 +deleteProjectActions = createDeleteEntitiesFn entityName -deleteQuestionnaireActionById :: String -> AppContextM Int64 -deleteQuestionnaireActionById qaId = do +deleteProjectActionById :: String -> AppContextM Int64 +deleteProjectActionById paId = do tenantUuid <- asks currentTenantUuid - createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", qaId)] + createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", paId)] -- -------------------------------- -- PRIVATE diff --git a/wizard-server/src/Wizard/Database/DAO/Project/ProjectCommentDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectCommentDAO.hs new file mode 100644 index 000000000..7bbacac77 --- /dev/null +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectCommentDAO.hs @@ -0,0 +1,87 @@ +module Wizard.Database.DAO.Project.ProjectCommentDAO where + +import Control.Monad.Reader (asks, liftIO) +import Data.String +import Data.Time +import qualified Data.UUID as U +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.ToField +import Database.PostgreSQL.Simple.ToRow +import GHC.Int + +import Shared.Common.Util.String +import Wizard.Database.DAO.Common +import Wizard.Database.Mapping.Project.Comment.ProjectComment () +import Wizard.Database.Mapping.Project.Comment.ProjectCommentThread () +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () +import Wizard.Model.Project.Comment.ProjectComment + +entityName = "project_comment" + +insertProjectComment :: ProjectComment -> AppContextM Int64 +insertProjectComment = createInsertFn entityName + +insertProjectThreadAndComment :: ProjectCommentThread -> ProjectComment -> AppContextM Int64 +insertProjectThreadAndComment thread comment = do + let sql = + fromString $ + f' + "BEGIN TRANSACTION; \ + \INSERT INTO %s VALUES (%s); \ + \INSERT INTO %s VALUES (%s); \ + \COMMIT;" + ["project_comment_thread", generateQuestionMarks' thread, entityName, generateQuestionMarks' comment] + let params = toRow thread ++ toRow comment + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + +insertProjectThreadAndComment' :: ProjectCommentThread -> ProjectComment -> AppContextM Int64 +insertProjectThreadAndComment' thread comment = do + let sql = + fromString $ + f' + "INSERT INTO %s VALUES (%s); \ + \INSERT INTO %s VALUES (%s); " + ["project_comment_thread", generateQuestionMarks' thread, entityName, generateQuestionMarks' comment] + let params = toRow thread ++ toRow comment + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + +updateProjectCommentById :: ProjectComment -> AppContextM ProjectComment +updateProjectCommentById entity = do + tenantUuid <- asks currentTenantUuid + now <- liftIO getCurrentTime + let updatedEntity = entity {updatedAt = now} :: ProjectComment + let sql = + fromString + "UPDATE project_comment SET uuid = ?, text = ?, created_by = ?, created_at = ?, updated_at = ?, tenant_uuid = ? WHERE uuid = ? AND tenant_uuid = ?" + let params = toRow updatedEntity ++ [toField updatedEntity.uuid, toField tenantUuid] + logQuery sql params + let action conn = execute conn sql params + runDB action + return updatedEntity + +updateProjectCommentTextById :: U.UUID -> String -> AppContextM Int64 +updateProjectCommentTextById uuid text = do + tenantUuid <- asks currentTenantUuid + let sql = fromString "UPDATE project_comment SET text = ?, updated_at = now() WHERE uuid = ? AND tenant_uuid = ?" + let params = [toField text, toField uuid, toField tenantUuid] + logQuery sql params + let action conn = execute conn sql params + runDB action + +deleteProjectComments :: AppContextM Int64 +deleteProjectComments = createDeleteEntitiesFn entityName + +deleteProjectCommentsByThreadUuid :: U.UUID -> AppContextM Int64 +deleteProjectCommentsByThreadUuid threadUuid = do + tenantUuid <- asks currentTenantUuid + createDeleteEntityByFn entityName [("comment_thread_uuid", U.toString threadUuid), ("tenant_uuid", U.toString tenantUuid)] + +deleteProjectCommentById :: U.UUID -> AppContextM Int64 +deleteProjectCommentById uuid = do + tenantUuid <- asks currentTenantUuid + createDeleteEntityByFn entityName [("uuid", U.toString uuid), ("tenant_uuid", U.toString tenantUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireCommentThreadDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectCommentThreadDAO.hs similarity index 62% rename from wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireCommentThreadDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Project/ProjectCommentThreadDAO.hs index 2e20acc71..b6e944d75 100644 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireCommentThreadDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectCommentThreadDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO where +module Wizard.Database.DAO.Project.ProjectCommentThreadDAO where import Control.Monad.Except (throwError) import Control.Monad.Reader (asks, liftIO) @@ -22,22 +22,22 @@ import Shared.Common.Util.String import Shared.Common.Util.Uuid import Wizard.Api.Resource.User.UserDTO import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThread () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThreadAssigned () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThreadList () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThreadNotification () +import Wizard.Database.Mapping.Project.Comment.ProjectCommentThread () +import Wizard.Database.Mapping.Project.Comment.ProjectCommentThreadAssigned () +import Wizard.Database.Mapping.Project.Comment.ProjectCommentThreadList () +import Wizard.Database.Mapping.Project.Comment.ProjectCommentThreadNotification () import Wizard.Model.Context.AppContext import Wizard.Model.Context.AppContextHelpers import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadNotification +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Comment.ProjectCommentList +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import Wizard.Model.Project.Comment.ProjectCommentThreadNotification -entityName = "questionnaire_comment_thread" +entityName = "project_comment_thread" -findAssignedQuestionnaireCommentThreadsPage :: Maybe String -> Maybe U.UUID -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireCommentThreadAssigned) -findAssignedQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid mResolved pageable sort = do +findAssignedProjectCommentThreadsPage :: Maybe String -> Maybe U.UUID -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page ProjectCommentThreadAssigned) +findAssignedProjectCommentThreadsPage mQuery mProjectUuid mResolved pageable sort = do -- 1. Prepare variables currentUser <- getCurrentUser tenantUuid <- asks currentTenantUuid @@ -45,9 +45,9 @@ findAssignedQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid mResolved case mQuery of Just query -> (" AND comment.text ~* ?", [regex query]) Nothing -> ("", []) - let (questionnaireUuidCondition, questionnaireUuidParam) = - case mQuestionnaireUuid of - Just questionnaireUuid -> ("AND qtn.uuid = ?", [U.toString questionnaireUuid]) + let (projectUuidCondition, projectUuidParam) = + case mProjectUuid of + Just projectUuid -> ("AND project.uuid = ?", [U.toString projectUuid]) Nothing -> ("", []) let resolvedCondition = case mResolved of @@ -57,28 +57,28 @@ findAssignedQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid mResolved let params = [U.toString tenantUuid, U.toString currentUser.uuid] ++ qRegex - ++ questionnaireUuidParam + ++ projectUuidParam let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable -- 2. Get total count let countSql = fromString $ f'' "SELECT COUNT(DISTINCT thread.uuid) \ - \FROM questionnaire_comment_thread thread \ - \JOIN questionnaire qtn ON qtn.uuid = thread.questionnaire_uuid AND qtn.tenant_uuid = thread.tenant_uuid \ - \LEFT JOIN questionnaire_comment comment ON comment.comment_thread_uuid = thread.uuid AND comment.tenant_uuid = thread.tenant_uuid \ + \FROM project_comment_thread thread \ + \JOIN project ON project.uuid = thread.project_uuid AND project.tenant_uuid = thread.tenant_uuid \ + \LEFT JOIN project_comment comment ON comment.comment_thread_uuid = thread.uuid AND comment.tenant_uuid = thread.tenant_uuid \ \WHERE thread.tenant_uuid = ? \ \ AND thread.assigned_to = ? \ \ AND comment.uuid = (SELECT comment.uuid \ - \ FROM questionnaire_comment comment \ + \ FROM project_comment comment \ \ WHERE comment.comment_thread_uuid = thread.uuid AND comment.tenant_uuid = thread.tenant_uuid \ \ ORDER BY comment.created_at \ \ LIMIT 1) \ \ ${qCondition} \ - \ ${questionnaireUuidCondition} \ + \ ${projectUuidCondition} \ \ ${resolvedCondition}" [ ("qCondition", qCondition) - , ("questionnaireUuidCondition", questionnaireUuidCondition) + , ("projectUuidCondition", projectUuidCondition) , ("resolvedCondition", resolvedCondition) ] logQuery countSql params @@ -92,8 +92,8 @@ findAssignedQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid mResolved let sql = fromString $ f'' - "SELECT qtn.uuid, \ - \ qtn.name, \ + "SELECT project.uuid, \ + \ project.name, \ \ thread.uuid, \ \ thread.path, \ \ thread.resolved, \ @@ -105,25 +105,25 @@ findAssignedQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid mResolved \ u.last_name AS created_by_last_name, \ \ u.email AS created_by_email, \ \ u.image_url AS created_by_image_url \ - \FROM questionnaire_comment_thread thread \ - \JOIN questionnaire qtn ON qtn.uuid = thread.questionnaire_uuid AND qtn.tenant_uuid = thread.tenant_uuid \ + \FROM project_comment_thread thread \ + \JOIN project ON project.uuid = thread.project_uuid AND project.tenant_uuid = thread.tenant_uuid \ \LEFT JOIN user_entity u ON u.uuid = thread.created_by AND u.tenant_uuid = thread.tenant_uuid \ - \LEFT JOIN questionnaire_comment comment ON comment.comment_thread_uuid = thread.uuid AND comment.tenant_uuid = thread.tenant_uuid \ + \LEFT JOIN project_comment comment ON comment.comment_thread_uuid = thread.uuid AND comment.tenant_uuid = thread.tenant_uuid \ \WHERE thread.tenant_uuid = ? \ \ AND thread.assigned_to = ? \ \ AND comment.uuid = (SELECT comment.uuid \ - \ FROM questionnaire_comment comment \ + \ FROM project_comment comment \ \ WHERE comment.comment_thread_uuid = thread.uuid AND comment.tenant_uuid = thread.tenant_uuid \ \ ORDER BY comment.created_at \ \ LIMIT 1) \ \ ${qCondition} \ - \ ${questionnaireUuidCondition} \ + \ ${projectUuidCondition} \ \ ${resolvedCondition} \ \${sort} \ \OFFSET ${offset} \ \LIMIT ${limit}" [ ("qCondition", qCondition) - , ("questionnaireUuidCondition", questionnaireUuidCondition) + , ("projectUuidCondition", projectUuidCondition) , ("resolvedCondition", resolvedCondition) , ("sort", mapSort sort) , ("offset", show skip) @@ -140,27 +140,27 @@ findAssignedQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid mResolved , totalPages = computeTotalPage count sizeI , number = pageI } - return $ Page "commentThreads" metadata entities + return $ Page "projectCommentThreads" metadata entities -findQuestionnaireCommentThreads :: U.UUID -> AppContextM [QuestionnaireCommentThread] -findQuestionnaireCommentThreads qtnUuid = do +findProjectCommentThreads :: U.UUID -> AppContextM [ProjectCommentThread] +findProjectCommentThreads projectUuid = do tenantUuid <- asks currentTenantUuid let sql = fromString - "SELECT questionnaire_comment_thread.*, \ + "SELECT project_comment_thread.*, \ \ (SELECT array_agg(concat(uuid, ':::::', text, ':::::', comment_thread_uuid, ':::::', tenant_uuid, ':::::', created_by, ':::::', created_at, ':::::', updated_at)) AS comments \ - \ FROM questionnaire_comment \ - \ WHERE questionnaire_comment.comment_thread_uuid = questionnaire_comment_thread.uuid \ + \ FROM project_comment \ + \ WHERE project_comment.comment_thread_uuid = project_comment_thread.uuid \ \ GROUP BY comment_thread_uuid) AS comments \ - \FROM questionnaire_comment_thread \ - \WHERE questionnaire_uuid = ? AND tenant_uuid = ?" - let params = [toField qtnUuid, toField tenantUuid] + \FROM project_comment_thread \ + \WHERE project_uuid = ? AND tenant_uuid = ?" + let params = [toField projectUuid, toField tenantUuid] logQuery sql params let action conn = query conn sql params runDB action -findQuestionnaireCommentThreadsForQuestionnaire :: U.UUID -> Maybe String -> Maybe Bool -> Bool -> AppContextM [QuestionnaireCommentThreadList] -findQuestionnaireCommentThreadsForQuestionnaire qtnUuid mPath mResolved editor = do +findProjectCommentThreadsForProject :: U.UUID -> Maybe String -> Maybe Bool -> Bool -> AppContextM [ProjectCommentThreadList] +findProjectCommentThreadsForProject projectUuid mPath mResolved editor = do tenantUuid <- asks currentTenantUuid let (pathCondition, pathParam) = case mPath of @@ -204,14 +204,14 @@ findQuestionnaireCommentThreadsForQuestionnaire qtnUuid mPath mResolved editor = \ user_entity.email, '<:::::>', \ \ user_entity.image_url \ \ )) AS comments \ - \ FROM questionnaire_comment comment \ + \ FROM project_comment comment \ \ LEFT JOIN user_entity ON user_entity.uuid = comment.created_by \ \ WHERE comment.comment_thread_uuid = thread.uuid \ \ GROUP BY comment_thread_uuid) AS comments \ - \FROM questionnaire_comment_thread thread \ + \FROM project_comment_thread thread \ \LEFT JOIN user_entity assigned_to_user ON assigned_to_user.uuid = thread.assigned_to \ \LEFT JOIN user_entity created_by_user ON created_by_user.uuid = thread.created_by \ - \WHERE thread.questionnaire_uuid = ? \ + \WHERE thread.project_uuid = ? \ \ AND thread.tenant_uuid = ? \ \ ${pathCondition} \ \ ${resolvedCondition} \ @@ -220,42 +220,42 @@ findQuestionnaireCommentThreadsForQuestionnaire qtnUuid mPath mResolved editor = , ("resolvedCondition", resolvedCondition) , ("privateCondition", privateCondition) ] - let params = toField qtnUuid : toField tenantUuid : pathParam + let params = toField projectUuid : toField tenantUuid : pathParam logQuery sql params let action conn = query conn sql params runDB action -findQuestionnaireCommentThreadsSimple :: U.UUID -> Bool -> Bool -> AppContextM (M.Map String (M.Map U.UUID Int)) -findQuestionnaireCommentThreadsSimple qtnUuid resolved editor = do +findProjectCommentThreadsSimple :: U.UUID -> Bool -> Bool -> AppContextM (M.Map String (M.Map U.UUID Int)) +findProjectCommentThreadsSimple projectUuid resolved editor = do tenantUuid <- asks currentTenantUuid let privateCondition = if editor then "" - else "AND qtn_comment_thread.private = false" + else "AND project_comment_thread.private = false" let sql = fromString $ f'' - "SELECT path, qtn_comment_thread.uuid::text, count(qtn_comment.uuid)::text \ - \FROM questionnaire_comment_thread qtn_comment_thread \ - \LEFT JOIN questionnaire_comment qtn_comment ON qtn_comment_thread.uuid = qtn_comment.comment_thread_uuid AND qtn_comment_thread.tenant_uuid = qtn_comment.tenant_uuid \ - \WHERE qtn_comment_thread.questionnaire_uuid = ? \ - \ AND qtn_comment_thread.tenant_uuid = ? \ - \ AND qtn_comment_thread.resolved = ? \ + "SELECT path, project_comment_thread.uuid::text, count(project_comment.uuid)::text \ + \FROM project_comment_thread \ + \LEFT JOIN project_comment ON project_comment_thread.uuid = project_comment.comment_thread_uuid AND project_comment_thread.tenant_uuid = project_comment.tenant_uuid \ + \WHERE project_comment_thread.project_uuid = ? \ + \ AND project_comment_thread.tenant_uuid = ? \ + \ AND project_comment_thread.resolved = ? \ \ ${privateCondition} \ - \GROUP BY path, qtn_comment_thread.uuid" + \GROUP BY path, project_comment_thread.uuid" [("privateCondition", privateCondition)] - let params = [toField qtnUuid, toField tenantUuid, toField resolved] + let params = [toField projectUuid, toField tenantUuid, toField resolved] logQuery sql params let action conn = query conn sql params results <- runDB action return $ doubleGroupBy id u' read results -findQuestionnaireCommentThreadsForNotifying :: AppContextM [QuestionnaireCommentThreadNotification] -findQuestionnaireCommentThreadsForNotifying = do +findProjectCommentThreadsForNotifying :: AppContextM [ProjectCommentThreadNotification] +findProjectCommentThreadsForNotifying = do let sql = - "SELECT qtn.uuid, \ - \ qtn.name, \ - \ qtn.tenant_uuid, \ + "SELECT project.uuid, \ + \ project.name, \ + \ project.tenant_uuid, \ \ thread.uuid, \ \ thread.path, \ \ thread.resolved, \ @@ -269,7 +269,7 @@ findQuestionnaireCommentThreadsForNotifying = do \ assigned_by.last_name, \ \ assigned_by.email, \ \ (SELECT comment.text \ - \ FROM questionnaire_comment comment \ + \ FROM project_comment comment \ \ WHERE comment.comment_thread_uuid = thread.uuid \ \ AND comment.tenant_uuid = thread.tenant_uuid \ \ ORDER BY comment.created_at \ @@ -281,8 +281,8 @@ findQuestionnaireCommentThreadsForNotifying = do \ config_look_and_feel.illustrations_color AS illustrations_color, \ \ config_privacy_and_support.support_email AS support_email, \ \ config_mail.config_uuid AS mail_config_uuid \ - \FROM questionnaire_comment_thread thread \ - \JOIN questionnaire qtn ON qtn.uuid = thread.questionnaire_uuid AND qtn.tenant_uuid = thread.tenant_uuid \ + \FROM project_comment_thread thread \ + \JOIN project ON project.uuid = thread.project_uuid AND project.tenant_uuid = thread.tenant_uuid \ \JOIN user_entity assigned_to ON assigned_to.uuid = thread.assigned_to AND assigned_to.tenant_uuid = thread.tenant_uuid \ \LEFT JOIN user_entity assigned_by ON assigned_by.uuid = thread.assigned_by AND assigned_by.tenant_uuid = thread.tenant_uuid \ \JOIN tenant ON tenant.uuid = thread.tenant_uuid \ @@ -294,17 +294,17 @@ findQuestionnaireCommentThreadsForNotifying = do let action conn = query_ conn (fromString sql) runDB action -findQuestionnaireCommentThreadById :: U.UUID -> AppContextM (Maybe QuestionnaireCommentThread) -findQuestionnaireCommentThreadById uuid = do +findProjectCommentThreadById :: U.UUID -> AppContextM (Maybe ProjectCommentThread) +findProjectCommentThreadById uuid = do tenantUuid <- asks currentTenantUuid let sql = fromString - "SELECT questionnaire_comment_thread.*, \ + "SELECT project_comment_thread.*, \ \ (SELECT array_agg(concat(uuid, ':::::', text, ':::::', comment_thread_uuid, ':::::', tenant_uuid, ':::::', created_by, ':::::', created_at, ':::::', updated_at)) AS comments \ - \ FROM questionnaire_comment \ - \ WHERE questionnaire_comment.comment_thread_uuid = questionnaire_comment_thread.uuid \ + \ FROM project_comment \ + \ WHERE project_comment.comment_thread_uuid = project_comment_thread.uuid \ \ GROUP BY comment_thread_uuid) AS comments \ - \FROM questionnaire_comment_thread \ + \FROM project_comment_thread \ \WHERE uuid = ? AND tenant_uuid = ?" let params = [toField uuid, toField tenantUuid] logQuery sql params @@ -321,53 +321,53 @@ findQuestionnaireCommentThreadById uuid = do [entityName, show [("uuid", uuid)]] ) -insertQuestionnaireCommentThread :: QuestionnaireCommentThread -> AppContextM Int64 -insertQuestionnaireCommentThread = createInsertFn entityName +insertProjectCommentThread :: ProjectCommentThread -> AppContextM Int64 +insertProjectCommentThread = createInsertFn entityName -updateQuestionnaireCommentThreadById :: QuestionnaireCommentThread -> AppContextM QuestionnaireCommentThread -updateQuestionnaireCommentThreadById entity = do +updateProjectCommentThreadById :: ProjectCommentThread -> AppContextM ProjectCommentThread +updateProjectCommentThreadById entity = do tenantUuid <- asks currentTenantUuid now <- liftIO getCurrentTime - let updatedEntity = entity {updatedAt = now} :: QuestionnaireCommentThread + let updatedEntity = entity {updatedAt = now} :: ProjectCommentThread let sql = fromString - "UPDATE questionnaire_comment_thread SET uuid = ?, text = ?, questionnaire_uuid = ?, created_by = ?, created_at = ?, updated_at = ?, tenant_uuid = ? WHERE uuid = ? AND tenant_uuid = ?" + "UPDATE project_comment_thread SET uuid = ?, text = ?, project_uuid = ?, created_by = ?, created_at = ?, updated_at = ?, tenant_uuid = ? WHERE uuid = ? AND tenant_uuid = ?" let params = toRow updatedEntity ++ [toField updatedEntity.uuid, toField tenantUuid] logQuery sql params let action conn = execute conn sql params runDB action return updatedEntity -updateQuestionnaireCommentThreadResolvedById :: U.UUID -> Bool -> AppContextM Int64 -updateQuestionnaireCommentThreadResolvedById uuid resolved = do +updateProjectCommentThreadResolvedById :: U.UUID -> Bool -> AppContextM Int64 +updateProjectCommentThreadResolvedById uuid resolved = do tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire_comment_thread SET resolved = ?, updated_at = now() WHERE uuid = ? AND tenant_uuid = ?" + let sql = fromString "UPDATE project_comment_thread SET resolved = ?, updated_at = now() WHERE uuid = ? AND tenant_uuid = ?" let params = [toField resolved, toField uuid, toField tenantUuid] logQuery sql params let action conn = execute conn sql params runDB action -updateQuestionnaireCommentThreadAssignee :: U.UUID -> Maybe U.UUID -> Maybe U.UUID -> AppContextM Int64 -updateQuestionnaireCommentThreadAssignee uuid assignedTo assignedBy = do +updateProjectCommentThreadAssignee :: U.UUID -> Maybe U.UUID -> Maybe U.UUID -> AppContextM Int64 +updateProjectCommentThreadAssignee uuid assignedTo assignedBy = do tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire_comment_thread SET assigned_to = ?, assigned_by = ?, notification_required = true, updated_at = now() WHERE uuid = ? AND tenant_uuid = ?" + let sql = fromString "UPDATE project_comment_thread SET assigned_to = ?, assigned_by = ?, notification_required = true, updated_at = now() WHERE uuid = ? AND tenant_uuid = ?" let params = [toField assignedTo, toField assignedBy, toField uuid, toField tenantUuid] logQuery sql params let action conn = execute conn sql params runDB action -unsetQuestionnaireCommentThreadNotificationRequired :: AppContextM () -unsetQuestionnaireCommentThreadNotificationRequired = do - let sql = "UPDATE questionnaire_comment_thread SET notification_required = false WHERE notification_required = true" +unsetProjectCommentThreadNotificationRequired :: AppContextM () +unsetProjectCommentThreadNotificationRequired = do + let sql = "UPDATE project_comment_thread SET notification_required = false WHERE notification_required = true" logInfoI _CMP_DATABASE (trim sql) let action conn = execute_ conn (fromString sql) runDB action return () -deleteQuestionnaireCommentThreads :: AppContextM Int64 -deleteQuestionnaireCommentThreads = createDeleteEntitiesFn entityName +deleteProjectCommentThreads :: AppContextM Int64 +deleteProjectCommentThreads = createDeleteEntitiesFn entityName -deleteQuestionnaireCommentThreadById :: U.UUID -> AppContextM Int64 -deleteQuestionnaireCommentThreadById uuid = do +deleteProjectCommentThreadById :: U.UUID -> AppContextM Int64 +deleteProjectCommentThreadById uuid = do tenantUuid <- asks currentTenantUuid createDeleteEntityByFn entityName [("uuid", U.toString uuid), ("tenant_uuid", U.toString tenantUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Project/ProjectDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectDAO.hs new file mode 100644 index 000000000..1df195dcd --- /dev/null +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectDAO.hs @@ -0,0 +1,669 @@ +module Wizard.Database.DAO.Project.ProjectDAO where + +import Control.Monad.Reader (asks) +import Data.Foldable (traverse_) +import qualified Data.List as L +import Data.String (fromString) +import Data.Time +import qualified Data.UUID as U +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.ToField +import Database.PostgreSQL.Simple.ToRow +import GHC.Int + +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.PageMetadata +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Shared.Common.Util.Logger +import Shared.Common.Util.String (f'', replace, trim) +import Wizard.Api.Resource.User.UserDTO +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectPermDAO ( + deleteProjectPermsFiltered, + findProjectPermsFiltered, + insertProjectPerm, + ) +import Wizard.Database.Mapping.Project.Project () +import Wizard.Database.Mapping.Project.ProjectDetail () +import Wizard.Database.Mapping.Project.ProjectDetailPreview () +import Wizard.Database.Mapping.Project.ProjectDetailQuestionnaire () +import Wizard.Database.Mapping.Project.ProjectDetailSettings () +import Wizard.Database.Mapping.Project.ProjectList () +import Wizard.Database.Mapping.Project.ProjectSimple () +import Wizard.Database.Mapping.Project.ProjectSimpleWithPerm () +import Wizard.Database.Mapping.Project.ProjectSuggestion () +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.AppContextHelpers +import Wizard.Model.Context.ContextLenses () +import Wizard.Model.Project.Detail.ProjectDetail +import Wizard.Model.Project.Detail.ProjectDetailPreview +import Wizard.Model.Project.Detail.ProjectDetailQuestionnaire +import Wizard.Model.Project.Detail.ProjectDetailSettings +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectList +import Wizard.Model.Project.ProjectSimpleWithPerm +import Wizard.Model.Project.ProjectSuggestion +import Wizard.Model.User.User + +entityName = "project" + +pageLabel = "projects" + +findProjects :: AppContextM [Project] +findProjects = do + tenantUuid <- asks currentTenantUuid + currentUser <- getCurrentUser + if currentUser.uRole == _USER_ROLE_ADMIN + then createFindEntitiesBySortedFn entityName [tenantQueryUuid tenantUuid] [Sort "name" Ascending] >>= traverse enhance + else do + let sql = f' (projectSelectSql (U.toString tenantUuid) (U.toString $ currentUser.uuid) "['VIEW']") [""] ++ " ORDER BY project.name ASC" + logInfoI _CMP_DATABASE sql + let action conn = query_ conn (fromString sql) + entities <- runDB action + traverse enhance entities + +findProjectsForCurrentUserPage :: Maybe String -> Maybe Bool -> Maybe Bool -> Maybe [String] -> Maybe String -> Maybe [String] -> Maybe String -> Maybe [String] -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page ProjectList) +findProjectsForCurrentUserPage mQuery mIsTemplate mIsMigrating mProjectTags mProjectTagsOp mUserUuids mUserUuidsOp mKnowledgeModelPackageIds mKnowledgeModelPackageIdsOp pageable sort = + -- 1. Prepare variables + do + tenantUuid <- asks currentTenantUuid + currentUser <- getCurrentUser + let (nameCondition, nameRegex) = + case mQuery of + Just query -> (" AND project.name ~* ?", [regex query]) + Nothing -> ("", []) + let isTemplateCondition = + case mIsTemplate of + Nothing -> "" + Just True -> " AND project.is_template = true" + Just False -> " AND project.is_template = false" + let isMigratingCondition useWhere = + case mIsMigrating of + Nothing -> "" + Just True -> f' " %s project_mig.new_project_uuid IS NOT NULL" [if useWhere then "WHERE" else "AND"] + Just False -> f' " %s project_mig.new_project_uuid IS NULL" [if useWhere then "WHERE" else "AND"] + let projectMigrationJoin = + case mIsMigrating of + Nothing -> "" + Just _ -> "LEFT JOIN project_migration project_mig ON project.uuid = project_mig.new_project_uuid " + let (projectTagsCondition, projectTagsParam) = + case mProjectTags of + Nothing -> ("", []) + Just [] -> ("", []) + Just projectTags -> + let mapFn _ = " project.project_tags @> ARRAY [?]" + in if isAndOperator mProjectTagsOp + then (" AND (" ++ L.intercalate " AND " (fmap mapFn projectTags) ++ ")", projectTags) + else (" AND (" ++ L.intercalate " OR " (fmap mapFn projectTags) ++ ")", projectTags) + let userUuidsJoin = + case mUserUuids of + Nothing -> "" + Just [] -> "" + Just _ -> "LEFT JOIN project_perm_user ON project.uuid = project_perm_user.project_uuid " + let (userUuidsCondition, userUuidsParam) = + case mUserUuids of + Nothing -> ("", []) + Just [] -> ("", []) + Just userUuids -> + if isAndOperator mUserUuidsOp + then + ( f' + " AND %s = ( \ + \SELECT COUNT(DISTINCT user_uuid) \ + \FROM project_perm_user \ + \WHERE project_uuid = project.uuid AND user_uuid in (%s)) " + [show . length $ userUuids, generateQuestionMarks userUuids] + , userUuids + ) + else + let mapFn _ = " project_perm_user.user_uuid = ? " + in (" AND (" ++ L.intercalate " OR " (fmap mapFn userUuids) ++ ")", userUuids) + let (knowledgeModelPackageCondition, knowledgeModelPackageIdsParam) = + case mKnowledgeModelPackageIds of + Nothing -> ("", []) + Just [] -> ("", []) + Just packageIds -> + let operator = if isAndOperator mKnowledgeModelPackageIdsOp then " AND " else " OR " + in ( f' " AND (%s)" [L.intercalate operator . fmap (const " project.knowledge_model_package_id LIKE ?") $ packageIds] + , fmap (replace "all" "%") packageIds + ) + let (aclJoins, aclCondition) = + if currentUser.uRole == _USER_ROLE_ADMIN + then (userUuidsJoin, "") + else + ( f'' + "LEFT JOIN project_perm_user ON project.uuid = project_perm_user.project_uuid AND project_perm_user.tenant_uuid = '${tenantUuid}' \ + \LEFT JOIN project_perm_group ON project.uuid = project_perm_group.project_uuid AND project_perm_group.tenant_uuid = '${tenantUuid}' \ + \LEFT JOIN user_group_membership ugm ON ugm.user_group_uuid = project_perm_group.user_group_uuid AND ugm.user_uuid = '${currentUserUuid}' AND ugm.tenant_uuid = '${tenantUuid}'" + [ ("currentUserUuid", U.toString currentUser.uuid) + , ("tenantUuid", U.toString tenantUuid) + ] + , f' + "AND (visibility = 'VisibleEditProjectVisibility' \ + \ OR visibility = 'VisibleCommentProjectVisibility' \ + \ OR visibility = 'VisibleViewProjectVisibility' \ + \ OR (visibility = 'PrivateProjectVisibility' AND project_perm_user.user_uuid = '%s' AND project_perm_user.perms @> ARRAY %s) \ + \ OR (visibility = 'PrivateProjectVisibility' AND project_perm_group.user_group_uuid = ugm.user_group_uuid AND project_perm_group.perms @> ARRAY %s) \ + \)" + [U.toString currentUser.uuid, "['VIEW']", "['VIEW']"] + ) + let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable + -- 2. Get total count + let countSql = + fromString $ + f'' + "SELECT COUNT(DISTINCT project.uuid) \ + \FROM project \ + \${projectMigrationJoin} \ + \${aclJoins} \ + \WHERE project.tenant_uuid = '${tenantUuid}' ${aclCondition} ${nameCondition} ${isTemplateCondition} ${isMigratingCondition} ${projectTagsCondition} ${userUuidsCondition} ${knowledgeModelPackageCondition}" + [ ("projectMigrationJoin", projectMigrationJoin) + , ("aclJoins", aclJoins) + , ("tenantUuid", U.toString tenantUuid) + , ("aclCondition", aclCondition) + , ("nameCondition", nameCondition) + , ("isTemplateCondition", isTemplateCondition) + , ("isMigratingCondition", isMigratingCondition False) + , ("projectTagsCondition", projectTagsCondition) + , ("userUuidsCondition", userUuidsCondition) + , ("knowledgeModelPackageCondition", knowledgeModelPackageCondition) + ] + let params = nameRegex ++ projectTagsParam ++ userUuidsParam ++ knowledgeModelPackageIdsParam + logQuery countSql params + let action conn = query conn countSql params + result <- runDB action + let count = + case result of + [count] -> fromOnly count + _ -> 0 + -- 3. Get entities + let sql = + fromString $ + f'' + "WITH filtered_project AS (SELECT DISTINCT project.uuid, \ + \ project.name, \ + \ project.description, \ + \ project.visibility, \ + \ project.sharing, \ + \ project.is_template, \ + \ project.created_at, \ + \ project.updated_at, \ + \ project.knowledge_model_package_id \ + \ FROM project \ + \ ${aclJoins} \ + \ WHERE project.tenant_uuid = '${tenantUuid}' ${aclCondition} ${nameCondition} ${isTemplateCondition} ${projectTagsCondition} ${userUuidsCondition} ${knowledgeModelPackageCondition}), \ + \ pkg AS (SELECT knowledge_model_package.id, \ + \ knowledge_model_package.name, \ + \ knowledge_model_package.version, \ + \ knowledge_model_package.organization_id, \ + \ knowledge_model_package.km_id \ + \ FROM knowledge_model_package \ + \ WHERE knowledge_model_package.tenant_uuid = '${tenantUuid}'), \ + \ project_mig AS (SELECT new_project_uuid \ + \ FROM project_migration \ + \ WHERE project_migration.tenant_uuid = '${tenantUuid}') \ + \SELECT filtered_project.uuid, \ + \ filtered_project.name, \ + \ filtered_project.description, \ + \ filtered_project.visibility, \ + \ filtered_project.sharing, \ + \ filtered_project.is_template, \ + \ filtered_project.created_at, \ + \ filtered_project.updated_at, \ + \ CASE \ + \ WHEN project_mig.new_project_uuid IS NOT NULL THEN 'MigratingProjectState' \ + \ WHEN filtered_project.knowledge_model_package_id != get_newest_knowledge_model_package(pkg.organization_id, pkg.km_id, '${tenantUuid}', ARRAY['ReleasedKnowledgeModelPackagePhase']) THEN 'OutdatedProjectState' \ + \ WHEN project_mig.new_project_uuid IS NULL THEN 'DefaultProjectState' END, \ + \ pkg.id, \ + \ pkg.name, \ + \ pkg.version, \ + \ (SELECT array_agg(CONCAT(project_perm_user.user_uuid, '::', project_perm_user.perms, '::', u.uuid, '::', u.first_name, '::', u.last_name, '::', u.email, '::', u.image_url)) \ + \ FROM project_perm_user \ + \ JOIN user_entity u on u.uuid = project_perm_user.user_uuid \ + \ WHERE project_uuid = filtered_project.uuid \ + \ GROUP BY project_uuid) as user_permissions, \ + \ (SELECT array_agg(CONCAT(project_perm_group.user_group_uuid, '::', project_perm_group.perms, '::', ug.uuid, '::', ug.name, '::', ug.private, '::', ug.description)) \ + \ FROM project_perm_group \ + \ JOIN user_group ug on ug.uuid = project_perm_group.user_group_uuid \ + \ WHERE project_uuid = filtered_project.uuid \ + \ GROUP BY project_uuid) as group_permissions \ + \FROM filtered_project \ + \JOIN pkg ON filtered_project.knowledge_model_package_id = pkg.id \ + \LEFT JOIN project_mig ON filtered_project.uuid = project_mig.new_project_uuid \ + \${isMigratingCondition} \ + \${sort} \ + \OFFSET ${offset} LIMIT ${limit}" + [ ("aclJoins", aclJoins) + , ("tenantUuid", U.toString tenantUuid) + , ("aclCondition", aclCondition) + , ("nameCondition", nameCondition) + , ("isTemplateCondition", isTemplateCondition) + , ("isMigratingCondition", isMigratingCondition True) + , ("projectTagsCondition", projectTagsCondition) + , ("userUuidsCondition", userUuidsCondition) + , ("knowledgeModelPackageCondition", knowledgeModelPackageCondition) + , ("sort", mapSortWithPrefix "filtered_project" sort) + , ("offset", show skip) + , ("limit", show sizeI) + ] + logQuery sql params + let action conn = query conn sql params + entities <- runDB action + -- 5. Constructor response + let metadata = + PageMetadata + { size = sizeI + , totalElements = count + , totalPages = computeTotalPage count sizeI + , number = pageI + } + return $ Page pageLabel metadata entities + +findProjectsByKnowledgeModelPackageId :: String -> AppContextM [Project] +findProjectsByKnowledgeModelPackageId packageId = do + tenantUuid <- asks currentTenantUuid + currentUser <- getCurrentUser + if currentUser.uRole == _USER_ROLE_ADMIN + then createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("knowledge_model_package_id", packageId)] >>= traverse enhance + else do + let sql = + fromString $ + f' (projectSelectSql (U.toString tenantUuid) (U.toString $ currentUser.uuid) "['VIEW']") ["AND knowledge_model_package_id = ?"] + let params = [packageId] + logQuery sql params + let action conn = query conn sql params + entities <- runDB action + traverse enhance entities + +findProjectsByDocumentTemplateId :: String -> AppContextM [Project] +findProjectsByDocumentTemplateId documentTemplateId = do + tenantUuid <- asks currentTenantUuid + currentUser <- getCurrentUser + if currentUser.uRole == _USER_ROLE_ADMIN + then createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("document_template_id", documentTemplateId)] >>= traverse enhance + else do + let sql = + fromString $ + f' (projectSelectSql (U.toString tenantUuid) (U.toString $ currentUser.uuid) "['VIEW']") ["AND document_template_id = ?"] + let params = [documentTemplateId] + logQuery sql params + let action conn = query conn sql params + entities <- runDB action + traverse enhance entities + +findProjectsWithZeroAcl :: AppContextM [Project] +findProjectsWithZeroAcl = do + let sql = + f' + "SELECT project.* \ + \FROM %s \ + \LEFT JOIN project_perm_user ON project.uuid = project_perm_user.project_uuid \ + \LEFT JOIN project_perm_group ON project.uuid = project_perm_group.project_uuid \ + \WHERE project_perm_user.user_uuid IS NULL \ + \AND project_perm_group.user_group_uuid IS NULL \ + \AND project.updated_at < now() - INTERVAL '30 days'" + [entityName] + logInfoI _CMP_DATABASE (trim sql) + let action conn = query_ conn (fromString sql) + runDB action + +findProjectsSimpleWithPermByUserGroupUuid :: U.UUID -> AppContextM [ProjectSimpleWithPerm] +findProjectsSimpleWithPermByUserGroupUuid userGroupUuid = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString + "SELECT \ + \ nested_project.*, \ + \ ( \ + \ SELECT array_agg(CONCAT(user_uuid, '::', perms)) \ + \ FROM project_perm_user \ + \ WHERE project_uuid = nested_project.uuid AND tenant_uuid = nested_project.tenant_uuid \ + \ GROUP BY project_uuid \ + \ ) as user_permissions, \ + \ ( \ + \ SELECT array_agg(CONCAT(user_group_uuid, '::', perms)) \ + \ FROM project_perm_group \ + \ WHERE project_uuid = nested_project.uuid AND tenant_uuid = nested_project.tenant_uuid \ + \ GROUP BY project_uuid \ + \ ) as group_permissions \ + \FROM ( \ + \ SELECT project.uuid, project.visibility, project.sharing, project.tenant_uuid \ + \ FROM project \ + \ LEFT JOIN project_perm_group ON project.uuid = project_perm_group.project_uuid AND project.tenant_uuid = project_perm_group.tenant_uuid \ + \ WHERE project_perm_group.user_group_uuid = ? AND project_perm_group.tenant_uuid = ? \ + \) nested_project" + let params = [toField userGroupUuid, toField tenantUuid] + logQuery sql params + let action conn = query conn sql params + runDB action + +findProjectByUuid :: U.UUID -> AppContextM Project +findProjectByUuid projectUuid = do + tenantUuid <- asks currentTenantUuid + entity <- createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString projectUuid)] + enhance entity + +findProjectByUuid' :: U.UUID -> AppContextM (Maybe Project) +findProjectByUuid' projectUuid = do + tenantUuid <- asks currentTenantUuid + mEntity <- createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString projectUuid)] + case mEntity of + Just entity -> enhance entity >>= return . Just + Nothing -> return Nothing + +findProjectSuggestionByUuid' :: U.UUID -> AppContextM (Maybe ProjectSuggestion) +findProjectSuggestionByUuid' uuid = do + tenantUuid <- asks currentTenantUuid + createFindEntityWithFieldsByFn' "uuid, name, description" entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] + +findProjectForSquashing :: AppContextM [U.UUID] +findProjectForSquashing = do + let sql = "SELECT uuid FROM project WHERE squashed = false" + logInfoI _CMP_DATABASE (trim sql) + let action conn = query_ conn (fromString sql) + entities <- runDB action + return . concat $ entities + +findProjectDetail :: U.UUID -> AppContextM ProjectDetail +findProjectDetail uuid = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString $ + f'' + "SELECT project.uuid, \ + \ project.name, \ + \ project.visibility, \ + \ project.sharing, \ + \ project.knowledge_model_package_id, \ + \ project.selected_question_tag_uuids, \ + \ project.is_template, \ + \ project_mig.new_project_uuid AS migration_uuid, \ + \ ${projectDetailPermSql}, \ + \ ( \ + \ SELECT count(*) \ + \ FROM project_action \ + \ WHERE tenant_uuid = '${tenantUuid}' \ + \ ) as project_actions, \ + \ ( \ + \ SELECT count(*) \ + \ FROM project_importer \ + \ WHERE tenant_uuid = '${tenantUuid}' \ + \ ) as project_importers, \ + \ ( \ + \ SELECT count(*) \ + \ FROM project_file \ + \ WHERE tenant_uuid = '${tenantUuid}' AND project_uuid = '${projectUuid}' \ + \ ) as file_count \ + \FROM project \ + \LEFT JOIN project_migration project_mig ON project.uuid = project_mig.old_project_uuid AND project.tenant_uuid = project_mig.tenant_uuid \ + \WHERE project.tenant_uuid = ? AND project.uuid = ?" + [ ("projectDetailPermSql", projectDetailPermSql) + , ("projectUuid", U.toString uuid) + , ("tenantUuid", U.toString tenantUuid) + ] + let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] + let params = fmap snd queryParams + logQuery sql params + let action conn = query conn sql params + runOneEntityDB entityName action queryParams + +findProjectDetailQuestionnaire :: U.UUID -> AppContextM ProjectDetailQuestionnaire +findProjectDetailQuestionnaire uuid = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString $ + f'' + "SELECT project.uuid, \ + \ project.name, \ + \ project.visibility, \ + \ project.sharing, \ + \ project.knowledge_model_package_id, \ + \ project.selected_question_tag_uuids, \ + \ project.is_template, \ + \ project_mig.new_project_uuid AS migration_uuid, \ + \ ${projectDetailPermSql}, \ + \ ( \ + \ SELECT count(*) \ + \ FROM project_action \ + \ WHERE tenant_uuid = '${tenantUuid}' \ + \ ) as project_actions, \ + \ ( \ + \ SELECT count(*) \ + \ FROM project_importer \ + \ WHERE tenant_uuid = '${tenantUuid}' \ + \ ) as project_importers, \ + \ ( \ + \ SELECT array_agg(concat(uuid, '<:::::>', \ + \ file_name, '<:::::>', \ + \ content_type, '<:::::>', \ + \ file_size \ + \ )) \ + \ FROM project_file \ + \ WHERE tenant_uuid = '${tenantUuid}' AND project_uuid = '${projectUuid}' \ + \ ) as files \ + \FROM project \ + \LEFT JOIN project_migration project_mig ON project.uuid = project_mig.old_project_uuid AND project.tenant_uuid = project_mig.tenant_uuid \ + \WHERE project.tenant_uuid = ? AND project.uuid = ?" + [ ("projectUuid", U.toString uuid) + , ("projectDetailPermSql", projectDetailPermSql) + , ("tenantUuid", U.toString tenantUuid) + ] + let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] + let params = fmap snd queryParams + logQuery sql params + let action conn = query conn sql params + runOneEntityDB entityName action queryParams + +findProjectDetailPreview :: U.UUID -> AppContextM ProjectDetailPreview +findProjectDetailPreview uuid = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString $ + f'' + "SELECT project.uuid, \ + \ project.name, \ + \ project.visibility, \ + \ project.sharing, \ + \ project.knowledge_model_package_id, \ + \ project.is_template, \ + \ project.document_template_id, \ + \ project_mig.new_project_uuid AS migration_uuid, \ + \ ${projectDetailPermSql}, \ + \ dt_format.uuid, \ + \ dt_format.name, \ + \ dt_format.icon, \ + \ ( \ + \ SELECT count(*) \ + \ FROM project_file \ + \ WHERE tenant_uuid = '${tenantUuid}' AND project_uuid = '${projectUuid}' \ + \ ) as file_count \ + \FROM project \ + \LEFT JOIN project_migration project_mig ON project.uuid = project_mig.old_project_uuid AND project.tenant_uuid = project_mig.tenant_uuid \ + \LEFT JOIN document_template dt ON project.document_template_id = dt.id AND project.tenant_uuid = dt.tenant_uuid \ + \LEFT JOIN document_template_format dt_format ON project.document_template_id = dt_format.document_template_id AND project.format_uuid = dt_format.uuid AND project.tenant_uuid = dt_format.tenant_uuid \ + \WHERE project.tenant_uuid = ? AND project.uuid = ?" + [ ("projectDetailPermSql", projectDetailPermSql) + , ("projectUuid", U.toString uuid) + , ("tenantUuid", U.toString tenantUuid) + ] + let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] + let params = fmap snd queryParams + logQuery sql params + let action conn = query conn sql params + runOneEntityDB entityName action queryParams + +findProjectDetailSettings :: U.UUID -> AppContextM ProjectDetailSettings +findProjectDetailSettings uuid = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString $ + f'' + "SELECT project.uuid, \ + \ project.name, \ + \ project.description, \ + \ project.visibility, \ + \ project.sharing, \ + \ project.is_template, \ + \ project.project_tags, \ + \ project.selected_question_tag_uuids, \ + \ project.format_uuid, \ + \ project_mig.new_project_uuid AS migration_uuid, \ + \ ${projectDetailPermSql}, \ + \ pkg.id as knowledge_model_package_id, \ + \ pkg.name as knowledge_model_package_name, \ + \ pkg.organization_id as knowledge_model_package_organization_id, \ + \ pkg.km_id as knowledge_model_package_km_id, \ + \ pkg.version as knowledge_model_package_version, \ + \ pkg.phase as knowledge_model_package_phase, \ + \ pkg.description as knowledge_model_package_description, \ + \ pkg.non_editable as knowledge_model_package_non_editable, \ + \ pkg.created_at as knowledge_model_package_created_at, \ + \ dt.id as document_template_id, \ + \ dt.name as document_template_name, \ + \ dt.version as document_template_version, \ + \ dt.phase as document_template_phase, \ + \ dt.description as document_template_description, \ + \ ( \ + \ SELECT jsonb_agg(jsonb_build_object('uuid', uuid, 'name', name, 'icon', icon)) \ + \ FROM (SELECT * \ + \ FROM document_template_format dt_format \ + \ WHERE dt_format.tenant_uuid = project.tenant_uuid AND dt_format.document_template_id = dt.id \ + \ ORDER BY dt_format.name) nested \ + \ ) AS document_template_formats, \ + \ dt.metamodel_version as document_template_metamodel_version, \ + \ ( \ + \ SELECT count(*) \ + \ FROM project_file \ + \ WHERE tenant_uuid = '${tenantUuid}' AND project_uuid = '${projectUuid}' \ + \ ) as file_count \ + \FROM project \ + \LEFT JOIN project_migration project_mig ON project.uuid = project_mig.old_project_uuid AND project.tenant_uuid = project_mig.tenant_uuid \ + \LEFT JOIN knowledge_model_package pkg ON project.knowledge_model_package_id = pkg.id AND project.tenant_uuid = pkg.tenant_uuid \ + \LEFT JOIN document_template dt ON project.document_template_id = dt.id AND project.tenant_uuid = dt.tenant_uuid \ + \WHERE project.tenant_uuid = ? AND project.uuid = ?" + [ ("projectDetailPermSql", projectDetailPermSql) + , ("projectUuid", U.toString uuid) + , ("tenantUuid", U.toString tenantUuid) + ] + let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] + let params = fmap snd queryParams + logQuery sql params + let action conn = query conn sql params + runOneEntityDB entityName action queryParams + +projectDetailPermSql :: String +projectDetailPermSql = + "(SELECT array_agg(CONCAT(project_perm_user.user_uuid, '::', project_perm_user.perms, '::', u.uuid, '::', u.first_name, \ + \ '::', u.last_name, '::', u.email, '::', u.image_url)) \ + \ FROM project_perm_user \ + \ JOIN user_entity u on u.uuid = project_perm_user.user_uuid \ + \ WHERE project_uuid = project.uuid \ + \ GROUP BY project_uuid) as user_permissions, \ + \(SELECT array_agg(CONCAT(project_perm_group.user_group_uuid, '::', project_perm_group.perms, '::', ug.uuid, '::', ug.name, \ + \ '::', ug.private, '::', ug.description)) \ + \ FROM project_perm_group \ + \ JOIN user_group ug on ug.uuid = project_perm_group.user_group_uuid \ + \ WHERE project_uuid = project.uuid \ + \ GROUP BY project_uuid) as group_permissions" + +countProjects :: AppContextM Int +countProjects = do + tenantUuid <- asks currentTenantUuid + countProjectsWithTenant tenantUuid + +countProjectsWithTenant :: U.UUID -> AppContextM Int +countProjectsWithTenant tenantUuid = createCountByFn entityName tenantCondition [U.toString tenantUuid] + +insertProject :: Project -> AppContextM Int64 +insertProject project = do + -- Insert project + let sql = + fromString + "INSERT INTO project VALUES (?, ?, ?, ?, ?, ?::uuid[], ?, ?, ?, ?, ?, ?, ?, ?, ?, ?::text[])" + let params = toRow project + logQuery sql params + let action conn = execute conn sql params + runDB action + -- Insert project permissions + traverse_ insertProjectPerm project.permissions + return 1 + +updateProjectByUuid :: Project -> AppContextM () +updateProjectByUuid project = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString + "UPDATE project SET uuid = ?, name = ?, visibility = ?, sharing = ?, knowledge_model_package_id = ?, selected_question_tag_uuids = ?::uuid[], document_template_id = ?, format_uuid = ?, created_by = ?, created_at = ?, updated_at = ?, description = ?, is_template = ?, squashed = ?, tenant_uuid = ?, project_tags = ?::text[] WHERE tenant_uuid = ? AND uuid = ?" + let params = toRow project ++ [toField tenantUuid, toField . U.toText $ project.uuid] + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + deleteProjectPermsFiltered [("project_uuid", U.toString project.uuid)] + traverse_ insertProjectPerm project.permissions + +updateProjectSquashedByUuid :: U.UUID -> Bool -> AppContextM Int64 +updateProjectSquashedByUuid uuid squashed = do + tenantUuid <- asks currentTenantUuid + let sql = fromString "UPDATE project SET squashed = ? WHERE tenant_uuid = ? AND uuid = ?" + let params = [toField squashed, toField tenantUuid, toField . U.toText $ uuid] + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + +updateProjectSquashedAndUpdatedAtByUuid :: U.UUID -> Bool -> UTCTime -> AppContextM Int64 +updateProjectSquashedAndUpdatedAtByUuid uuid squashed updatedAt = do + tenantUuid <- asks currentTenantUuid + let sql = fromString "UPDATE project SET squashed = ?, updated_at = ? WHERE tenant_uuid = ? AND uuid = ?" + let params = [toField squashed, toField updatedAt, toField tenantUuid, toField . U.toText $ uuid] + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + +updateProjectUpdatedAtByUuid :: U.UUID -> AppContextM Int64 +updateProjectUpdatedAtByUuid uuid = do + tenantUuid <- asks currentTenantUuid + let sql = fromString "UPDATE project SET updated_at = now() WHERE tenant_uuid = ? AND uuid = ?" + let params = [toField tenantUuid, toField . U.toText $ uuid] + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + +deleteProjects :: AppContextM Int64 +deleteProjects = createDeleteEntitiesFn entityName + +deleteProjectsFiltered :: [(String, String)] -> AppContextM Int64 +deleteProjectsFiltered params = do + tenantUuid <- asks currentTenantUuid + createDeleteEntitiesByFn entityName (tenantQueryUuid tenantUuid : params) + +deleteProjectByUuid :: U.UUID -> AppContextM Int64 +deleteProjectByUuid uuid = do + tenantUuid <- asks currentTenantUuid + createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] + +-- ------------------------------------------------------------------------------------------------------------------------------ +-- PRIVATE +-- ------------------------------------------------------------------------------------------------------------------------------ +projectSelectSql tenantUuid userUuid perm = + f' + "SELECT project.* \ + \FROM project \ + \LEFT JOIN project_perm_user ON project.uuid = project_perm_user.project_uuid \ + \LEFT JOIN project_perm_group ON project.uuid = project_perm_group.project_uuid \ + \WHERE %s %s" + [projectWhereSql tenantUuid userUuid perm] + +projectWhereSql tenantUuid userUuid perm = + f' + "project.tenant_uuid = '%s' \ + \AND (visibility = 'VisibleEditProjectVisibility' \ + \OR visibility = 'VisibleCommentProjectVisibility' \ + \OR visibility = 'VisibleViewProjectVisibility' \ + \OR (visibility = 'PrivateProjectVisibility' AND project_perm_user.user_uuid = '%s' AND project_perm_user.perms @> ARRAY %s))" + [tenantUuid, userUuid, perm] + +enhance :: Project -> AppContextM Project +enhance project = do + ps <- findProjectPermsFiltered [("project_uuid", U.toString project.uuid)] + return $ project {permissions = ps} diff --git a/wizard-server/src/Wizard/Database/DAO/Project/ProjectEventDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectEventDAO.hs new file mode 100644 index 000000000..f89323d0c --- /dev/null +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectEventDAO.hs @@ -0,0 +1,217 @@ +module Wizard.Database.DAO.Project.ProjectEventDAO where + +import Control.Monad (unless, void) +import Control.Monad.Reader (asks) +import Data.Foldable (traverse_) +import qualified Data.List as L +import Data.String (fromString) +import qualified Data.UUID as U +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.ToField +import Database.PostgreSQL.Simple.ToRow +import GHC.Int + +import Shared.Common.Model.Common.Lens +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.PageMetadata +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Shared.Common.Util.Logger +import Shared.Common.Util.String +import Wizard.Database.DAO.Common +import Wizard.Database.Mapping.Project.ProjectEvent () +import Wizard.Database.Mapping.Project.ProjectEventList () +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Event.ProjectEventLenses () +import Wizard.Model.Project.Event.ProjectEventList + +entityName = "project_event" + +pageLabel = "projectEvents" + +findProjectEventsPage :: U.UUID -> Pageable -> [Sort] -> AppContextM (Page ProjectEventList) +findProjectEventsPage projectUuid pageable sort = do + -- 1. Prepare variables + do + tenantUuid <- asks (.tenantUuid') + let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable + -- 2. Get total count + let countSql = + fromString + "SELECT count(*) \ + \FROM project_event \ + \WHERE tenant_uuid = ? AND project_uuid = ?" + let countParams = [U.toString tenantUuid, U.toString projectUuid] + logQuery countSql countParams + let action conn = query conn countSql countParams + result <- runDB action + let count = + case result of + [count] -> fromOnly count + _ -> 0 + -- 3. Get entities + let sql = + fromString $ + f'' + "SELECT project_event.uuid, \ + \ project_event.event_type, \ + \ project_event.path, \ + \ project_event.created_at, \ + \ project_event.value_type, \ + \ project_event.value, \ + \ project_event.value_id, \ + \ project_event.value_raw, \ + \ project_event.created_by AS created_by_uuid, \ + \ user_entity.first_name AS created_by_first_name, \ + \ user_entity.last_name AS created_by_last_name, \ + \ gravatar_hash(user_entity.email) AS created_by_gravatar_hash, \ + \ user_entity.image_url AS created_by_email \ + \FROM project_event \ + \ LEFT JOIN user_entity ON user_entity.uuid = project_event.created_by \ + \WHERE project_event.tenant_uuid = ? \ + \ AND project_event.project_uuid = ? \ + \${sort} \ + \OFFSET ${offset} \ + \LIMIT ${limit}" + [ ("sort", mapSort sort) + , ("offset", show skip) + , ("limit", show sizeI) + ] + let params = [U.toString tenantUuid, U.toString projectUuid] + logQuery sql params + let action conn = query conn sql params + entities <- runDB action + -- 4. Constructor response + let metadata = + PageMetadata + { size = sizeI + , totalElements = count + , totalPages = computeTotalPage count sizeI + , number = pageI + } + return $ Page pageLabel metadata entities + +findProjectEventsByProjectUuid :: U.UUID -> AppContextM [ProjectEvent] +findProjectEventsByProjectUuid projectUuid = do + tenantUuid <- asks currentTenantUuid + let sql = + "SELECT * \ + \FROM project_event \ + \WHERE tenant_uuid = ? AND project_uuid = ? \ + \ORDER BY created_at" + let params = [U.toString tenantUuid, U.toString projectUuid] + logInfoI _CMP_DATABASE sql + let action conn = query conn (fromString sql) params + runDB action + +findProjectEventListsByProjectUuid :: U.UUID -> AppContextM [ProjectEventList] +findProjectEventListsByProjectUuid projectUuid = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString + "SELECT project_event.uuid, \ + \ project_event.event_type, \ + \ project_event.path, \ + \ project_event.created_at, \ + \ project_event.value_type, \ + \ project_event.value, \ + \ project_event.value_id, \ + \ project_event.value_raw, \ + \ project_event.created_by AS created_by_uuid, \ + \ user_entity.first_name AS created_by_first_name, \ + \ user_entity.last_name AS created_by_last_name, \ + \ gravatar_hash(user_entity.email) AS created_by_gravatar_hash, \ + \ user_entity.image_url AS created_by_email \ + \FROM project_event \ + \ LEFT JOIN user_entity ON user_entity.uuid = project_event.created_by \ + \WHERE project_event.tenant_uuid = ? \ + \ AND project_event.project_uuid = ? \ + \ORDER BY created_at" + let params = [U.toString tenantUuid, U.toString projectUuid] + logInfoI _CMP_DATABASE sql + let action conn = query conn (fromString sql) params + runDB action + +findProjectEventByUuid :: U.UUID -> AppContextM ProjectEvent +findProjectEventByUuid uuid = do + tenantUuid <- asks currentTenantUuid + createFindEntityWithFieldsByFn "*" False entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] + +findProjectEventByUuid' :: U.UUID -> AppContextM (Maybe ProjectEvent) +findProjectEventByUuid' uuid = do + tenantUuid <- asks currentTenantUuid + createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] + +insertProjectEvent :: ProjectEvent -> AppContextM Int64 +insertProjectEvent = createInsertFn entityName + +insertProjectEventWithTimestampUpdate :: U.UUID -> ProjectEvent -> AppContextM () +insertProjectEventWithTimestampUpdate projectUuid event = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString $ + f' + "UPDATE project SET squashed = false, updated_at = now() WHERE tenant_uuid = ? AND uuid = ?; \ + \INSERT INTO project_event VALUES (%s)" + [generateQuestionMarks' event] + let params = + [ toField tenantUuid + , toField projectUuid + ] + ++ toRow event + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + return () + +insertProjectEvents :: [ProjectEvent] -> AppContextM Int64 +insertProjectEvents events = do + if null events + then return 0 + else do + tenantUuid <- asks currentTenantUuid + let sql = + fromString $ + f' + "INSERT INTO project_event VALUES %s" + [generateQuestionMarksForEntities events] + let params = concatMap toRow events + logInsertAndUpdate sql params + let action conn = execute conn sql params + runDB action + +updateProjectEventByUuid :: ProjectEvent -> AppContextM Int64 +updateProjectEventByUuid event = do + tenantUuid <- asks currentTenantUuid + let sql = fromString "UPDATE project_event SET uuid = ?, event_type = ?, path = ?, created_at = ?, created_by = ?, project_uuid = ?, tenant_uuid = ?, value_type = ?, value = ?, value_id = ?, value_raw = ? WHERE uuid = ? AND tenant_uuid = ?" + let params = toRow event ++ [toField (getUuid event), toField tenantUuid] + logQuery sql params + let action conn = execute conn sql params + runDB action + +syncProjectEventsWithDb :: [ProjectEvent] -> [ProjectEvent] -> AppContextM () +syncProjectEventsWithDb oldEvents newEvents = do + let dbEventMap = map getUuid oldEvents + let newEventMap = map getUuid newEvents + let toDelete = dbEventMap L.\\ newEventMap + let toInsert = filter (\e -> getUuid e `notElem` dbEventMap) newEvents + let toUpdate = filter (\e -> e `notElem` oldEvents && getUuid e `elem` dbEventMap) newEvents + unless (null toInsert) (void $ insertProjectEvents toInsert) + traverse_ updateProjectEventByUuid toUpdate + void $ deleteProjectEventsByUuids toDelete + +deleteProjectEvents :: AppContextM Int64 +deleteProjectEvents = createDeleteEntitiesFn entityName + +deleteProjectEventsByUuids :: [U.UUID] -> AppContextM () +deleteProjectEventsByUuids eventUuids = + unless + (null eventUuids) + (void $ createDeleteEntityWhereInFn entityName "uuid" (fmap U.toString eventUuids)) + +deleteProjectEventsByProjectUuid :: U.UUID -> AppContextM Int64 +deleteProjectEventsByProjectUuid projectUuid = do + tenantUuid <- asks currentTenantUuid + createDeleteEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("project_uuid", U.toString projectUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireFileDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectFileDAO.hs similarity index 51% rename from wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireFileDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Project/ProjectFileDAO.hs index af1528272..928b4f82f 100644 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireFileDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectFileDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO where +module Wizard.Database.DAO.Project.ProjectFileDAO where import Control.Monad.Reader (asks) import Data.String @@ -13,21 +13,21 @@ import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Common.Sort import Shared.Common.Util.String import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Questionnaire.QuestionnaireFile () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireFileList () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireFileSimple () +import Wizard.Database.Mapping.Project.File.ProjectFile () +import Wizard.Database.Mapping.Project.File.ProjectFileList () +import Wizard.Database.Mapping.Project.File.ProjectFileSimple () import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnaireFile -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Model.Questionnaire.QuestionnaireFileSimple +import Wizard.Model.Project.File.ProjectFile +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Model.Project.File.ProjectFileSimple -entityName = "questionnaire_file" +entityName = "project_file" -pageLabel = "questionnaireFiles" +pageLabel = "projectFiles" -findQuestionnaireFilesPage :: Maybe String -> Maybe U.UUID -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireFileList) -findQuestionnaireFilesPage mQuery mQtnUuid pageable sort = do +findProjectFilesPage :: Maybe String -> Maybe U.UUID -> Pageable -> [Sort] -> AppContextM (Page ProjectFileList) +findProjectFilesPage mQuery mProjectUuid pageable sort = do -- 1. Prepare variables do tenantUuid <- asks currentTenantUuid @@ -35,23 +35,23 @@ findQuestionnaireFilesPage mQuery mQtnUuid pageable sort = do case mQuery of Nothing -> ("", []) Just query -> (" AND file_name ~* ?", [query]) - let (qtnUuidCondition, qtnUuidParam) = - case mQtnUuid of + let (projectUuidCondition, projectUuidParam) = + case mProjectUuid of Nothing -> ("", []) - Just qtnUuid -> (" AND questionnaire_uuid = ?", [U.toString qtnUuid]) + Just projectUuid -> (" AND project_uuid = ?", [U.toString projectUuid]) let condition = f'' - "WHERE file.tenant_uuid = ? ${queryCondition} ${qtnUuidCondition}" + "WHERE file.tenant_uuid = ? ${queryCondition} ${projectUuidCondition}" [ ("queryCondition", queryCondition) - , ("qtnUuidCondition", qtnUuidCondition) + , ("projectUuidCondition", projectUuidCondition) ] let conditionParams = [U.toString tenantUuid] ++ queryParam - ++ qtnUuidParam + ++ projectUuidParam let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable -- 2. Get total count - count <- createCountByFn "questionnaire_file file" condition conditionParams + count <- createCountByFn "project_file file" condition conditionParams -- 3. Get entities let sql = fromString $ @@ -61,16 +61,16 @@ findQuestionnaireFilesPage mQuery mQtnUuid pageable sort = do \ file.content_type, \ \ file.file_size, \ \ file.created_at, \ - \ questionnaire.uuid, \ - \ questionnaire.name, \ + \ project.uuid, \ + \ project.name, \ \ created_by.uuid, \ \ created_by.first_name, \ \ created_by.last_name, \ \ created_by.email, \ \ created_by.image_url \ - \FROM questionnaire_file file \ + \FROM project_file file \ \LEFT JOIN user_entity created_by ON created_by.uuid = file.created_by AND created_by.tenant_uuid = file.tenant_uuid \ - \LEFT JOIN questionnaire ON questionnaire.uuid = file.questionnaire_uuid AND questionnaire.tenant_uuid = file.tenant_uuid \ + \LEFT JOIN project ON project.uuid = file.project_uuid AND project.tenant_uuid = file.tenant_uuid \ \${condition} \ \${sort} \ \OFFSET ${offset} \ @@ -93,50 +93,50 @@ findQuestionnaireFilesPage mQuery mQtnUuid pageable sort = do } return $ Page pageLabel metadata entities -findQuestionnaireFilesByQuestionnaire :: U.UUID -> AppContextM [QuestionnaireFile] -findQuestionnaireFilesByQuestionnaire qtnUuid = do +findProjectFilesByProject :: U.UUID -> AppContextM [ProjectFile] +findProjectFilesByProject projectUuid = do tenantUuid <- asks currentTenantUuid - createFindEntitiesWithFieldsByFn "*" entityName [tenantQueryUuid tenantUuid, ("questionnaire_uuid", U.toString qtnUuid)] + createFindEntitiesWithFieldsByFn "*" entityName [tenantQueryUuid tenantUuid, ("project_uuid", U.toString projectUuid)] -findQuestionnaireFilesSimpleByQuestionnaire :: U.UUID -> AppContextM [QuestionnaireFileSimple] -findQuestionnaireFilesSimpleByQuestionnaire qtnUuid = do +findProjectFilesSimpleByProject :: U.UUID -> AppContextM [ProjectFileSimple] +findProjectFilesSimpleByProject projectUuid = do tenantUuid <- asks currentTenantUuid - createFindEntitiesWithFieldsByFn "uuid, file_name, content_type, file_size" entityName [tenantQueryUuid tenantUuid, ("questionnaire_uuid", U.toString qtnUuid)] + createFindEntitiesWithFieldsByFn "uuid, file_name, content_type, file_size" entityName [tenantQueryUuid tenantUuid, ("project_uuid", U.toString projectUuid)] -findQuestionnaireFileByUuid :: U.UUID -> AppContextM QuestionnaireFile -findQuestionnaireFileByUuid uuid = do +findProjectFileByUuid :: U.UUID -> AppContextM ProjectFile +findProjectFileByUuid uuid = do tenantUuid <- asks currentTenantUuid createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] -sumQuestionnaireFileSize :: AppContextM Int64 -sumQuestionnaireFileSize = do +sumProjectFileSize :: AppContextM Int64 +sumProjectFileSize = do tenantUuid <- asks currentTenantUuid - sumQuestionnaireFileSizeWithTenant tenantUuid + sumProjectFileSizeWithTenant tenantUuid -sumQuestionnaireFileSizeWithTenant :: U.UUID -> AppContextM Int64 -sumQuestionnaireFileSizeWithTenant tenantUuid = createSumByFn entityName "file_size" tenantCondition [U.toString tenantUuid] +sumProjectFileSizeWithTenant :: U.UUID -> AppContextM Int64 +sumProjectFileSizeWithTenant tenantUuid = createSumByFn entityName "file_size" tenantCondition [U.toString tenantUuid] -insertQuestionnaireFile :: QuestionnaireFile -> AppContextM Int64 -insertQuestionnaireFile = createInsertFn entityName +insertProjectFile :: ProjectFile -> AppContextM Int64 +insertProjectFile = createInsertFn entityName -deleteQuestionnaireFiles :: AppContextM Int64 -deleteQuestionnaireFiles = createDeleteEntitiesFn entityName +deleteProjectFiles :: AppContextM Int64 +deleteProjectFiles = createDeleteEntitiesFn entityName -deleteQuestionnaireFilesNewerThen :: U.UUID -> UTCTime -> AppContextM Int64 -deleteQuestionnaireFilesNewerThen qtnUuid timestamp = do +deleteProjectFilesNewerThen :: U.UUID -> UTCTime -> AppContextM Int64 +deleteProjectFilesNewerThen projectUuid timestamp = do tenantUuid <- asks currentTenantUuid let sql = fromString - "DELETE FROM questionnaire_file \ + "DELETE FROM project_file \ \WHERE tenant_uuid = ? \ - \ AND questionnaire_uuid = ? \ + \ AND project_uuid = ? \ \ AND created_at > ?" - let params = [U.toString tenantUuid, U.toString qtnUuid, show timestamp] + let params = [U.toString tenantUuid, U.toString projectUuid, show timestamp] logQuery sql params let action conn = execute conn sql params runDB action -deleteQuestionnaireFileByUuid :: U.UUID -> AppContextM Int64 -deleteQuestionnaireFileByUuid uuid = do +deleteProjectFileByUuid :: U.UUID -> AppContextM Int64 +deleteProjectFileByUuid uuid = do tenantUuid <- asks currentTenantUuid createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/QuestionnaireImporter/QuestionnaireImporterDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectImporterDAO.hs similarity index 73% rename from wizard-server/src/Wizard/Database/DAO/QuestionnaireImporter/QuestionnaireImporterDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Project/ProjectImporterDAO.hs index 7aa38cd9c..c1019f534 100644 --- a/wizard-server/src/Wizard/Database/DAO/QuestionnaireImporter/QuestionnaireImporterDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectImporterDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.QuestionnaireImporter.QuestionnaireImporterDAO where +module Wizard.Database.DAO.Project.ProjectImporterDAO where import Control.Monad.Reader (asks) import Data.String (fromString) @@ -15,24 +15,24 @@ import Shared.Common.Model.Common.PageMetadata import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Common.Sort import Shared.Common.Util.Logger -import Wizard.Database.Mapping.QuestionnaireImporter.QuestionnaireImporter () +import Wizard.Database.Mapping.Project.Importer.ProjectImporter () import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter +import Wizard.Model.Project.Importer.ProjectImporter -entityName = "questionnaire_importer" +entityName = "project_importer" -pageLabel = "questionnaireImporters" +pageLabel = "projectImporters" -findQuestionnaireImportersPage +findProjectImportersPage :: Maybe String -> Maybe String -> Maybe String -> Maybe Bool -> Pageable -> [Sort] - -> AppContextM (Page QuestionnaireImporter) -findQuestionnaireImportersPage mOrganizationId mImporterId mQuery mEnabled pageable sort = + -> AppContextM (Page ProjectImporter) +findProjectImportersPage mOrganizationId mImporterId mQuery mEnabled pageable sort = createFindEntitiesGroupByCoordinatePageableQuerySortFn entityName pageLabel @@ -45,41 +45,41 @@ findQuestionnaireImportersPage mOrganizationId mImporterId mQuery mEnabled pagea mOrganizationId mImporterId -findQuestionnaireImporterById :: String -> AppContextM QuestionnaireImporter -findQuestionnaireImporterById qiId = do +findProjectImporterById :: String -> AppContextM ProjectImporter +findProjectImporterById piId = do tenantUuid <- asks currentTenantUuid - createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", qiId)] + createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", piId)] -insertQuestionnaireImporter :: QuestionnaireImporter -> AppContextM Int64 -insertQuestionnaireImporter = createInsertFn entityName +insertProjectImporter :: ProjectImporter -> AppContextM Int64 +insertProjectImporter = createInsertFn entityName -updateQuestionnaireImporterById :: QuestionnaireImporter -> AppContextM Int64 -updateQuestionnaireImporterById importer = do +updateProjectImporterById :: ProjectImporter -> AppContextM Int64 +updateProjectImporterById importer = do tenantUuid <- asks currentTenantUuid let sql = fromString - "UPDATE questionnaire_importer SET id = ?, name = ?, organization_id = ?, importer_id = ?, version = ?, metamodel_version = ?, description = ?, readme = ?, license = ?, allowed_packages = ?, url = ?, enabled = ?, tenant_uuid = ?, created_at = ?, updated_at = ? WHERE tenant_uuid = ? AND id = ?" - let params = toRow importer ++ [toField tenantUuid, toField importer.qiId] + "UPDATE project_importer SET id = ?, name = ?, organization_id = ?, importer_id = ?, version = ?, metamodel_version = ?, description = ?, readme = ?, license = ?, allowed_packages = ?, url = ?, enabled = ?, tenant_uuid = ?, created_at = ?, updated_at = ? WHERE tenant_uuid = ? AND id = ?" + let params = toRow importer ++ [toField tenantUuid, toField importer.piId] logQuery sql params let action conn = execute conn sql params runDB action -updateQuestionnaireImporterPasswordById :: String -> Bool -> UTCTime -> AppContextM Int64 -updateQuestionnaireImporterPasswordById qiId enabled uUpdatedAt = do +updateProjectImporterPasswordById :: String -> Bool -> UTCTime -> AppContextM Int64 +updateProjectImporterPasswordById piId enabled uUpdatedAt = do tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire_importer SET enabled = ?, updated_at = ? WHERE tenant_uuid = ? AND uuid = ?" - let params = [toField enabled, toField uUpdatedAt, toField tenantUuid, toField qiId] + let sql = fromString "UPDATE project_importer SET enabled = ?, updated_at = ? WHERE tenant_uuid = ? AND uuid = ?" + let params = [toField enabled, toField uUpdatedAt, toField tenantUuid, toField piId] logQuery sql params let action conn = execute conn sql params runDB action -deleteQuestionnaireImporters :: AppContextM Int64 -deleteQuestionnaireImporters = createDeleteEntitiesFn entityName +deleteProjectImporters :: AppContextM Int64 +deleteProjectImporters = createDeleteEntitiesFn entityName -deleteQuestionnaireImporterById :: String -> AppContextM Int64 -deleteQuestionnaireImporterById qiId = do +deleteProjectImporterById :: String -> AppContextM Int64 +deleteProjectImporterById piId = do tenantUuid <- asks currentTenantUuid - createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", qiId)] + createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("id", piId)] -- -------------------------------- -- PRIVATE diff --git a/wizard-server/src/Wizard/Database/DAO/Project/ProjectMigrationDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectMigrationDAO.hs new file mode 100644 index 000000000..e5aa87f8b --- /dev/null +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectMigrationDAO.hs @@ -0,0 +1,68 @@ +module Wizard.Database.DAO.Project.ProjectMigrationDAO where + +import Control.Monad.Reader (asks) +import Data.String +import qualified Data.UUID as U +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.ToField +import Database.PostgreSQL.Simple.ToRow +import GHC.Int + +import Wizard.Database.DAO.Common +import Wizard.Database.Mapping.Project.Migration.ProjectMigration () +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () +import Wizard.Model.Project.Migration.ProjectMigration + +entityName = "project_migration" + +pageLabel = "migrations" + +findProjectMigrations :: AppContextM [ProjectMigration] +findProjectMigrations = do + tenantUuid <- asks currentTenantUuid + createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid] + +findProjectMigrationsByOldProjectUuid :: U.UUID -> AppContextM [ProjectMigration] +findProjectMigrationsByOldProjectUuid oldProjectUuid = do + tenantUuid <- asks currentTenantUuid + createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("old_project_uuid", U.toString oldProjectUuid)] + +findProjectMigrationByNewProjectUuid :: U.UUID -> AppContextM ProjectMigration +findProjectMigrationByNewProjectUuid newProjectUuid = do + tenantUuid <- asks currentTenantUuid + createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("new_project_uuid", U.toString newProjectUuid)] + +findProjectMigrationByNewProjectUuid' :: U.UUID -> AppContextM (Maybe ProjectMigration) +findProjectMigrationByNewProjectUuid' newProjectUuid = do + tenantUuid <- asks currentTenantUuid + createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("new_project_uuid", U.toString newProjectUuid)] + +insertProjectMigration :: ProjectMigration -> AppContextM Int64 +insertProjectMigration ms = do + let sql = + fromString + "INSERT INTO project_migration VALUES (?, ?, ?::uuid[], ?)" + let params = toRow ms + logQuery sql params + let action conn = execute conn sql params + runDB action + +updateProjectMigrationByNewProjectUuid :: ProjectMigration -> AppContextM Int64 +updateProjectMigrationByNewProjectUuid ms = do + tenantUuid <- asks currentTenantUuid + let sql = + fromString + "UPDATE project_migration SET old_project_uuid = ?, new_project_uuid = ?, resolved_question_uuids = ?::uuid[], tenant_uuid = ? WHERE tenant_uuid = ? AND new_project_uuid = ?" + let params = toRow ms ++ [toField tenantUuid, toField ms.newProjectUuid] + logQuery sql params + let action conn = execute conn sql params + runDB action + +deleteProjectMigrations :: AppContextM Int64 +deleteProjectMigrations = createDeleteEntitiesFn entityName + +deleteProjectMigrationByNewProjectUuid :: U.UUID -> AppContextM Int64 +deleteProjectMigrationByNewProjectUuid newProjectUuid = do + tenantUuid <- asks currentTenantUuid + createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("new_project_uuid", U.toString newProjectUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Project/ProjectPermDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectPermDAO.hs new file mode 100644 index 000000000..a981f5db5 --- /dev/null +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectPermDAO.hs @@ -0,0 +1,57 @@ +module Wizard.Database.DAO.Project.ProjectPermDAO where + +import Control.Monad.Reader (asks) +import Data.String +import qualified Data.UUID as U +import Database.PostgreSQL.Simple +import GHC.Int + +import Shared.Common.Util.Logger +import Wizard.Database.DAO.Common +import Wizard.Database.Mapping.Project.ProjectPerm () +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () +import Wizard.Model.Project.Acl.ProjectPerm + +entityName_user = "project_perm_user" + +entityName_group = "project_perm_group" + +findProjectPermsFiltered :: [(String, String)] -> AppContextM [ProjectPerm] +findProjectPermsFiltered queryParams = do + let sql = + fromString $ + f' + "SELECT project_uuid, 'UserProjectPermType' AS member_type, user_uuid as member_uuid, perms, tenant_uuid \ + \ FROM %s \ + \ WHERE %s \ + \ UNION \ + \ SELECT project_uuid, 'UserGroupProjectPermType' AS member_type, user_group_uuid as member_uuid, perms, tenant_uuid \ + \ FROM %s \ + \ WHERE %s" + [entityName_user, mapToDBQuerySql queryParams, entityName_group, mapToDBQuerySql queryParams] + let params = fmap snd queryParams ++ fmap snd queryParams + logQuery sql params + let action conn = query conn sql params + runDB action + +insertProjectPerm :: ProjectPerm -> AppContextM Int64 +insertProjectPerm perm = + case perm.memberType of + UserProjectPermType -> createInsertFn entityName_user perm + UserGroupProjectPermType -> createInsertFn entityName_group perm + +deleteProjectPerms :: AppContextM Int64 +deleteProjectPerms = do + createDeleteEntitiesFn entityName_user + createDeleteEntitiesFn entityName_group + +deleteProjectPermsFiltered :: [(String, String)] -> AppContextM Int64 +deleteProjectPermsFiltered queryParams = do + createDeleteEntitiesByFn entityName_user queryParams + createDeleteEntitiesByFn entityName_group queryParams + +deleteProjectPermGroupByUserGroupUuid :: U.UUID -> AppContextM Int64 +deleteProjectPermGroupByUserGroupUuid userGroupUuid = do + tenantUuid <- asks currentTenantUuid + createDeleteEntitiesByFn entityName_group [tenantQueryUuid tenantUuid, ("user_group_uuid", U.toString userGroupUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireProjectTagDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectTagDAO.hs similarity index 84% rename from wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireProjectTagDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Project/ProjectTagDAO.hs index 72669f68b..012f7c536 100644 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireProjectTagDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectTagDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireProjectTagDAO where +module Wizard.Database.DAO.Project.ProjectTagDAO where import Control.Monad.Reader (asks) import Data.String @@ -12,12 +12,10 @@ import Shared.Common.Util.Logger import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () -entityName = "questionnaire" - pageLabel = "projectTags" -findQuestionnaireProjectTagsPage :: Maybe String -> [String] -> Pageable -> [Sort] -> AppContextM (Page String) -findQuestionnaireProjectTagsPage mQuery excludeTags pageable sort = +findProjectTagsPage :: Maybe String -> [String] -> Pageable -> [Sort] -> AppContextM (Page String) +findProjectTagsPage mQuery excludeTags pageable sort = -- 1. Prepare variables do tenantUuid <- asks currentTenantUuid @@ -51,11 +49,11 @@ findCount excludeTags params = do sqlBase :: String sqlBase = "SELECT unnest(project_tagging_tags) as project_tag \ - \FROM config_questionnaire \ + \FROM config_project \ \WHERE tenant_uuid = ? \ \UNION \ \SELECT nested.project_tag \ - \FROM (SELECT unnest(project_tags) as project_tag, tenant_uuid FROM questionnaire) nested \ + \FROM (SELECT unnest(project_tags) as project_tag, tenant_uuid FROM project) nested \ \WHERE nested.tenant_uuid = ? " excludeTagsCondition :: [String] -> String diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireUserDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectUserDAO.hs similarity index 63% rename from wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireUserDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Project/ProjectUserDAO.hs index e02639966..57d11a996 100644 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireUserDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectUserDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireUserDAO where +module Wizard.Database.DAO.Project.ProjectUserDAO where import Control.Monad.Reader (asks) import Data.String (fromString) @@ -16,8 +16,8 @@ import Wizard.Model.Context.ContextLenses () import WizardLib.Public.Database.Mapping.User.UserSimple () import WizardLib.Public.Model.User.UserSimple -findQuestionnaireUserSuggestionsPage :: U.UUID -> String -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page UserSimple) -findQuestionnaireUserSuggestionsPage qtnUuid perm mQuery pageable sort = +findProjectUserSuggestionsPage :: U.UUID -> String -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page UserSimple) +findProjectUserSuggestionsPage projectUuid perm mQuery pageable sort = -- 1. Prepare variables do tenantUuid <- asks currentTenantUuid @@ -25,7 +25,7 @@ findQuestionnaireUserSuggestionsPage qtnUuid perm mQuery pageable sort = ( "WHERE (concat(first_name, ' ', last_name) ~* ? OR email ~* ?)" , [regexM mQuery, regexM mQuery] ) - let params = [U.toString qtnUuid, U.toString tenantUuid, U.toString qtnUuid, U.toString tenantUuid] ++ qRegex + let params = [U.toString projectUuid, U.toString tenantUuid, U.toString projectUuid, U.toString tenantUuid] ++ qRegex let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable -- 2. Get total count let countSql = @@ -36,11 +36,11 @@ findQuestionnaireUserSuggestionsPage qtnUuid perm mQuery pageable sort = \ u.first_name, \ \ u.last_name, \ \ u.email \ - \ FROM questionnaire_perm_user qtn_perm_user \ - \ JOIN user_entity u ON qtn_perm_user.user_uuid = u.uuid AND qtn_perm_user.tenant_uuid = u.tenant_uuid \ - \ WHERE qtn_perm_user.questionnaire_uuid = ? \ - \ AND qtn_perm_user.tenant_uuid = ? \ - \ AND qtn_perm_user.perms @> ARRAY ['${perm}'] \ + \ FROM project_perm_user \ + \ JOIN user_entity u ON project_perm_user.user_uuid = u.uuid AND project_perm_user.tenant_uuid = u.tenant_uuid \ + \ WHERE project_perm_user.project_uuid = ? \ + \ AND project_perm_user.tenant_uuid = ? \ + \ AND project_perm_user.perms @> ARRAY ['${perm}'] \ \ AND u.active = true \ \ AND u.machine = false \ \ UNION ALL \ @@ -48,12 +48,12 @@ findQuestionnaireUserSuggestionsPage qtnUuid perm mQuery pageable sort = \ u.first_name, \ \ u.last_name, \ \ u.email \ - \ FROM questionnaire_perm_group qtn_perm_group \ - \ LEFT JOIN user_group_membership ug_membership ON ug_membership.user_group_uuid = qtn_perm_group.user_group_uuid AND ug_membership.tenant_uuid = qtn_perm_group.tenant_uuid \ - \ LEFT JOIN user_entity u ON u.uuid = ug_membership.user_uuid AND u.tenant_uuid = qtn_perm_group.tenant_uuid \ - \ WHERE qtn_perm_group.questionnaire_uuid = ? \ - \ AND qtn_perm_group.tenant_uuid = ? \ - \ AND qtn_perm_group.perms @> ARRAY ['${perm}'] \ + \ FROM project_perm_group \ + \ LEFT JOIN user_group_membership ug_membership ON ug_membership.user_group_uuid = project_perm_group.user_group_uuid AND ug_membership.tenant_uuid = project_perm_group.tenant_uuid \ + \ LEFT JOIN user_entity u ON u.uuid = ug_membership.user_uuid AND u.tenant_uuid = project_perm_group.tenant_uuid \ + \ WHERE project_perm_group.project_uuid = ? \ + \ AND project_perm_group.tenant_uuid = ? \ + \ AND project_perm_group.perms @> ARRAY ['${perm}'] \ \ AND u.active = true \ \ AND u.machine = false) u \ \${qCondition}" @@ -77,11 +77,11 @@ findQuestionnaireUserSuggestionsPage qtnUuid perm mQuery pageable sort = \ u.last_name, \ \ u.email, \ \ u.image_url \ - \ FROM questionnaire_perm_user qtn_perm_user \ - \ JOIN user_entity u ON qtn_perm_user.user_uuid = u.uuid AND qtn_perm_user.tenant_uuid = u.tenant_uuid \ - \ WHERE qtn_perm_user.questionnaire_uuid = ? \ - \ AND qtn_perm_user.tenant_uuid = ? \ - \ AND qtn_perm_user.perms @> ARRAY ['${perm}'] \ + \ FROM project_perm_user \ + \ JOIN user_entity u ON project_perm_user.user_uuid = u.uuid AND project_perm_user.tenant_uuid = u.tenant_uuid \ + \ WHERE project_perm_user.project_uuid = ? \ + \ AND project_perm_user.tenant_uuid = ? \ + \ AND project_perm_user.perms @> ARRAY ['${perm}'] \ \ AND u.active = true \ \ AND u.machine = false \ \ UNION ALL \ @@ -90,12 +90,12 @@ findQuestionnaireUserSuggestionsPage qtnUuid perm mQuery pageable sort = \ u.last_name, \ \ u.email, \ \ u.image_url \ - \ FROM questionnaire_perm_group qtn_perm_group \ - \ LEFT JOIN user_group_membership ug_membership ON ug_membership.user_group_uuid = qtn_perm_group.user_group_uuid AND ug_membership.tenant_uuid = qtn_perm_group.tenant_uuid \ - \ LEFT JOIN user_entity u ON u.uuid = ug_membership.user_uuid AND u.tenant_uuid = qtn_perm_group.tenant_uuid \ - \ WHERE qtn_perm_group.questionnaire_uuid = ? \ - \ AND qtn_perm_group.tenant_uuid = ? \ - \ AND qtn_perm_group.perms @> ARRAY ['${perm}'] \ + \ FROM project_perm_group \ + \ LEFT JOIN user_group_membership ug_membership ON ug_membership.user_group_uuid = project_perm_group.user_group_uuid AND ug_membership.tenant_uuid = project_perm_group.tenant_uuid \ + \ LEFT JOIN user_entity u ON u.uuid = ug_membership.user_uuid AND u.tenant_uuid = project_perm_group.tenant_uuid \ + \ WHERE project_perm_group.project_uuid = ? \ + \ AND project_perm_group.tenant_uuid = ? \ + \ AND project_perm_group.perms @> ARRAY ['${perm}'] \ \ AND u.active = true \ \ AND u.machine = false) u \ \${qCondition} \ diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireVersionDAO.hs b/wizard-server/src/Wizard/Database/DAO/Project/ProjectVersionDAO.hs similarity index 50% rename from wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireVersionDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Project/ProjectVersionDAO.hs index 1190a8225..5c63f53e4 100644 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireVersionDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Project/ProjectVersionDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO where +module Wizard.Database.DAO.Project.ProjectVersionDAO where import Control.Monad (unless, void) import Control.Monad.Reader (asks) @@ -13,24 +13,24 @@ import GHC.Int import Shared.Common.Util.Logger import Shared.Common.Util.String import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVersion () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVersionList () +import Wizard.Database.Mapping.Project.Version.ProjectVersion () +import Wizard.Database.Mapping.Project.Version.ProjectVersionList () import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList -entityName = "questionnaire_version" +entityName = "project_version" -pageLabel = "questionnaireVersions" +pageLabel = "projectVersions" -findQuestionnaireVersionsByQuestionnaireUuid :: U.UUID -> AppContextM [QuestionnaireVersion] -findQuestionnaireVersionsByQuestionnaireUuid qtnUuid = do +findProjectVersionsByProjectUuid :: U.UUID -> AppContextM [ProjectVersion] +findProjectVersionsByProjectUuid projectUuid = do tenantUuid <- asks currentTenantUuid - createFindEntitiesWithFieldsByFn "*" entityName [tenantQueryUuid tenantUuid, ("questionnaire_uuid", U.toString qtnUuid)] + createFindEntitiesWithFieldsByFn "*" entityName [tenantQueryUuid tenantUuid, ("project_uuid", U.toString projectUuid)] -findQuestionnaireVersionListByQuestionnaireUuidAndCreatedAt :: U.UUID -> Maybe UTCTime -> AppContextM [QuestionnaireVersionList] -findQuestionnaireVersionListByQuestionnaireUuidAndCreatedAt questionnaireUuid mCreatedAt = do +findProjectVersionListByProjectUuidAndCreatedAt :: U.UUID -> Maybe UTCTime -> AppContextM [ProjectVersionList] +findProjectVersionListByProjectUuidAndCreatedAt projectUuid mCreatedAt = do tenantUuid <- asks currentTenantUuid let (createdAtCondition, createdAtParams) = case mCreatedAt of @@ -50,48 +50,48 @@ findQuestionnaireVersionListByQuestionnaireUuidAndCreatedAt questionnaireUuid mC \ u.last_name, \ \ u.email, \ \ u.image_url \ - \FROM questionnaire_version v \ + \FROM project_version v \ \JOIN user_entity u ON u.uuid = v.created_by AND u.tenant_uuid = v.tenant_uuid ${createdAtCondition} \ - \WHERE v.tenant_uuid = ? AND v.questionnaire_uuid = ? \ + \WHERE v.tenant_uuid = ? AND v.project_uuid = ? \ \ORDER BY v.created_at" [("createdAtCondition", createdAtCondition)] - let params = createdAtParams ++ [toField tenantUuid, toField questionnaireUuid] + let params = createdAtParams ++ [toField tenantUuid, toField projectUuid] logInfoI _CMP_DATABASE sql let action conn = query conn (fromString sql) params runDB action -findQuestionnaireVersionByUuid :: U.UUID -> AppContextM QuestionnaireVersion -findQuestionnaireVersionByUuid uuid = do +findProjectVersionByUuid :: U.UUID -> AppContextM ProjectVersion +findProjectVersionByUuid uuid = do tenantUuid <- asks currentTenantUuid createFindEntityWithFieldsByFn "*" False entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] -findQuestionnaireVersionByEventUuid' :: U.UUID -> U.UUID -> AppContextM (Maybe QuestionnaireVersion) -findQuestionnaireVersionByEventUuid' questionnaireUuid eventUuid = do +findProjectVersionByEventUuid' :: U.UUID -> U.UUID -> AppContextM (Maybe ProjectVersion) +findProjectVersionByEventUuid' projectUuid eventUuid = do tenantUuid <- asks currentTenantUuid - createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("questionnaire_uuid", U.toString questionnaireUuid), ("event_uuid", U.toString eventUuid)] + createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("project_uuid", U.toString projectUuid), ("event_uuid", U.toString eventUuid)] -insertQuestionnaireVersion :: QuestionnaireVersion -> AppContextM Int64 -insertQuestionnaireVersion = createInsertFn entityName +insertProjectVersion :: ProjectVersion -> AppContextM Int64 +insertProjectVersion = createInsertFn entityName -updateQuestionnaireVersionByUuid :: QuestionnaireVersion -> AppContextM Int64 -updateQuestionnaireVersionByUuid version = do +updateProjectVersionByUuid :: ProjectVersion -> AppContextM Int64 +updateProjectVersionByUuid version = do tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire_version SET uuid = ?, name = ?, description = ?, event_uuid = ?, questionnaire_uuid = ?, tenant_uuid = ?, created_by = ?, created_at = ?, updated_at = ? WHERE uuid = ? AND tenant_uuid = ?" + let sql = fromString "UPDATE project_version SET uuid = ?, name = ?, description = ?, event_uuid = ?, project_uuid = ?, tenant_uuid = ?, created_by = ?, created_at = ?, updated_at = ? WHERE uuid = ? AND tenant_uuid = ?" let params = toRow version ++ [toField version.uuid, toField tenantUuid] logQuery sql params let action conn = execute conn sql params runDB action -deleteQuestionnaireVersions :: AppContextM Int64 -deleteQuestionnaireVersions = createDeleteEntitiesFn entityName +deleteProjectVersions :: AppContextM Int64 +deleteProjectVersions = createDeleteEntitiesFn entityName -deleteQuestionnaireVersionsByUuids :: [U.UUID] -> AppContextM () -deleteQuestionnaireVersionsByUuids versionUuids = +deleteProjectVersionsByUuids :: [U.UUID] -> AppContextM () +deleteProjectVersionsByUuids versionUuids = unless (null versionUuids) (void $ createDeleteEntityWhereInFn entityName "uuid" (fmap U.toString versionUuids)) -deleteQuestionnaireVersionByUuid :: U.UUID -> AppContextM Int64 -deleteQuestionnaireVersionByUuid uuid = do +deleteProjectVersionByUuid :: U.UUID -> AppContextM Int64 +deleteProjectVersionByUuid uuid = do tenantUuid <- asks currentTenantUuid createDeleteEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/MigratorDAO.hs b/wizard-server/src/Wizard/Database/DAO/Questionnaire/MigratorDAO.hs deleted file mode 100644 index 3c7a785e8..000000000 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/MigratorDAO.hs +++ /dev/null @@ -1,68 +0,0 @@ -module Wizard.Database.DAO.Questionnaire.MigratorDAO where - -import Control.Monad.Reader (asks) -import Data.String -import qualified Data.UUID as U -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.ToField -import Database.PostgreSQL.Simple.ToRow -import GHC.Int - -import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Questionnaire.MigratorState () -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.MigratorState - -entityName = "questionnaire_migration" - -pageLabel = "migrations" - -findMigratorStates :: AppContextM [MigratorState] -findMigratorStates = do - tenantUuid <- asks currentTenantUuid - createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid] - -findMigratorStatesByOldQuestionnaireUuid :: U.UUID -> AppContextM [MigratorState] -findMigratorStatesByOldQuestionnaireUuid oldQtnUuid = do - tenantUuid <- asks currentTenantUuid - createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("old_questionnaire_uuid", U.toString oldQtnUuid)] - -findMigratorStateByNewQuestionnaireUuid :: U.UUID -> AppContextM MigratorState -findMigratorStateByNewQuestionnaireUuid newQuestionnaireUuid = do - tenantUuid <- asks currentTenantUuid - createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("new_questionnaire_uuid", U.toString newQuestionnaireUuid)] - -findMigratorStateByNewQuestionnaireUuid' :: U.UUID -> AppContextM (Maybe MigratorState) -findMigratorStateByNewQuestionnaireUuid' newQuestionnaireUuid = do - tenantUuid <- asks currentTenantUuid - createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("new_questionnaire_uuid", U.toString newQuestionnaireUuid)] - -insertMigratorState :: MigratorState -> AppContextM Int64 -insertMigratorState ms = do - let sql = - fromString - "INSERT INTO questionnaire_migration VALUES (?, ?, ?::uuid[], ?)" - let params = toRow ms - logQuery sql params - let action conn = execute conn sql params - runDB action - -updateMigratorStateByNewQuestionnaireUuid :: MigratorState -> AppContextM Int64 -updateMigratorStateByNewQuestionnaireUuid ms = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString - "UPDATE questionnaire_migration SET old_questionnaire_uuid = ?, new_questionnaire_uuid = ?, resolved_question_uuids = ?::uuid[], tenant_uuid = ? WHERE tenant_uuid = ? AND new_questionnaire_uuid = ?" - let params = toRow ms ++ [toField tenantUuid, toField ms.newQuestionnaireUuid] - logQuery sql params - let action conn = execute conn sql params - runDB action - -deleteMigratorStates :: AppContextM Int64 -deleteMigratorStates = createDeleteEntitiesFn entityName - -deleteMigratorStateByNewQuestionnaireUuid :: U.UUID -> AppContextM Int64 -deleteMigratorStateByNewQuestionnaireUuid newQuestionnaireUuid = do - tenantUuid <- asks currentTenantUuid - createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("new_questionnaire_uuid", U.toString newQuestionnaireUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireCommentDAO.hs b/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireCommentDAO.hs deleted file mode 100644 index ac9d771b0..000000000 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireCommentDAO.hs +++ /dev/null @@ -1,87 +0,0 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO where - -import Control.Monad.Reader (asks, liftIO) -import Data.String -import Data.Time -import qualified Data.UUID as U -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.ToField -import Database.PostgreSQL.Simple.ToRow -import GHC.Int - -import Shared.Common.Util.String -import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Questionnaire.QuestionnaireComment () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThread () -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnaireComment - -entityName = "questionnaire_comment" - -insertQuestionnaireComment :: QuestionnaireComment -> AppContextM Int64 -insertQuestionnaireComment = createInsertFn entityName - -insertQuestionnaireThreadAndComment :: QuestionnaireCommentThread -> QuestionnaireComment -> AppContextM Int64 -insertQuestionnaireThreadAndComment thread comment = do - let sql = - fromString $ - f' - "BEGIN TRANSACTION; \ - \INSERT INTO %s VALUES (%s); \ - \INSERT INTO %s VALUES (%s); \ - \COMMIT;" - ["questionnaire_comment_thread", generateQuestionMarks' thread, entityName, generateQuestionMarks' comment] - let params = toRow thread ++ toRow comment - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - -insertQuestionnaireThreadAndComment' :: QuestionnaireCommentThread -> QuestionnaireComment -> AppContextM Int64 -insertQuestionnaireThreadAndComment' thread comment = do - let sql = - fromString $ - f' - "INSERT INTO %s VALUES (%s); \ - \INSERT INTO %s VALUES (%s); " - ["questionnaire_comment_thread", generateQuestionMarks' thread, entityName, generateQuestionMarks' comment] - let params = toRow thread ++ toRow comment - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - -updateQuestionnaireCommentById :: QuestionnaireComment -> AppContextM QuestionnaireComment -updateQuestionnaireCommentById entity = do - tenantUuid <- asks currentTenantUuid - now <- liftIO getCurrentTime - let updatedEntity = entity {updatedAt = now} :: QuestionnaireComment - let sql = - fromString - "UPDATE questionnaire_comment SET uuid = ?, text = ?, created_by = ?, created_at = ?, updated_at = ?, tenant_uuid = ? WHERE uuid = ? AND tenant_uuid = ?" - let params = toRow updatedEntity ++ [toField updatedEntity.uuid, toField tenantUuid] - logQuery sql params - let action conn = execute conn sql params - runDB action - return updatedEntity - -updateQuestionnaireCommentTextById :: U.UUID -> String -> AppContextM Int64 -updateQuestionnaireCommentTextById uuid text = do - tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire_comment SET text = ?, updated_at = now() WHERE uuid = ? AND tenant_uuid = ?" - let params = [toField text, toField uuid, toField tenantUuid] - logQuery sql params - let action conn = execute conn sql params - runDB action - -deleteQuestionnaireComments :: AppContextM Int64 -deleteQuestionnaireComments = createDeleteEntitiesFn entityName - -deleteQuestionnaireCommentsByThreadUuid :: U.UUID -> AppContextM Int64 -deleteQuestionnaireCommentsByThreadUuid threadUuid = do - tenantUuid <- asks currentTenantUuid - createDeleteEntityByFn entityName [("comment_thread_uuid", U.toString threadUuid), ("tenant_uuid", U.toString tenantUuid)] - -deleteQuestionnaireCommentById :: U.UUID -> AppContextM Int64 -deleteQuestionnaireCommentById uuid = do - tenantUuid <- asks currentTenantUuid - createDeleteEntityByFn entityName [("uuid", U.toString uuid), ("tenant_uuid", U.toString tenantUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireDAO.hs b/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireDAO.hs deleted file mode 100644 index 1950e0f88..000000000 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireDAO.hs +++ /dev/null @@ -1,687 +0,0 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireDAO where - -import Control.Monad.Reader (asks) -import Data.Foldable (traverse_) -import qualified Data.List as L -import Data.String (fromString) -import Data.Time -import qualified Data.UUID as U -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.ToField -import Database.PostgreSQL.Simple.ToRow -import GHC.Int - -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.PageMetadata -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Shared.Common.Util.Logger -import Shared.Common.Util.String (f'', replace, trim) -import Wizard.Api.Resource.User.UserDTO -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO ( - deleteQuestionnairePermsFiltered, - findQuestionnairePermsFiltered, - insertQuestionnairePerm, - ) -import Wizard.Database.Mapping.Questionnaire.Questionnaire () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireDetail () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireDetailPreview () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireDetailQuestionnaire () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireDetailSettings () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireList () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSimple () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSimpleWithPerm () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSuggestion () -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireDetail -import Wizard.Model.Questionnaire.QuestionnaireDetailPreview -import Wizard.Model.Questionnaire.QuestionnaireDetailQuestionnaire -import Wizard.Model.Questionnaire.QuestionnaireDetailSettings -import Wizard.Model.Questionnaire.QuestionnaireList -import Wizard.Model.Questionnaire.QuestionnaireSimpleWithPerm -import Wizard.Model.Questionnaire.QuestionnaireSuggestion -import Wizard.Model.User.User - -entityName = "questionnaire" - -pageLabel = "questionnaires" - -findQuestionnaires :: AppContextM [Questionnaire] -findQuestionnaires = do - tenantUuid <- asks currentTenantUuid - currentUser <- getCurrentUser - if currentUser.uRole == _USER_ROLE_ADMIN - then createFindEntitiesBySortedFn entityName [tenantQueryUuid tenantUuid] [Sort "name" Ascending] >>= traverse enhance - else do - let sql = f' (qtnSelectSql (U.toString tenantUuid) (U.toString $ currentUser.uuid) "['VIEW']") [""] ++ " ORDER BY qtn.name ASC" - logInfoI _CMP_DATABASE sql - let action conn = query_ conn (fromString sql) - entities <- runDB action - traverse enhance entities - -findQuestionnairesForCurrentUserPage :: Maybe String -> Maybe Bool -> Maybe Bool -> Maybe [String] -> Maybe String -> Maybe [String] -> Maybe String -> Maybe [String] -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireList) -findQuestionnairesForCurrentUserPage mQuery mIsTemplate mIsMigrating mProjectTags mProjectTagsOp mUserUuids mUserUuidsOp mKnowledgeModelPackageIds mKnowledgeModelPackageIdsOp pageable sort = - -- 1. Prepare variables - do - tenantUuid <- asks currentTenantUuid - currentUser <- getCurrentUser - let (nameCondition, nameRegex) = - case mQuery of - Just query -> (" AND qtn.name ~* ?", [regex query]) - Nothing -> ("", []) - let isTemplateCondition = - case mIsTemplate of - Nothing -> "" - Just True -> " AND qtn.is_template = true" - Just False -> " AND qtn.is_template = false" - let isMigratingCondition useWhere = - case mIsMigrating of - Nothing -> "" - Just True -> f' " %s qtn_mig.new_questionnaire_uuid IS NOT NULL" [if useWhere then "WHERE" else "AND"] - Just False -> f' " %s qtn_mig.new_questionnaire_uuid IS NULL" [if useWhere then "WHERE" else "AND"] - let qtnMigrationJoin = - case mIsMigrating of - Nothing -> "" - Just _ -> "LEFT JOIN questionnaire_migration qtn_mig ON qtn.uuid = qtn_mig.new_questionnaire_uuid " - let (projectTagsCondition, projectTagsParam) = - case mProjectTags of - Nothing -> ("", []) - Just [] -> ("", []) - Just projectTags -> - let mapFn _ = " qtn.project_tags @> ARRAY [?]" - in if isAndOperator mProjectTagsOp - then (" AND (" ++ L.intercalate " AND " (fmap mapFn projectTags) ++ ")", projectTags) - else (" AND (" ++ L.intercalate " OR " (fmap mapFn projectTags) ++ ")", projectTags) - let userUuidsJoin = - case mUserUuids of - Nothing -> "" - Just [] -> "" - Just _ -> "LEFT JOIN questionnaire_perm_user qtn_acl_user ON qtn.uuid = qtn_acl_user.questionnaire_uuid " - let (userUuidsCondition, userUuidsParam) = - case mUserUuids of - Nothing -> ("", []) - Just [] -> ("", []) - Just userUuids -> - if isAndOperator mUserUuidsOp - then - ( f' - " AND %s = ( \ - \SELECT COUNT(DISTINCT user_uuid) \ - \FROM questionnaire_perm_user \ - \WHERE questionnaire_uuid = qtn.uuid AND user_uuid in (%s)) " - [show . length $ userUuids, generateQuestionMarks userUuids] - , userUuids - ) - else - let mapFn _ = " qtn_acl_user.user_uuid = ? " - in (" AND (" ++ L.intercalate " OR " (fmap mapFn userUuids) ++ ")", userUuids) - let (knowledgeModelPackageCondition, knowledgeModelPackageIdsParam) = - case mKnowledgeModelPackageIds of - Nothing -> ("", []) - Just [] -> ("", []) - Just packageIds -> - let operator = if isAndOperator mKnowledgeModelPackageIdsOp then " AND " else " OR " - in ( f' " AND (%s)" [L.intercalate operator . fmap (const " qtn.knowledge_model_package_id LIKE ?") $ packageIds] - , fmap (replace "all" "%") packageIds - ) - let (aclJoins, aclCondition) = - if currentUser.uRole == _USER_ROLE_ADMIN - then (userUuidsJoin, "") - else - ( f'' - "LEFT JOIN questionnaire_perm_user qtn_acl_user ON qtn.uuid = qtn_acl_user.questionnaire_uuid AND qtn_acl_user.tenant_uuid = '${tenantUuid}' \ - \LEFT JOIN questionnaire_perm_group qtn_acl_group ON qtn.uuid = qtn_acl_group.questionnaire_uuid AND qtn_acl_group.tenant_uuid = '${tenantUuid}' \ - \LEFT JOIN user_group_membership ugm ON ugm.user_group_uuid = qtn_acl_group.user_group_uuid AND ugm.user_uuid = '${currentUserUuid}' AND ugm.tenant_uuid = '${tenantUuid}'" - [ ("currentUserUuid", U.toString currentUser.uuid) - , ("tenantUuid", U.toString tenantUuid) - ] - , f' - "AND (visibility = 'VisibleEditQuestionnaire' \ - \ OR visibility = 'VisibleCommentQuestionnaire' \ - \ OR visibility = 'VisibleViewQuestionnaire' \ - \ OR (visibility = 'PrivateQuestionnaire' AND qtn_acl_user.user_uuid = '%s' AND qtn_acl_user.perms @> ARRAY %s) \ - \ OR (visibility = 'PrivateQuestionnaire' AND qtn_acl_group.user_group_uuid = ugm.user_group_uuid AND qtn_acl_group.perms @> ARRAY %s) \ - \)" - [U.toString currentUser.uuid, "['VIEW']", "['VIEW']"] - ) - let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable - -- 2. Get total count - let countSql = - fromString $ - f'' - "SELECT COUNT(DISTINCT qtn.uuid) \ - \FROM questionnaire qtn \ - \${qtnMigrationJoin} \ - \${aclJoins} \ - \WHERE qtn.tenant_uuid = '${tenantUuid}' ${aclCondition} ${nameCondition} ${isTemplateCondition} ${isMigratingCondition} ${projectTagsCondition} ${userUuidsCondition} ${knowledgeModelPackageCondition}" - [ ("qtnMigrationJoin", qtnMigrationJoin) - , ("aclJoins", aclJoins) - , ("tenantUuid", U.toString tenantUuid) - , ("aclCondition", aclCondition) - , ("nameCondition", nameCondition) - , ("isTemplateCondition", isTemplateCondition) - , ("isMigratingCondition", isMigratingCondition False) - , ("projectTagsCondition", projectTagsCondition) - , ("userUuidsCondition", userUuidsCondition) - , ("knowledgeModelPackageCondition", knowledgeModelPackageCondition) - ] - let params = nameRegex ++ projectTagsParam ++ userUuidsParam ++ knowledgeModelPackageIdsParam - logQuery countSql params - let action conn = query conn countSql params - result <- runDB action - let count = - case result of - [count] -> fromOnly count - _ -> 0 - -- 3. Get entities - let sql = - fromString $ - f'' - "WITH qtn AS (SELECT DISTINCT qtn.uuid, \ - \ qtn.name, \ - \ qtn.description, \ - \ qtn.visibility, \ - \ qtn.sharing, \ - \ qtn.is_template, \ - \ qtn.created_at, \ - \ qtn.updated_at, \ - \ qtn.knowledge_model_package_id \ - \ FROM questionnaire qtn \ - \ ${aclJoins} \ - \ WHERE qtn.tenant_uuid = '${tenantUuid}' ${aclCondition} ${nameCondition} ${isTemplateCondition} ${projectTagsCondition} ${userUuidsCondition} ${knowledgeModelPackageCondition}), \ - \ pkg AS (SELECT knowledge_model_package.id, \ - \ knowledge_model_package.name, \ - \ knowledge_model_package.version, \ - \ knowledge_model_package.organization_id, \ - \ knowledge_model_package.km_id \ - \ FROM knowledge_model_package \ - \ WHERE knowledge_model_package.tenant_uuid = '${tenantUuid}'), \ - \ qtn_mig AS (SELECT new_questionnaire_uuid \ - \ FROM questionnaire_migration \ - \ WHERE questionnaire_migration.tenant_uuid = '${tenantUuid}') \ - \SELECT qtn.uuid, \ - \ qtn.name, \ - \ qtn.description, \ - \ qtn.visibility, \ - \ qtn.sharing, \ - \ qtn.is_template, \ - \ qtn.created_at, \ - \ qtn.updated_at, \ - \ CASE \ - \ WHEN qtn_mig.new_questionnaire_uuid IS NOT NULL THEN 'Migrating' \ - \ WHEN qtn.knowledge_model_package_id != get_newest_knowledge_model_package(pkg.organization_id, pkg.km_id, '${tenantUuid}', ARRAY['ReleasedKnowledgeModelPackagePhase']) THEN 'Outdated' \ - \ WHEN qtn_mig.new_questionnaire_uuid IS NULL THEN 'Default' END, \ - \ pkg.id, \ - \ pkg.name, \ - \ pkg.version, \ - \ (SELECT array_agg(CONCAT(qtn_acl_user.user_uuid, '::', qtn_acl_user.perms, '::', u.uuid, '::', u.first_name, '::', u.last_name, '::', u.email, '::', u.image_url)) \ - \ FROM questionnaire_perm_user qtn_acl_user \ - \ JOIN user_entity u on u.uuid = qtn_acl_user.user_uuid \ - \ WHERE questionnaire_uuid = qtn.uuid \ - \ GROUP BY questionnaire_uuid) as user_permissions, \ - \ (SELECT array_agg(CONCAT(qtn_acl_group.user_group_uuid, '::', qtn_acl_group.perms, '::', ug.uuid, '::', ug.name, '::', ug.private, '::', ug.description)) \ - \ FROM questionnaire_perm_group qtn_acl_group \ - \ JOIN user_group ug on ug.uuid = qtn_acl_group.user_group_uuid \ - \ WHERE questionnaire_uuid = qtn.uuid \ - \ GROUP BY questionnaire_uuid) as group_permissions \ - \FROM qtn \ - \JOIN pkg ON qtn.knowledge_model_package_id = pkg.id \ - \LEFT JOIN qtn_mig ON qtn.uuid = qtn_mig.new_questionnaire_uuid \ - \${isMigratingCondition} \ - \${sort} \ - \OFFSET ${offset} LIMIT ${limit}" - [ ("aclJoins", aclJoins) - , ("tenantUuid", U.toString tenantUuid) - , ("aclCondition", aclCondition) - , ("nameCondition", nameCondition) - , ("isTemplateCondition", isTemplateCondition) - , ("isMigratingCondition", isMigratingCondition True) - , ("projectTagsCondition", projectTagsCondition) - , ("userUuidsCondition", userUuidsCondition) - , ("knowledgeModelPackageCondition", knowledgeModelPackageCondition) - , ("sort", mapSortWithPrefix "qtn" sort) - , ("offset", show skip) - , ("limit", show sizeI) - ] - logQuery sql params - let action conn = query conn sql params - entities <- runDB action - -- 5. Constructor response - let metadata = - PageMetadata - { size = sizeI - , totalElements = count - , totalPages = computeTotalPage count sizeI - , number = pageI - } - return $ Page pageLabel metadata entities - -findQuestionnairesByPackageId :: String -> AppContextM [Questionnaire] -findQuestionnairesByPackageId packageId = do - tenantUuid <- asks currentTenantUuid - currentUser <- getCurrentUser - if currentUser.uRole == _USER_ROLE_ADMIN - then createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("knowledge_model_package_id", packageId)] >>= traverse enhance - else do - let sql = - fromString $ - f' (qtnSelectSql (U.toString tenantUuid) (U.toString $ currentUser.uuid) "['VIEW']") ["AND knowledge_model_package_id = ?"] - let params = [packageId] - logQuery sql params - let action conn = query conn sql params - entities <- runDB action - traverse enhance entities - -findQuestionnairesByDocumentTemplateId :: String -> AppContextM [Questionnaire] -findQuestionnairesByDocumentTemplateId documentTemplateId = do - tenantUuid <- asks currentTenantUuid - currentUser <- getCurrentUser - if currentUser.uRole == _USER_ROLE_ADMIN - then createFindEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("document_template_id", documentTemplateId)] >>= traverse enhance - else do - let sql = - fromString $ - f' (qtnSelectSql (U.toString tenantUuid) (U.toString $ currentUser.uuid) "['VIEW']") ["AND document_template_id = ?"] - let params = [documentTemplateId] - logQuery sql params - let action conn = query conn sql params - entities <- runDB action - traverse enhance entities - -findQuestionnaireWithZeroAcl :: AppContextM [Questionnaire] -findQuestionnaireWithZeroAcl = do - let sql = - f' - "SELECT qtn.* \ - \FROM %s qtn \ - \LEFT JOIN questionnaire_perm_user qtn_acl_user ON qtn.uuid = qtn_acl_user.questionnaire_uuid \ - \LEFT JOIN questionnaire_perm_group qtn_acl_group ON qtn.uuid = qtn_acl_group.questionnaire_uuid \ - \WHERE qtn_acl_user.user_uuid IS NULL \ - \AND qtn_acl_group.user_group_uuid IS NULL \ - \AND qtn.updated_at < now() - INTERVAL '30 days'" - [entityName] - logInfoI _CMP_DATABASE (trim sql) - let action conn = query_ conn (fromString sql) - runDB action - -findQuestionnairesSimpleWithPermByUserGroupUuid :: U.UUID -> AppContextM [QuestionnaireSimpleWithPerm] -findQuestionnairesSimpleWithPermByUserGroupUuid userGroupUuid = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString - "SELECT \ - \ nested_qtn.*, \ - \ ( \ - \ SELECT array_agg(CONCAT(user_uuid, '::', perms)) \ - \ FROM questionnaire_perm_user qtn_acl_user \ - \ WHERE questionnaire_uuid = nested_qtn.uuid AND tenant_uuid = nested_qtn.tenant_uuid \ - \ GROUP BY questionnaire_uuid \ - \ ) as user_permissions, \ - \ ( \ - \ SELECT array_agg(CONCAT(user_group_uuid, '::', perms)) \ - \ FROM questionnaire_perm_group qtn_acl_group \ - \ WHERE questionnaire_uuid = nested_qtn.uuid AND tenant_uuid = nested_qtn.tenant_uuid \ - \ GROUP BY questionnaire_uuid \ - \ ) as group_permissions \ - \FROM ( \ - \ SELECT qtn.uuid, qtn.visibility, qtn.sharing, qtn.tenant_uuid \ - \ FROM questionnaire qtn \ - \ LEFT JOIN questionnaire_perm_group qtn_perm_group ON qtn.uuid = qtn_perm_group.questionnaire_uuid AND qtn.tenant_uuid = qtn_perm_group.tenant_uuid \ - \ WHERE qtn_perm_group.user_group_uuid = ? AND qtn_perm_group.tenant_uuid = ? \ - \) nested_qtn" - let params = [toField userGroupUuid, toField tenantUuid] - logQuery sql params - let action conn = query conn sql params - runDB action - -findQuestionnaireUuids :: AppContextM [U.UUID] -findQuestionnaireUuids = do - tenantUuid <- asks currentTenantUuid - let sql = fromString $ f' "SELECT %s FROM %s WHERE tenant_uuid = ?" ["uuid", entityName] - let params = [toField tenantUuid] - logQuery sql params - let action conn = query conn sql params - entities <- runDB action - return . concat $ entities - -findQuestionnaireUuids' :: AppContextM [U.UUID] -findQuestionnaireUuids' = do - let sql = f' "SELECT %s FROM %s" ["uuid", entityName] - logInfoI _CMP_DATABASE (trim sql) - let action conn = query_ conn (fromString sql) - entities <- runDB action - return . concat $ entities - -findQuestionnaireByUuid :: U.UUID -> AppContextM Questionnaire -findQuestionnaireByUuid qtnUuid = do - tenantUuid <- asks currentTenantUuid - entity <- createFindEntityByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString qtnUuid)] - enhance entity - -findQuestionnaireByUuid' :: U.UUID -> AppContextM (Maybe Questionnaire) -findQuestionnaireByUuid' qtnUuid = do - tenantUuid <- asks currentTenantUuid - mEntity <- createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString qtnUuid)] - case mEntity of - Just entity -> enhance entity >>= return . Just - Nothing -> return Nothing - -findQuestionnaireSuggestionByUuid' :: U.UUID -> AppContextM (Maybe QuestionnaireSuggestion) -findQuestionnaireSuggestionByUuid' uuid = do - tenantUuid <- asks currentTenantUuid - createFindEntityWithFieldsByFn' "uuid, name, description" entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] - -findQuestionnaireForSquashing :: AppContextM [U.UUID] -findQuestionnaireForSquashing = do - let sql = "SELECT uuid FROM questionnaire WHERE squashed = false" - logInfoI _CMP_DATABASE (trim sql) - let action conn = query_ conn (fromString sql) - entities <- runDB action - return . concat $ entities - -findQuestionnaireDetail :: U.UUID -> AppContextM QuestionnaireDetail -findQuestionnaireDetail uuid = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString $ - f'' - "SELECT qtn.uuid, \ - \ qtn.name, \ - \ qtn.visibility, \ - \ qtn.sharing, \ - \ qtn.knowledge_model_package_id, \ - \ qtn.selected_question_tag_uuids, \ - \ qtn.is_template, \ - \ qtn_mig.new_questionnaire_uuid AS migration_uuid, \ - \ ${questionnaireDetailPermSql}, \ - \ ( \ - \ SELECT count(*) \ - \ FROM questionnaire_action \ - \ WHERE tenant_uuid = '${tenantUuid}' \ - \ ) as questionnaire_actions, \ - \ ( \ - \ SELECT count(*) \ - \ FROM questionnaire_importer \ - \ WHERE tenant_uuid = '${tenantUuid}' \ - \ ) as questionnaire_importers, \ - \ ( \ - \ SELECT count(*) \ - \ FROM questionnaire_file \ - \ WHERE tenant_uuid = '${tenantUuid}' AND questionnaire_uuid = '${questionnaireUuid}' \ - \ ) as file_count \ - \FROM questionnaire qtn \ - \LEFT JOIN questionnaire_migration qtn_mig ON qtn.uuid = qtn_mig.old_questionnaire_uuid AND qtn.tenant_uuid = qtn_mig.tenant_uuid \ - \WHERE qtn.tenant_uuid = ? AND qtn.uuid = ?" - [ ("questionnaireDetailPermSql", questionnaireDetailPermSql) - , ("questionnaireUuid", U.toString uuid) - , ("tenantUuid", U.toString tenantUuid) - ] - let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] - let params = fmap snd queryParams - logQuery sql params - let action conn = query conn sql params - runOneEntityDB entityName action queryParams - -findQuestionnaireDetailQuestionnaire :: U.UUID -> AppContextM QuestionnaireDetailQuestionnaire -findQuestionnaireDetailQuestionnaire uuid = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString $ - f'' - "SELECT qtn.uuid, \ - \ qtn.name, \ - \ qtn.visibility, \ - \ qtn.sharing, \ - \ qtn.knowledge_model_package_id, \ - \ qtn.selected_question_tag_uuids, \ - \ qtn.is_template, \ - \ qtn_mig.new_questionnaire_uuid AS migration_uuid, \ - \ ${questionnaireDetailPermSql}, \ - \ ( \ - \ SELECT count(*) \ - \ FROM questionnaire_action \ - \ WHERE tenant_uuid = '${tenantUuid}' \ - \ ) as questionnaire_actions, \ - \ ( \ - \ SELECT count(*) \ - \ FROM questionnaire_importer \ - \ WHERE tenant_uuid = '${tenantUuid}' \ - \ ) as questionnaire_importers, \ - \ ( \ - \ SELECT array_agg(concat(uuid, '<:::::>', \ - \ file_name, '<:::::>', \ - \ content_type, '<:::::>', \ - \ file_size \ - \ )) \ - \ FROM questionnaire_file \ - \ WHERE tenant_uuid = '${tenantUuid}' AND questionnaire_uuid = '${questionnaireUuid}' \ - \ ) as files \ - \FROM questionnaire qtn \ - \LEFT JOIN questionnaire_migration qtn_mig ON qtn.uuid = qtn_mig.old_questionnaire_uuid AND qtn.tenant_uuid = qtn_mig.tenant_uuid \ - \WHERE qtn.tenant_uuid = ? AND qtn.uuid = ?" - [ ("questionnaireUuid", U.toString uuid) - , ("questionnaireDetailPermSql", questionnaireDetailPermSql) - , ("tenantUuid", U.toString tenantUuid) - ] - let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] - let params = fmap snd queryParams - logQuery sql params - let action conn = query conn sql params - runOneEntityDB entityName action queryParams - -findQuestionnaireDetailPreview :: U.UUID -> AppContextM QuestionnaireDetailPreview -findQuestionnaireDetailPreview uuid = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString $ - f'' - "SELECT qtn.uuid, \ - \ qtn.name, \ - \ qtn.visibility, \ - \ qtn.sharing, \ - \ qtn.knowledge_model_package_id, \ - \ qtn.is_template, \ - \ qtn.document_template_id, \ - \ qtn_mig.new_questionnaire_uuid AS migration_uuid, \ - \ ${questionnaireDetailPermSql}, \ - \ dt_format.uuid, \ - \ dt_format.name, \ - \ dt_format.icon, \ - \ ( \ - \ SELECT count(*) \ - \ FROM questionnaire_file \ - \ WHERE tenant_uuid = '${tenantUuid}' AND questionnaire_uuid = '${questionnaireUuid}' \ - \ ) as file_count \ - \FROM questionnaire qtn \ - \LEFT JOIN questionnaire_migration qtn_mig ON qtn.uuid = qtn_mig.old_questionnaire_uuid AND qtn.tenant_uuid = qtn_mig.tenant_uuid \ - \LEFT JOIN document_template dt ON qtn.document_template_id = dt.id AND qtn.tenant_uuid = dt.tenant_uuid \ - \LEFT JOIN document_template_format dt_format ON qtn.document_template_id = dt_format.document_template_id AND qtn.format_uuid = dt_format.uuid AND qtn.tenant_uuid = dt_format.tenant_uuid \ - \WHERE qtn.tenant_uuid = ? AND qtn.uuid = ?" - [ ("questionnaireDetailPermSql", questionnaireDetailPermSql) - , ("questionnaireUuid", U.toString uuid) - , ("tenantUuid", U.toString tenantUuid) - ] - let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] - let params = fmap snd queryParams - logQuery sql params - let action conn = query conn sql params - runOneEntityDB entityName action queryParams - -findQuestionnaireDetailSettings :: U.UUID -> AppContextM QuestionnaireDetailSettings -findQuestionnaireDetailSettings uuid = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString $ - f'' - "SELECT qtn.uuid, \ - \ qtn.name, \ - \ qtn.description, \ - \ qtn.visibility, \ - \ qtn.sharing, \ - \ qtn.is_template, \ - \ qtn.project_tags, \ - \ qtn.selected_question_tag_uuids, \ - \ qtn.format_uuid, \ - \ qtn_mig.new_questionnaire_uuid AS migration_uuid, \ - \ ${questionnaireDetailPermSql}, \ - \ pkg.id as knowledge_model_package_id, \ - \ pkg.name as knowledge_model_package_name, \ - \ pkg.organization_id as knowledge_model_package_organization_id, \ - \ pkg.km_id as knowledge_model_package_km_id, \ - \ pkg.version as knowledge_model_package_version, \ - \ pkg.phase as knowledge_model_package_phase, \ - \ pkg.description as knowledge_model_package_description, \ - \ pkg.non_editable as knowledge_model_package_non_editable, \ - \ pkg.created_at as knowledge_model_package_created_at, \ - \ dt.id as document_template_id, \ - \ dt.name as document_template_name, \ - \ dt.version as document_template_version, \ - \ dt.phase as document_template_phase, \ - \ dt.description as document_template_description, \ - \ ( \ - \ SELECT jsonb_agg(jsonb_build_object('uuid', uuid, 'name', name, 'icon', icon)) \ - \ FROM (SELECT * \ - \ FROM document_template_format dt_format \ - \ WHERE dt_format.tenant_uuid = qtn.tenant_uuid AND dt_format.document_template_id = dt.id \ - \ ORDER BY dt_format.name) nested \ - \ ) AS document_template_formats, \ - \ dt.metamodel_version as document_template_metamodel_version, \ - \ ( \ - \ SELECT count(*) \ - \ FROM questionnaire_file \ - \ WHERE tenant_uuid = '${tenantUuid}' AND questionnaire_uuid = '${questionnaireUuid}' \ - \ ) as file_count \ - \FROM questionnaire qtn \ - \LEFT JOIN questionnaire_migration qtn_mig ON qtn.uuid = qtn_mig.old_questionnaire_uuid AND qtn.tenant_uuid = qtn_mig.tenant_uuid \ - \LEFT JOIN knowledge_model_package pkg ON qtn.knowledge_model_package_id = pkg.id AND qtn.tenant_uuid = pkg.tenant_uuid \ - \LEFT JOIN document_template dt ON qtn.document_template_id = dt.id AND qtn.tenant_uuid = dt.tenant_uuid \ - \WHERE qtn.tenant_uuid = ? AND qtn.uuid = ?" - [ ("questionnaireDetailPermSql", questionnaireDetailPermSql) - , ("questionnaireUuid", U.toString uuid) - , ("tenantUuid", U.toString tenantUuid) - ] - let queryParams = [("tenant_uuid", U.toString tenantUuid), ("uuid", U.toString uuid)] - let params = fmap snd queryParams - logQuery sql params - let action conn = query conn sql params - runOneEntityDB entityName action queryParams - -questionnaireDetailPermSql :: String -questionnaireDetailPermSql = - "(SELECT array_agg(CONCAT(qtn_acl_user.user_uuid, '::', qtn_acl_user.perms, '::', u.uuid, '::', u.first_name, \ - \ '::', u.last_name, '::', u.email, '::', u.image_url)) \ - \ FROM questionnaire_perm_user qtn_acl_user \ - \ JOIN user_entity u on u.uuid = qtn_acl_user.user_uuid \ - \ WHERE questionnaire_uuid = qtn.uuid \ - \ GROUP BY questionnaire_uuid) as user_permissions, \ - \(SELECT array_agg(CONCAT(qtn_acl_group.user_group_uuid, '::', qtn_acl_group.perms, '::', ug.uuid, '::', ug.name, \ - \ '::', ug.private, '::', ug.description)) \ - \ FROM questionnaire_perm_group qtn_acl_group \ - \ JOIN user_group ug on ug.uuid = qtn_acl_group.user_group_uuid \ - \ WHERE questionnaire_uuid = qtn.uuid \ - \ GROUP BY questionnaire_uuid) as group_permissions" - -countQuestionnaires :: AppContextM Int -countQuestionnaires = do - tenantUuid <- asks currentTenantUuid - countQuestionnairesWithTenant tenantUuid - -countQuestionnairesWithTenant :: U.UUID -> AppContextM Int -countQuestionnairesWithTenant tenantUuid = createCountByFn entityName tenantCondition [U.toString tenantUuid] - -insertQuestionnaire :: Questionnaire -> AppContextM Int64 -insertQuestionnaire qtn = do - -- Insert questionnaire - let sql = - fromString - "INSERT INTO questionnaire VALUES (?, ?, ?, ?, ?, ?::uuid[], ?, ?, ?, ?, ?, ?, ?, ?, ?, ?::text[])" - let params = toRow qtn - logQuery sql params - let action conn = execute conn sql params - runDB action - -- Insert questionnaire permissions - traverse_ insertQuestionnairePerm qtn.permissions - return 1 - -updateQuestionnaireByUuid :: Questionnaire -> AppContextM () -updateQuestionnaireByUuid qtn = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString - "UPDATE questionnaire SET uuid = ?, name = ?, visibility = ?, sharing = ?, knowledge_model_package_id = ?, selected_question_tag_uuids = ?::uuid[], document_template_id = ?, format_uuid = ?, created_by = ?, created_at = ?, updated_at = ?, description = ?, is_template = ?, squashed = ?, tenant_uuid = ?, project_tags = ?::text[] WHERE tenant_uuid = ? AND uuid = ?" - let params = toRow qtn ++ [toField tenantUuid, toField . U.toText $ qtn.uuid] - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - deleteQuestionnairePermsFiltered [("questionnaire_uuid", U.toString qtn.uuid)] - traverse_ insertQuestionnairePerm qtn.permissions - -updateQuestionnaireSquashedByUuid :: U.UUID -> Bool -> AppContextM Int64 -updateQuestionnaireSquashedByUuid uuid squashed = do - tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire SET squashed = ? WHERE tenant_uuid = ? AND uuid = ?" - let params = [toField squashed, toField tenantUuid, toField . U.toText $ uuid] - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - -updateQuestionnaireSquashedAndUpdatedAtByUuid :: U.UUID -> Bool -> UTCTime -> AppContextM Int64 -updateQuestionnaireSquashedAndUpdatedAtByUuid uuid squashed updatedAt = do - tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire SET squashed = ?, updated_at = ? WHERE tenant_uuid = ? AND uuid = ?" - let params = [toField squashed, toField updatedAt, toField tenantUuid, toField . U.toText $ uuid] - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - -updateQuestionnaireUpdatedAtByUuid :: U.UUID -> AppContextM Int64 -updateQuestionnaireUpdatedAtByUuid uuid = do - tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire SET updated_at = now() WHERE tenant_uuid = ? AND uuid = ?" - let params = [toField tenantUuid, toField . U.toText $ uuid] - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - -deleteQuestionnaires :: AppContextM Int64 -deleteQuestionnaires = createDeleteEntitiesFn entityName - -deleteQuestionnairesFiltered :: [(String, String)] -> AppContextM Int64 -deleteQuestionnairesFiltered params = do - tenantUuid <- asks currentTenantUuid - createDeleteEntitiesByFn entityName (tenantQueryUuid tenantUuid : params) - -deleteQuestionnaireByUuid :: U.UUID -> AppContextM Int64 -deleteQuestionnaireByUuid uuid = do - tenantUuid <- asks currentTenantUuid - createDeleteEntityByFn entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] - --- ------------------------------------------------------------------------------------------------------------------------------ --- PRIVATE --- ------------------------------------------------------------------------------------------------------------------------------ -qtnSelectSql tenantUuid userUuid perm = - f' - "SELECT qtn.* \ - \FROM questionnaire qtn \ - \LEFT JOIN questionnaire_perm_user qtn_acl_user ON qtn.uuid = qtn_acl_user.questionnaire_uuid \ - \LEFT JOIN questionnaire_perm_group qtn_acl_group ON qtn.uuid = qtn_acl_group.questionnaire_uuid \ - \WHERE %s %s" - [qtnWhereSql tenantUuid userUuid perm] - -qtnWhereSql tenantUuid userUuid perm = - f' - "qtn.tenant_uuid = '%s' \ - \AND (visibility = 'VisibleEditQuestionnaire' \ - \OR visibility = 'VisibleCommentQuestionnaire' \ - \OR visibility = 'VisibleViewQuestionnaire' \ - \OR (visibility = 'PrivateQuestionnaire' AND qtn_acl_user.user_uuid = '%s' AND qtn_acl_user.perms @> ARRAY %s))" - [tenantUuid, userUuid, perm] - -enhance :: Questionnaire -> AppContextM Questionnaire -enhance qtn = do - ps <- findQuestionnairePermsFiltered [("questionnaire_uuid", U.toString qtn.uuid)] - return $ qtn {permissions = ps} diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireEventDAO.hs b/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireEventDAO.hs deleted file mode 100644 index f0d398a04..000000000 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnaireEventDAO.hs +++ /dev/null @@ -1,217 +0,0 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO where - -import Control.Monad (unless, void) -import Control.Monad.Reader (asks) -import Data.Foldable (traverse_) -import qualified Data.List as L -import Data.String (fromString) -import qualified Data.UUID as U -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.ToField -import Database.PostgreSQL.Simple.ToRow -import GHC.Int - -import Shared.Common.Model.Common.Lens -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.PageMetadata -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Shared.Common.Util.Logger -import Shared.Common.Util.String -import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Questionnaire.QuestionnaireEvent () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireEventList () -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireEventLenses () -import Wizard.Model.Questionnaire.QuestionnaireEventList - -entityName = "questionnaire_event" - -pageLabel = "questionnaireEvents" - -findQuestionnaireEventsPage :: U.UUID -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireEventList) -findQuestionnaireEventsPage questionnaireUuid pageable sort = do - -- 1. Prepare variables - do - tenantUuid <- asks (.tenantUuid') - let (sizeI, pageI, skip, limit) = preparePaginationVariables pageable - -- 2. Get total count - let countSql = - fromString - "SELECT count(*) \ - \FROM questionnaire_event \ - \WHERE tenant_uuid = ? AND questionnaire_uuid = ?" - let countParams = [U.toString tenantUuid, U.toString questionnaireUuid] - logQuery countSql countParams - let action conn = query conn countSql countParams - result <- runDB action - let count = - case result of - [count] -> fromOnly count - _ -> 0 - -- 3. Get entities - let sql = - fromString $ - f'' - "SELECT questionnaire_event.uuid, \ - \ questionnaire_event.event_type, \ - \ questionnaire_event.path, \ - \ questionnaire_event.created_at, \ - \ questionnaire_event.value_type, \ - \ questionnaire_event.value, \ - \ questionnaire_event.value_id, \ - \ questionnaire_event.value_raw, \ - \ questionnaire_event.created_by AS created_by_uuid, \ - \ user_entity.first_name AS created_by_first_name, \ - \ user_entity.last_name AS created_by_last_name, \ - \ gravatar_hash(user_entity.email) AS created_by_gravatar_hash, \ - \ user_entity.image_url AS created_by_email \ - \FROM questionnaire_event \ - \ LEFT JOIN user_entity ON user_entity.uuid = questionnaire_event.created_by \ - \WHERE questionnaire_event.tenant_uuid = ? \ - \ AND questionnaire_event.questionnaire_uuid = ? \ - \${sort} \ - \OFFSET ${offset} \ - \LIMIT ${limit}" - [ ("sort", mapSort sort) - , ("offset", show skip) - , ("limit", show sizeI) - ] - let params = [U.toString tenantUuid, U.toString questionnaireUuid] - logQuery sql params - let action conn = query conn sql params - entities <- runDB action - -- 4. Constructor response - let metadata = - PageMetadata - { size = sizeI - , totalElements = count - , totalPages = computeTotalPage count sizeI - , number = pageI - } - return $ Page pageLabel metadata entities - -findQuestionnaireEventsByQuestionnaireUuid :: U.UUID -> AppContextM [QuestionnaireEvent] -findQuestionnaireEventsByQuestionnaireUuid questionnaireUuid = do - tenantUuid <- asks currentTenantUuid - let sql = - "SELECT * \ - \FROM questionnaire_event \ - \WHERE tenant_uuid = ? AND questionnaire_uuid = ? \ - \ORDER BY created_at" - let params = [U.toString tenantUuid, U.toString questionnaireUuid] - logInfoI _CMP_DATABASE sql - let action conn = query conn (fromString sql) params - runDB action - -findQuestionnaireEventListsByQuestionnaireUuid :: U.UUID -> AppContextM [QuestionnaireEventList] -findQuestionnaireEventListsByQuestionnaireUuid questionnaireUuid = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString - "SELECT questionnaire_event.uuid, \ - \ questionnaire_event.event_type, \ - \ questionnaire_event.path, \ - \ questionnaire_event.created_at, \ - \ questionnaire_event.value_type, \ - \ questionnaire_event.value, \ - \ questionnaire_event.value_id, \ - \ questionnaire_event.value_raw, \ - \ questionnaire_event.created_by AS created_by_uuid, \ - \ user_entity.first_name AS created_by_first_name, \ - \ user_entity.last_name AS created_by_last_name, \ - \ gravatar_hash(user_entity.email) AS created_by_gravatar_hash, \ - \ user_entity.image_url AS created_by_email \ - \FROM questionnaire_event \ - \ LEFT JOIN user_entity ON user_entity.uuid = questionnaire_event.created_by \ - \WHERE questionnaire_event.tenant_uuid = ? \ - \ AND questionnaire_event.questionnaire_uuid = ? \ - \ORDER BY created_at" - let params = [U.toString tenantUuid, U.toString questionnaireUuid] - logInfoI _CMP_DATABASE sql - let action conn = query conn (fromString sql) params - runDB action - -findQuestionnaireEventByUuid :: U.UUID -> AppContextM QuestionnaireEvent -findQuestionnaireEventByUuid uuid = do - tenantUuid <- asks currentTenantUuid - createFindEntityWithFieldsByFn "*" False entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] - -findQuestionnaireEventByUuid' :: U.UUID -> AppContextM (Maybe QuestionnaireEvent) -findQuestionnaireEventByUuid' uuid = do - tenantUuid <- asks currentTenantUuid - createFindEntityByFn' entityName [tenantQueryUuid tenantUuid, ("uuid", U.toString uuid)] - -insertQuestionnaireEvent :: QuestionnaireEvent -> AppContextM Int64 -insertQuestionnaireEvent = createInsertFn entityName - -insertQuestionnaireEventWithTimestampUpdate :: U.UUID -> QuestionnaireEvent -> AppContextM () -insertQuestionnaireEventWithTimestampUpdate qtnUuid event = do - tenantUuid <- asks currentTenantUuid - let sql = - fromString $ - f' - "UPDATE questionnaire SET squashed = false, updated_at = now() WHERE tenant_uuid = ? AND uuid = ?; \ - \INSERT INTO questionnaire_event VALUES (%s)" - [generateQuestionMarks' event] - let params = - [ toField tenantUuid - , toField qtnUuid - ] - ++ toRow event - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - return () - -insertQuestionnaireEvents :: [QuestionnaireEvent] -> AppContextM Int64 -insertQuestionnaireEvents events = do - if null events - then return 0 - else do - tenantUuid <- asks currentTenantUuid - let sql = - fromString $ - f' - "INSERT INTO questionnaire_event VALUES %s" - [generateQuestionMarksForEntities events] - let params = concatMap toRow events - logInsertAndUpdate sql params - let action conn = execute conn sql params - runDB action - -updateQuestionnaireEventByUuid :: QuestionnaireEvent -> AppContextM Int64 -updateQuestionnaireEventByUuid event = do - tenantUuid <- asks currentTenantUuid - let sql = fromString "UPDATE questionnaire_event SET uuid = ?, event_type = ?, path = ?, created_at = ?, created_by = ?, questionnaire_uuid = ?, tenant_uuid = ?, value_type = ?, value = ?, value_id = ?, value_raw = ? WHERE uuid = ? AND tenant_uuid = ?" - let params = toRow event ++ [toField (getUuid event), toField tenantUuid] - logQuery sql params - let action conn = execute conn sql params - runDB action - -syncQuestionnaireEventsWithDb :: [QuestionnaireEvent] -> [QuestionnaireEvent] -> AppContextM () -syncQuestionnaireEventsWithDb oldEvents newEvents = do - let dbEventMap = map getUuid oldEvents - let newEventMap = map getUuid newEvents - let toDelete = dbEventMap L.\\ newEventMap - let toInsert = filter (\e -> getUuid e `notElem` dbEventMap) newEvents - let toUpdate = filter (\e -> e `notElem` oldEvents && getUuid e `elem` dbEventMap) newEvents - unless (null toInsert) (void $ insertQuestionnaireEvents toInsert) - traverse_ updateQuestionnaireEventByUuid toUpdate - void $ deleteQuestionnaireEventsByUuids toDelete - -deleteQuestionnaireEvents :: AppContextM Int64 -deleteQuestionnaireEvents = createDeleteEntitiesFn entityName - -deleteQuestionnaireEventsByUuids :: [U.UUID] -> AppContextM () -deleteQuestionnaireEventsByUuids eventUuids = - unless - (null eventUuids) - (void $ createDeleteEntityWhereInFn entityName "uuid" (fmap U.toString eventUuids)) - -deleteQuestionnaireEventsByQuestionnaireUuid :: U.UUID -> AppContextM Int64 -deleteQuestionnaireEventsByQuestionnaireUuid questionnaireUuid = do - tenantUuid <- asks currentTenantUuid - createDeleteEntitiesByFn entityName [tenantQueryUuid tenantUuid, ("questionnaire_uuid", U.toString questionnaireUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnairePermDAO.hs b/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnairePermDAO.hs deleted file mode 100644 index 4efa45e1f..000000000 --- a/wizard-server/src/Wizard/Database/DAO/Questionnaire/QuestionnairePermDAO.hs +++ /dev/null @@ -1,57 +0,0 @@ -module Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO where - -import Control.Monad.Reader (asks) -import Data.String -import qualified Data.UUID as U -import Database.PostgreSQL.Simple -import GHC.Int - -import Shared.Common.Util.Logger -import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Questionnaire.QuestionnairePerm () -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnairePerm - -entityName_user = "questionnaire_perm_user" - -entityName_group = "questionnaire_perm_group" - -findQuestionnairePermsFiltered :: [(String, String)] -> AppContextM [QuestionnairePerm] -findQuestionnairePermsFiltered queryParams = do - let sql = - fromString $ - f' - "SELECT questionnaire_uuid, 'UserQuestionnairePermType' AS member_type, user_uuid as member_uuid, perms, tenant_uuid \ - \ FROM %s \ - \ WHERE %s \ - \ UNION \ - \ SELECT questionnaire_uuid, 'UserGroupQuestionnairePermType' AS member_type, user_group_uuid as member_uuid, perms, tenant_uuid \ - \ FROM %s \ - \ WHERE %s" - [entityName_user, mapToDBQuerySql queryParams, entityName_group, mapToDBQuerySql queryParams] - let params = fmap snd queryParams ++ fmap snd queryParams - logQuery sql params - let action conn = query conn sql params - runDB action - -insertQuestionnairePerm :: QuestionnairePerm -> AppContextM Int64 -insertQuestionnairePerm perm = - case perm.memberType of - UserQuestionnairePermType -> createInsertFn entityName_user perm - UserGroupQuestionnairePermType -> createInsertFn entityName_group perm - -deleteQuestionnairePerms :: AppContextM Int64 -deleteQuestionnairePerms = do - createDeleteEntitiesFn entityName_user - createDeleteEntitiesFn entityName_group - -deleteQuestionnairePermsFiltered :: [(String, String)] -> AppContextM Int64 -deleteQuestionnairePermsFiltered queryParams = do - createDeleteEntitiesByFn entityName_user queryParams - createDeleteEntitiesByFn entityName_group queryParams - -deleteQuestionnairePermGroupByUserGroupUuid :: U.UUID -> AppContextM Int64 -deleteQuestionnairePermGroupByUserGroupUuid userGroupUuid = do - tenantUuid <- asks currentTenantUuid - createDeleteEntitiesByFn entityName_group [tenantQueryUuid tenantUuid, ("user_group_uuid", U.toString userGroupUuid)] diff --git a/wizard-server/src/Wizard/Database/DAO/Tenant/Config/TenantConfigQuestionnaireDAO.hs b/wizard-server/src/Wizard/Database/DAO/Tenant/Config/TenantConfigProjectDAO.hs similarity index 56% rename from wizard-server/src/Wizard/Database/DAO/Tenant/Config/TenantConfigQuestionnaireDAO.hs rename to wizard-server/src/Wizard/Database/DAO/Tenant/Config/TenantConfigProjectDAO.hs index 34b0f7a05..16aaffcd2 100644 --- a/wizard-server/src/Wizard/Database/DAO/Tenant/Config/TenantConfigQuestionnaireDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Tenant/Config/TenantConfigProjectDAO.hs @@ -1,4 +1,4 @@ -module Wizard.Database.DAO.Tenant.Config.TenantConfigQuestionnaireDAO where +module Wizard.Database.DAO.Tenant.Config.TenantConfigProjectDAO where import Control.Monad.Reader (asks) import Data.String @@ -9,29 +9,29 @@ import Database.PostgreSQL.Simple.ToRow import GHC.Int import Wizard.Database.DAO.Common -import Wizard.Database.Mapping.Tenant.Config.TenantConfigQuestionnaire () +import Wizard.Database.Mapping.Tenant.Config.TenantConfigProject () import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () import Wizard.Model.Tenant.Config.TenantConfig -entityName = "config_questionnaire" +entityName = "config_project" -findTenantConfigQuestionnaire :: AppContextM TenantConfigQuestionnaire -findTenantConfigQuestionnaire = do +findTenantConfigProject :: AppContextM TenantConfigProject +findTenantConfigProject = do tenantUuid <- asks currentTenantUuid - findTenantConfigQuestionnaireByUuid tenantUuid + findTenantConfigProjectByUuid tenantUuid -findTenantConfigQuestionnaireByUuid :: U.UUID -> AppContextM TenantConfigQuestionnaire -findTenantConfigQuestionnaireByUuid uuid = createFindEntityByFn entityName [("tenant_uuid", U.toString uuid)] +findTenantConfigProjectByUuid :: U.UUID -> AppContextM TenantConfigProject +findTenantConfigProjectByUuid uuid = createFindEntityByFn entityName [("tenant_uuid", U.toString uuid)] -insertTenantConfigQuestionnaire :: TenantConfigQuestionnaire -> AppContextM Int64 -insertTenantConfigQuestionnaire = createInsertFn entityName +insertTenantConfigProject :: TenantConfigProject -> AppContextM Int64 +insertTenantConfigProject = createInsertFn entityName -updateTenantConfigQuestionnaire :: TenantConfigQuestionnaire -> AppContextM Int64 -updateTenantConfigQuestionnaire config = do +updateTenantConfigProject :: TenantConfigProject -> AppContextM Int64 +updateTenantConfigProject config = do let sql = fromString - "UPDATE config_questionnaire \ + "UPDATE config_project \ \SET tenant_uuid = ?, \ \ visibility_enabled = ?, \ \ visibility_default_value = ?, \ @@ -54,5 +54,5 @@ updateTenantConfigQuestionnaire config = do let action conn = execute conn sql params runDB action -deleteTenantConfigQuestionnaires :: AppContextM Int64 -deleteTenantConfigQuestionnaires = createDeleteEntitiesFn entityName +deleteTenantConfigProjects :: AppContextM Int64 +deleteTenantConfigProjects = createDeleteEntitiesFn entityName diff --git a/wizard-server/src/Wizard/Database/DAO/Tenant/TenantLimitBundleDAO.hs b/wizard-server/src/Wizard/Database/DAO/Tenant/TenantLimitBundleDAO.hs index d75a43695..90373c6a1 100644 --- a/wizard-server/src/Wizard/Database/DAO/Tenant/TenantLimitBundleDAO.hs +++ b/wizard-server/src/Wizard/Database/DAO/Tenant/TenantLimitBundleDAO.hs @@ -34,7 +34,7 @@ updateLimitBundleByUuid limitBundle = do let updatedTenantLimitBundle = limitBundle {updatedAt = now} let sql = fromString - "UPDATE tenant_limit_bundle SET uuid = ?, users = ?, active_users = ?, knowledge_models = ?, knowledge_model_editors = ?, document_templates = ?, questionnaires = ?, documents =?, storage = ?, created_at = ?, updated_at = ?, document_template_drafts = ?, locales = ? WHERE uuid = ?" + "UPDATE tenant_limit_bundle SET uuid = ?, users = ?, active_users = ?, knowledge_models = ?, knowledge_model_editors = ?, document_templates = ?, projects = ?, documents =?, storage = ?, created_at = ?, updated_at = ?, document_template_drafts = ?, locales = ? WHERE uuid = ?" let params = toRow updatedTenantLimitBundle ++ [toField updatedTenantLimitBundle.uuid] logQuery sql params let action conn = execute conn sql params diff --git a/wizard-server/src/Wizard/Database/Mapping/Document/Document.hs b/wizard-server/src/Wizard/Database/Mapping/Document/Document.hs index e20b5cb20..e9a7cfbd7 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Document/Document.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Document/Document.hs @@ -27,9 +27,9 @@ instance ToRow Document where , toField name , toField state , toField durability - , toField questionnaireUuid - , toField questionnaireEventUuid - , toField questionnaireRepliesHash + , toField projectUuid + , toField projectEventUuid + , toField projectRepliesHash , toField documentTemplateId , toField formatUuid , toField createdBy @@ -49,9 +49,9 @@ instance FromRow Document where name <- field state <- field durability <- field - questionnaireUuid <- field - questionnaireEventUuid <- field - questionnaireRepliesHash <- field + projectUuid <- field + projectEventUuid <- field + projectRepliesHash <- field documentTemplateId <- field formatUuid <- field createdBy <- field diff --git a/wizard-server/src/Wizard/Database/Mapping/Document/DocumentList.hs b/wizard-server/src/Wizard/Database/Mapping/Document/DocumentList.hs index 3d6a843af..8a1c1fbf5 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Document/DocumentList.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Document/DocumentList.hs @@ -13,10 +13,10 @@ instance FromRow DocumentList where uuid <- field name <- field state <- field - questionnaireUuid <- field - questionnaireName <- field - questionnaireEventUuid <- field - questionnaireVersion <- field + projectUuid <- field + projectName <- field + projectEventUuid <- field + projectVersion <- field documentTemplateId <- field documentTemplateName <- field documentTemplateFormats <- fieldWith fromJSONField diff --git a/wizard-server/src/Wizard/Database/Mapping/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs b/wizard-server/src/Wizard/Database/Mapping/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs index 33f7bb355..34a168039 100644 --- a/wizard-server/src/Wizard/Database/Mapping/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs +++ b/wizard-server/src/Wizard/Database/Mapping/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs @@ -9,9 +9,9 @@ import Database.PostgreSQL.Simple.ToRow import Database.PostgreSQL.Simple.Types import Shared.Common.Util.Uuid -import Wizard.Database.Mapping.Questionnaire.QuestionnaireEvent +import Wizard.Database.Mapping.Project.ProjectEvent import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorReply -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply instance ToRow KnowledgeModelEditorReply where toRow KnowledgeModelEditorReply {..} = diff --git a/wizard-server/src/Wizard/Database/Mapping/QuestionnaireAction/QuestionnaireAction.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Action/ProjectAction.hs similarity index 76% rename from wizard-server/src/Wizard/Database/Mapping/QuestionnaireAction/QuestionnaireAction.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Action/ProjectAction.hs index d1d441d99..1570eb3a6 100644 --- a/wizard-server/src/Wizard/Database/Mapping/QuestionnaireAction/QuestionnaireAction.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Action/ProjectAction.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.QuestionnaireAction.QuestionnaireAction where +module Wizard.Database.Mapping.Project.Action.ProjectAction where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromField @@ -7,11 +7,11 @@ import Database.PostgreSQL.Simple.ToField import Database.PostgreSQL.Simple.ToRow import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackagePatternJM () -import Wizard.Model.QuestionnaireAction.QuestionnaireAction +import Wizard.Model.Project.Action.ProjectAction -instance ToRow QuestionnaireAction where - toRow QuestionnaireAction {..} = - [ toField qaId +instance ToRow ProjectAction where + toRow ProjectAction {..} = + [ toField paId , toField name , toField organizationId , toField actionId @@ -29,9 +29,9 @@ instance ToRow QuestionnaireAction where , toField updatedAt ] -instance FromRow QuestionnaireAction where +instance FromRow ProjectAction where fromRow = do - qaId <- field + paId <- field name <- field organizationId <- field actionId <- field @@ -47,4 +47,4 @@ instance FromRow QuestionnaireAction where tenantUuid <- field createdAt <- field updatedAt <- field - return $ QuestionnaireAction {..} + return $ ProjectAction {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireComment.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectComment.hs similarity index 63% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireComment.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectComment.hs index 884d46a1d..e9485fa25 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireComment.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectComment.hs @@ -1,14 +1,14 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireComment where +module Wizard.Database.Mapping.Project.Comment.ProjectComment where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow import Database.PostgreSQL.Simple.ToField import Database.PostgreSQL.Simple.ToRow -import Wizard.Model.Questionnaire.QuestionnaireComment +import Wizard.Model.Project.Comment.ProjectComment -instance ToRow QuestionnaireComment where - toRow QuestionnaireComment {..} = +instance ToRow ProjectComment where + toRow ProjectComment {..} = [ toField uuid , toField text , toField threadUuid @@ -18,7 +18,7 @@ instance ToRow QuestionnaireComment where , toField tenantUuid ] -instance FromRow QuestionnaireComment where +instance FromRow ProjectComment where fromRow = do uuid <- field text <- field @@ -27,4 +27,4 @@ instance FromRow QuestionnaireComment where createdAt <- field updatedAt <- field tenantUuid <- field - return QuestionnaireComment {..} + return ProjectComment {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThread.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThread.hs similarity index 75% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThread.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThread.hs index 2bd6cd19d..1b3673afa 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThread.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThread.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThread where +module Wizard.Database.Mapping.Project.Comment.ProjectCommentThread where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow @@ -9,15 +9,15 @@ import Database.PostgreSQL.Simple.Types import Shared.Common.Util.Date import Shared.Common.Util.String (splitOn) import Shared.Common.Util.Uuid -import Wizard.Model.Questionnaire.QuestionnaireComment +import Wizard.Model.Project.Comment.ProjectComment -instance ToRow QuestionnaireCommentThread where - toRow QuestionnaireCommentThread {..} = +instance ToRow ProjectCommentThread where + toRow ProjectCommentThread {..} = [ toField uuid , toField path , toField resolved , toField private - , toField questionnaireUuid + , toField projectUuid , toField createdBy , toField createdAt , toField updatedAt @@ -27,13 +27,13 @@ instance ToRow QuestionnaireCommentThread where , toField notificationRequired ] -instance FromRow QuestionnaireCommentThread where +instance FromRow ProjectCommentThread where fromRow = do uuid <- field path <- field resolved <- field private <- field - questionnaireUuid <- field + projectUuid <- field createdBy <- field createdAt <- field updatedAt <- field @@ -43,12 +43,12 @@ instance FromRow QuestionnaireCommentThread where notificationRequired <- field commentsArray <- fromPGArray <$> field let comments = fmap parseComment commentsArray - return $ QuestionnaireCommentThread {..} + return $ ProjectCommentThread {..} -parseComment :: String -> QuestionnaireComment +parseComment :: String -> ProjectComment parseComment commentS = let parts = splitOn ":::::" commentS - in QuestionnaireComment + in ProjectComment { uuid = u' (head parts) , text = parts !! 1 , threadUuid = u' (parts !! 2) diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadAssigned.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadAssigned.hs similarity index 79% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadAssigned.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadAssigned.hs index b1ac288be..370f50480 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadAssigned.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadAssigned.hs @@ -1,17 +1,17 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThreadAssigned where +module Wizard.Database.Mapping.Project.Comment.ProjectCommentThreadAssigned where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromField import Database.PostgreSQL.Simple.FromRow import Shared.Common.Util.Gravatar -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned import WizardLib.Public.Model.User.UserSuggestion -instance FromRow QuestionnaireCommentThreadAssigned where +instance FromRow ProjectCommentThreadAssigned where fromRow = do - questionnaireUuid <- field - questionnaireName <- field + projectUuid <- field + projectName <- field commentThreadUuid <- field path <- field resolved <- field @@ -35,4 +35,4 @@ instance FromRow QuestionnaireCommentThreadAssigned where , gravatarHash = createGravatarHash createdByEmail } _ -> Nothing - return QuestionnaireCommentThreadAssigned {..} + return ProjectCommentThreadAssigned {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadList.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadList.hs similarity index 90% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadList.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadList.hs index 0dd062820..bd345503a 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadList.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadList.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThreadList where +module Wizard.Database.Mapping.Project.Comment.ProjectCommentThreadList where import qualified Data.List as L import Database.PostgreSQL.Simple @@ -10,10 +10,10 @@ import Shared.Common.Util.Date import Shared.Common.Util.Gravatar import Shared.Common.Util.String (splitOn) import Shared.Common.Util.Uuid -import Wizard.Model.Questionnaire.QuestionnaireCommentList +import Wizard.Model.Project.Comment.ProjectCommentList import WizardLib.Public.Model.User.UserSuggestion -instance FromRow QuestionnaireCommentThreadList where +instance FromRow ProjectCommentThreadList where fromRow = do uuid <- field path <- field @@ -57,12 +57,12 @@ instance FromRow QuestionnaireCommentThreadList where _ -> Nothing commentsArray <- fromPGArray <$> field let comments = L.sort . fmap parseComment $ commentsArray - return QuestionnaireCommentThreadList {..} + return ProjectCommentThreadList {..} -parseComment :: String -> QuestionnaireCommentList +parseComment :: String -> ProjectCommentList parseComment commentS = let parts = splitOn "<:::::>" commentS - in QuestionnaireCommentList + in ProjectCommentList { uuid = u' (head parts) , text = parts !! 1 , createdAt = parsePostgresDateTime' $ parts !! 2 diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadNotification.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadNotification.hs similarity index 82% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadNotification.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadNotification.hs index 664191c30..a19ccf9a3 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCommentThreadNotification.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Comment/ProjectCommentThreadNotification.hs @@ -1,16 +1,16 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireCommentThreadNotification where +module Wizard.Database.Mapping.Project.Comment.ProjectCommentThreadNotification where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromField import Database.PostgreSQL.Simple.FromRow -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadNotification +import Wizard.Model.Project.Comment.ProjectCommentThreadNotification import WizardLib.Public.Model.User.UserSimple -instance FromRow QuestionnaireCommentThreadNotification where +instance FromRow ProjectCommentThreadNotification where fromRow = do - questionnaireUuid <- field - questionnaireName <- field + projectUuid <- field + projectName <- field tenantUuid <- field commentThreadUuid <- field path <- field @@ -52,4 +52,4 @@ instance FromRow QuestionnaireCommentThreadNotification where illustrationsColor <- field supportEmail <- field mailConfigUuid <- field - return QuestionnaireCommentThreadNotification {..} + return ProjectCommentThreadNotification {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFile.hs b/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFile.hs new file mode 100644 index 000000000..17a33f63c --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFile.hs @@ -0,0 +1,9 @@ +module Wizard.Database.Mapping.Project.File.ProjectFile where + +import Database.PostgreSQL.Simple + +import Wizard.Model.Project.File.ProjectFile + +instance ToRow ProjectFile + +instance FromRow ProjectFile diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFileList.hs b/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFileList.hs similarity index 61% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFileList.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFileList.hs index d1c31b23b..d186dd56c 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFileList.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFileList.hs @@ -1,27 +1,21 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireFileList where +module Wizard.Database.Mapping.Project.File.ProjectFileList where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow import Shared.Common.Util.Gravatar -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Model.Questionnaire.QuestionnaireSimple +import Wizard.Database.Mapping.Project.ProjectSimple +import Wizard.Model.Project.File.ProjectFileList import WizardLib.Public.Model.User.UserSuggestion -instance FromRow QuestionnaireFileList where +instance FromRow ProjectFileList where fromRow = do uuid <- field fileName <- field contentType <- field fileSize <- field createdAt <- field - questionnaireUuid <- field - questionnaireName <- field - let questionnaire = - QuestionnaireSimple - { uuid = questionnaireUuid - , name = questionnaireName - } + project <- fieldProjectSimple createdByUuid <- field createdByFirstName <- field createdByLastName <- field @@ -33,4 +27,4 @@ instance FromRow QuestionnaireFileList where let gravatarHash = createGravatarHash email in Just UserSuggestion {..} _ -> Nothing - return $ QuestionnaireFileList {..} + return $ ProjectFileList {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFileSimple.hs b/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFileSimple.hs new file mode 100644 index 000000000..29d29eba0 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/File/ProjectFileSimple.hs @@ -0,0 +1,7 @@ +module Wizard.Database.Mapping.Project.File.ProjectFileSimple where + +import Database.PostgreSQL.Simple + +import Wizard.Model.Project.File.ProjectFileSimple + +instance FromRow ProjectFileSimple diff --git a/wizard-server/src/Wizard/Database/Mapping/QuestionnaireImporter/QuestionnaireImporter.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Importer/ProjectImporter.hs similarity index 74% rename from wizard-server/src/Wizard/Database/Mapping/QuestionnaireImporter/QuestionnaireImporter.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Importer/ProjectImporter.hs index ac46aabbc..cd0864ceb 100644 --- a/wizard-server/src/Wizard/Database/Mapping/QuestionnaireImporter/QuestionnaireImporter.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Importer/ProjectImporter.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.QuestionnaireImporter.QuestionnaireImporter where +module Wizard.Database.Mapping.Project.Importer.ProjectImporter where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromField @@ -7,11 +7,11 @@ import Database.PostgreSQL.Simple.ToField import Database.PostgreSQL.Simple.ToRow import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackagePatternJM () -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter +import Wizard.Model.Project.Importer.ProjectImporter -instance ToRow QuestionnaireImporter where - toRow QuestionnaireImporter {..} = - [ toField qiId +instance ToRow ProjectImporter where + toRow ProjectImporter {..} = + [ toField piId , toField name , toField organizationId , toField importerId @@ -28,9 +28,9 @@ instance ToRow QuestionnaireImporter where , toField updatedAt ] -instance FromRow QuestionnaireImporter where +instance FromRow ProjectImporter where fromRow = do - qiId <- field + piId <- field name <- field organizationId <- field importerId <- field @@ -45,4 +45,4 @@ instance FromRow QuestionnaireImporter where tenantUuid <- field createdAt <- field updatedAt <- field - return $ QuestionnaireImporter {..} + return $ ProjectImporter {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/Migration/ProjectMigration.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Migration/ProjectMigration.hs new file mode 100644 index 000000000..150c7990b --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Migration/ProjectMigration.hs @@ -0,0 +1,25 @@ +module Wizard.Database.Mapping.Project.Migration.ProjectMigration where + +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.FromRow +import Database.PostgreSQL.Simple.ToField +import Database.PostgreSQL.Simple.ToRow +import Database.PostgreSQL.Simple.Types + +import Wizard.Model.Project.Migration.ProjectMigration + +instance ToRow ProjectMigration where + toRow ProjectMigration {..} = + [ toField oldProjectUuid + , toField newProjectUuid + , toField . PGArray $ resolvedQuestionUuids + , toField tenantUuid + ] + +instance FromRow ProjectMigration where + fromRow = do + oldProjectUuid <- field + newProjectUuid <- field + resolvedQuestionUuids <- fromPGArray <$> field + tenantUuid <- field + return $ ProjectMigration {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/Questionnaire.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Project.hs similarity index 68% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/Questionnaire.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Project.hs index 221794cd0..c62cbc041 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/Questionnaire.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Project.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.Questionnaire where +module Wizard.Database.Mapping.Project.Project where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow @@ -6,14 +6,14 @@ import Database.PostgreSQL.Simple.ToField import Database.PostgreSQL.Simple.ToRow import Database.PostgreSQL.Simple.Types -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Project.Project -instance ToRow Questionnaire where - toRow Questionnaire {..} = +instance ToRow Project where + toRow Project {..} = [ toField uuid , toField name , toField visibility @@ -32,7 +32,7 @@ instance ToRow Questionnaire where , toField . PGArray $ projectTags ] -instance FromRow Questionnaire where +instance FromRow Project where fromRow = do uuid <- field name <- field @@ -51,4 +51,4 @@ instance FromRow Questionnaire where squashed <- field tenantUuid <- field projectTags <- fromPGArray <$> field - return $ Questionnaire {..} + return $ Project {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireAcl.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectAcl.hs similarity index 71% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireAcl.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectAcl.hs index 5d0014caf..291f22c56 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireAcl.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectAcl.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireAcl where +module Wizard.Database.Mapping.Project.ProjectAcl where import qualified Data.List as L import qualified Data.UUID as U @@ -10,28 +10,28 @@ import Shared.Common.Util.Gravatar import Shared.Common.Util.String import Shared.Common.Util.Uuid import Wizard.Api.Resource.Acl.MemberDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () -loadPermissions :: U.UUID -> RowParser [QuestionnairePermDTO] -loadPermissions qtnUuid = do +loadPermissions :: U.UUID -> RowParser [ProjectPermDTO] +loadPermissions projectUuid = do mUserPermissions <- fieldWith (optionalField fromField) let userPermissions = case mUserPermissions of - Just userPermissions -> L.sort . fmap (parseUserPermission qtnUuid) . fromPGArray $ userPermissions + Just userPermissions -> L.sort . fmap (parseUserPermission projectUuid) . fromPGArray $ userPermissions Nothing -> [] mGroupPermissions <- fieldWith (optionalField fromField) let groupPermissions = case mGroupPermissions of - Just groupPermissions -> L.sort . fmap (parseGroupPermission qtnUuid) . fromPGArray $ groupPermissions + Just groupPermissions -> L.sort . fmap (parseGroupPermission projectUuid) . fromPGArray $ groupPermissions Nothing -> [] return $ userPermissions ++ groupPermissions -parseUserPermission :: U.UUID -> String -> QuestionnairePermDTO -parseUserPermission qtnUuid permission = +parseUserPermission :: U.UUID -> String -> ProjectPermDTO +parseUserPermission projectUuid permission = let parts = splitOn "::" permission - in QuestionnairePermDTO - { questionnaireUuid = qtnUuid + in ProjectPermDTO + { projectUuid = projectUuid , perms = splitOn "," . replace "}" "" . replace "{" "" $ parts !! 1 , member = UserMemberDTO @@ -45,11 +45,11 @@ parseUserPermission qtnUuid permission = imageUrl -> Just imageUrl } } -parseGroupPermission :: U.UUID -> String -> QuestionnairePermDTO -parseGroupPermission qtnUuid permission = +parseGroupPermission :: U.UUID -> String -> ProjectPermDTO +parseGroupPermission projectUuid permission = let parts = splitOn "::" permission - in QuestionnairePermDTO - { questionnaireUuid = qtnUuid + in ProjectPermDTO + { projectUuid = projectUuid , perms = splitOn "," . replace "}" "" . replace "{" "" $ parts !! 1 , member = UserGroupMemberDTO diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCreation.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectCreation.hs similarity index 60% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCreation.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectCreation.hs index 6b2fca4c6..61bcbe122 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireCreation.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectCreation.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireCreation where +module Wizard.Database.Mapping.Project.ProjectCreation where import Database.PostgreSQL.Simple.FromField import Database.PostgreSQL.Simple.ToField @@ -6,8 +6,8 @@ import Database.PostgreSQL.Simple.ToField import Shared.Common.Database.Mapping.Common import Wizard.Model.Tenant.Config.TenantConfig -instance ToField QuestionnaireCreation where +instance ToField ProjectCreation where toField = toFieldGenericEnum -instance FromField QuestionnaireCreation where +instance FromField ProjectCreation where fromField = fromFieldGenericEnum diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetail.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetail.hs new file mode 100644 index 000000000..a72bde864 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetail.hs @@ -0,0 +1,28 @@ +module Wizard.Database.Mapping.Project.ProjectDetail where + +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.FromRow +import Database.PostgreSQL.Simple.Types + +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Database.Mapping.Project.ProjectAcl +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectState () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Project.Detail.ProjectDetail + +instance FromRow ProjectDetail where + fromRow = do + uuid <- field + name <- field + visibility <- field + sharing <- field + knowledgeModelPackageId <- field + selectedQuestionTagUuids <- fromPGArray <$> field + isTemplate <- field + migrationUuid <- field + permissions <- loadPermissions uuid + projectActionsAvailable <- field + projectImportersAvailable <- field + fileCount <- field + return $ ProjectDetail {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailPreview.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailPreview.hs similarity index 62% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailPreview.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailPreview.hs index 6c6489745..f3ea99377 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailPreview.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailPreview.hs @@ -1,17 +1,17 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireDetailPreview where +module Wizard.Database.Mapping.Project.ProjectDetailPreview where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateJM () import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateFormatSimple -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireAcl -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Questionnaire.QuestionnaireDetailPreview +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Database.Mapping.Project.ProjectAcl +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Project.Detail.ProjectDetailPreview -instance FromRow QuestionnaireDetailPreview where +instance FromRow ProjectDetailPreview where fromRow = do uuid <- field name <- field @@ -30,4 +30,4 @@ instance FromRow QuestionnaireDetailPreview where (Just uuid, Just name, Just icon) -> Just $ DocumentTemplateFormatSimple {uuid = uuid, name = name, icon = icon} _ -> Nothing fileCount <- field - return $ QuestionnaireDetailPreview {..} + return $ ProjectDetailPreview {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailQuestionnaire.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailQuestionnaire.hs similarity index 50% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailQuestionnaire.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailQuestionnaire.hs index 5f49de9fd..19440567d 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailQuestionnaire.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailQuestionnaire.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireDetailQuestionnaire where +module Wizard.Database.Mapping.Project.ProjectDetailQuestionnaire where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromField @@ -7,16 +7,16 @@ import Database.PostgreSQL.Simple.Types import Shared.Common.Util.String import Shared.Common.Util.Uuid -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireAcl -import Wizard.Database.Mapping.Questionnaire.QuestionnaireFileSimple () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireState () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Questionnaire.QuestionnaireDetailQuestionnaire -import Wizard.Model.Questionnaire.QuestionnaireFileSimple +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Database.Mapping.Project.File.ProjectFileSimple () +import Wizard.Database.Mapping.Project.ProjectAcl +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectState () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Project.Detail.ProjectDetailQuestionnaire +import Wizard.Model.Project.File.ProjectFileSimple -instance FromRow QuestionnaireDetailQuestionnaire where +instance FromRow ProjectDetailQuestionnaire where fromRow = do uuid <- field name <- field @@ -27,19 +27,19 @@ instance FromRow QuestionnaireDetailQuestionnaire where isTemplate <- field migrationUuid <- field permissions <- loadPermissions uuid - questionnaireActionsAvailable <- field - questionnaireImportersAvailable <- field + projectActionsAvailable <- field + projectImportersAvailable <- field mFiles <- fieldWith (optionalField fromField) let files = case mFiles of Just files -> fmap parseFile . fromPGArray $ files Nothing -> [] - return $ QuestionnaireDetailQuestionnaire {..} + return $ ProjectDetailQuestionnaire {..} where - parseFile :: String -> QuestionnaireFileSimple + parseFile :: String -> ProjectFileSimple parseFile file = let parts = splitOn "<:::::>" file - in QuestionnaireFileSimple + in ProjectFileSimple { uuid = u' $ head parts , fileName = parts !! 1 , contentType = parts !! 2 diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailSettings.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailSettings.hs similarity index 86% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailSettings.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailSettings.hs index 58772bece..f5cb04156 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetailSettings.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectDetailSettings.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireDetailSettings where +module Wizard.Database.Mapping.Project.ProjectDetailSettings where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromField @@ -13,15 +13,15 @@ import Shared.DocumentTemplate.Database.Mapping.DocumentTemplate.DocumentTemplat import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateJM () import Shared.KnowledgeModel.Database.Mapping.KnowledgeModel.Package.KnowledgeModelPackagePhase () import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireAcl -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireState () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Database.Mapping.Project.ProjectAcl +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectState () +import Wizard.Database.Mapping.Project.ProjectVisibility () import Wizard.Model.DocumentTemplate.DocumentTemplateState -import Wizard.Model.Questionnaire.QuestionnaireDetailSettings +import Wizard.Model.Project.Detail.ProjectDetailSettings -instance FromRow QuestionnaireDetailSettings where +instance FromRow ProjectDetailSettings where fromRow = do uuid <- field name <- field @@ -87,4 +87,4 @@ instance FromRow QuestionnaireDetailSettings where else Just DefaultDocumentTemplateState _ -> Nothing fileCount <- field - return $ QuestionnaireDetailSettings {..} + return $ ProjectDetailSettings {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireEvent.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectEvent.hs similarity index 88% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireEvent.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectEvent.hs index 20ea2b259..8dc304107 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireEvent.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectEvent.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireEvent where +module Wizard.Database.Mapping.Project.ProjectEvent where import Data.Maybe (fromJust) import qualified Data.Text as T @@ -12,13 +12,13 @@ import Database.PostgreSQL.Simple.Types import GHC.Generics import Shared.Common.Util.Uuid -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Api.Resource.Project.Event.ProjectEventJM () +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.ProjectReply -instance ToRow QuestionnaireEvent where +instance ToRow ProjectEvent where toRow (SetReplyEvent' SetReplyEvent {..}) = let values = case value of @@ -85,7 +85,7 @@ instance ToRow QuestionnaireEvent where , toField path , toField createdAt , toField createdBy - , toField questionnaireUuid + , toField projectUuid , toField tenantUuid ] ++ values @@ -95,7 +95,7 @@ instance ToRow QuestionnaireEvent where , toField path , toField createdAt , toField createdBy - , toField questionnaireUuid + , toField projectUuid , toField tenantUuid , toField (Nothing :: Maybe String) , toField (Nothing :: Maybe String) @@ -108,7 +108,7 @@ instance ToRow QuestionnaireEvent where , toField (Nothing :: Maybe String) , toField createdAt , toField createdBy - , toField questionnaireUuid + , toField projectUuid , toField tenantUuid , toField (Nothing :: Maybe String) , case phaseUuid of @@ -123,7 +123,7 @@ instance ToRow QuestionnaireEvent where , toField path , toField createdAt , toField createdBy - , toField questionnaireUuid + , toField projectUuid , toField tenantUuid , toField (Nothing :: Maybe String) , toField . PGArray $ value @@ -131,14 +131,14 @@ instance ToRow QuestionnaireEvent where , toField (Nothing :: Maybe String) ] -instance FromRow QuestionnaireEvent where +instance FromRow ProjectEvent where fromRow = do uuid <- field aType <- field mPath <- field createdAt <- field createdBy <- field - questionnaireUuid <- field + projectUuid <- field tenantUuid <- field valueType <- field valueText <- fieldValueText @@ -151,7 +151,7 @@ instance FromRow QuestionnaireEvent where { uuid = uuid , path = fromJust mPath , value = parseValue valueType valueText mValueId mValueRaw - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = createdBy , createdAt = createdAt @@ -167,7 +167,7 @@ instance FromRow QuestionnaireEvent where case valueText of [value] -> Just . u' $ value _ -> Nothing - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = createdBy , createdAt = createdAt @@ -178,7 +178,7 @@ instance FromRow QuestionnaireEvent where { uuid = uuid , path = fromJust mPath , value = fmap u' valueText - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = createdBy , createdAt = createdAt @@ -222,33 +222,33 @@ parsePhaseUuid valueText = [value] -> Just . u' $ value _ -> Nothing -data QuestionnaireEventType +data ProjectEventType = SetReplyEventType | ClearReplyEventType | SetPhaseEventType | SetLabelsEventType deriving (Show, Read, Eq, Ord, Generic) -instance FromField QuestionnaireEventType where +instance FromField ProjectEventType where fromField f mdata = do typename <- typename f -- Get the PostgreSQL type name case mdata of - Just bs | typename == "questionnaire_event_type" -> + Just bs | typename == "project_event_type" -> case bs of "SetReplyEvent" -> pure SetReplyEventType "ClearReplyEvent" -> pure ClearReplyEventType "SetPhaseEvent" -> pure SetPhaseEventType "SetLabelsEvent" -> pure SetLabelsEventType _ -> returnError ConversionFailed f "Invalid ENUM value" - _ -> returnError Incompatible f "Expected questionnaire_event_type ENUM" + _ -> returnError Incompatible f "Expected project_event_type ENUM" -instance ToField QuestionnaireEventType where +instance ToField ProjectEventType where toField SetReplyEventType = toField ("SetReplyEvent" :: T.Text) toField ClearReplyEventType = toField ("ClearReplyEvent" :: T.Text) toField SetPhaseEventType = toField ("SetPhaseEvent" :: T.Text) toField SetLabelsEventType = toField ("SetLabelsEvent" :: T.Text) -data QuestionnaireReplyType +data ProjectReplyType = StringReplyType | AnswerReplyType | MultiChoiceReplyType @@ -258,7 +258,7 @@ data QuestionnaireReplyType | FileReplyType deriving (Show, Read, Eq, Ord, Generic) -instance FromField QuestionnaireReplyType where +instance FromField ProjectReplyType where fromField f mdata = do typename <- typename f -- Get the PostgreSQL type name case mdata of @@ -274,7 +274,7 @@ instance FromField QuestionnaireReplyType where _ -> returnError ConversionFailed f "Invalid ENUM value" _ -> returnError Incompatible f "Expected value_type ENUM" -instance ToField QuestionnaireReplyType where +instance ToField ProjectReplyType where toField StringReplyType = toField ("StringReply" :: T.Text) toField AnswerReplyType = toField ("AnswerReply" :: T.Text) toField MultiChoiceReplyType = toField ("MultiChoiceReply" :: T.Text) diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireEventList.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectEventList.hs similarity index 85% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireEventList.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectEventList.hs index b68fbb724..3e449972a 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireEventList.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectEventList.hs @@ -1,15 +1,15 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireEventList where +module Wizard.Database.Mapping.Project.ProjectEventList where import Data.Maybe (fromJust) import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow import Shared.Common.Util.Uuid -import Wizard.Database.Mapping.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireEventList +import Wizard.Database.Mapping.Project.ProjectEvent +import Wizard.Model.Project.Event.ProjectEventList import WizardLib.Public.Database.Mapping.User.UserSuggestion -instance FromRow QuestionnaireEventList where +instance FromRow ProjectEventList where fromRow = do uuid <- field aType <- field diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireList.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectList.hs similarity index 73% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireList.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectList.hs index 16dd90932..8894a62d4 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireList.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectList.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireList where +module Wizard.Database.Mapping.Project.ProjectList where import qualified Data.List as L import qualified Data.UUID as U @@ -12,14 +12,14 @@ import Shared.Common.Util.String import Shared.Common.Util.Uuid import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackageSimple import Wizard.Api.Resource.Acl.MemberDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermJM () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireState () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Questionnaire.QuestionnaireList +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Api.Resource.Project.Acl.ProjectPermJM () +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectState () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Project.ProjectList -instance FromRow QuestionnaireList where +instance FromRow ProjectList where fromRow = do uuid <- field name <- field @@ -45,13 +45,13 @@ instance FromRow QuestionnaireList where Just groupPermissions -> L.sort . fmap (parseGroupPermission uuid) . fromPGArray $ groupPermissions Nothing -> [] let permissions = userPermissions ++ groupPermissions - return $ QuestionnaireList {..} + return $ ProjectList {..} where - parseUserPermission :: U.UUID -> String -> QuestionnairePermDTO - parseUserPermission qtnUuid permission = + parseUserPermission :: U.UUID -> String -> ProjectPermDTO + parseUserPermission projectUuid permission = let parts = splitOn "::" permission - in QuestionnairePermDTO - { questionnaireUuid = qtnUuid + in ProjectPermDTO + { projectUuid = projectUuid , perms = splitOn "," . replace "}" "" . replace "{" "" $ parts !! 1 , member = UserMemberDTO @@ -65,11 +65,11 @@ instance FromRow QuestionnaireList where imageUrl -> Just imageUrl } } - parseGroupPermission :: U.UUID -> String -> QuestionnairePermDTO - parseGroupPermission qtnUuid permission = + parseGroupPermission :: U.UUID -> String -> ProjectPermDTO + parseGroupPermission projectUuid permission = let parts = splitOn "::" permission - in QuestionnairePermDTO - { questionnaireUuid = qtnUuid + in ProjectPermDTO + { projectUuid = projectUuid , perms = splitOn "," . replace "}" "" . replace "{" "" $ parts !! 1 , member = UserGroupMemberDTO diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnairePerm.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectPerm.hs similarity index 57% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnairePerm.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectPerm.hs index d339c4511..c83afa840 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnairePerm.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectPerm.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnairePerm where +module Wizard.Database.Mapping.Project.ProjectPerm where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromField @@ -8,27 +8,27 @@ import Database.PostgreSQL.Simple.ToRow import Database.PostgreSQL.Simple.Types import Shared.Common.Database.Mapping.Common -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectPerm -instance ToField QuestionnairePermType where +instance ToField ProjectPermType where toField = toFieldGenericEnum -instance FromField QuestionnairePermType where +instance FromField ProjectPermType where fromField = fromFieldGenericEnum -instance ToRow QuestionnairePerm where - toRow r@QuestionnairePerm {..} = - [ toField questionnaireUuid +instance ToRow ProjectPerm where + toRow r@ProjectPerm {..} = + [ toField projectUuid , toField memberUuid , toField . PGArray $ perms , toField tenantUuid ] -instance FromRow QuestionnairePerm where +instance FromRow ProjectPerm where fromRow = do - questionnaireUuid <- field + projectUuid <- field memberType <- field memberUuid <- field perms <- fromPGArray <$> field tenantUuid <- field - return QuestionnairePerm {..} + return ProjectPerm {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSharing.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSharing.hs new file mode 100644 index 000000000..d59196b81 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSharing.hs @@ -0,0 +1,13 @@ +module Wizard.Database.Mapping.Project.ProjectSharing where + +import Database.PostgreSQL.Simple.FromField +import Database.PostgreSQL.Simple.ToField + +import Shared.Common.Database.Mapping.Common +import Wizard.Model.Project.Project + +instance ToField ProjectSharing where + toField = toFieldGenericEnum + +instance FromField ProjectSharing where + fromField = fromFieldGenericEnum diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSimple.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSimple.hs new file mode 100644 index 000000000..e1fdd9b59 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSimple.hs @@ -0,0 +1,23 @@ +module Wizard.Database.Mapping.Project.ProjectSimple where + +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.FromRow +import Database.PostgreSQL.Simple.ToField +import Database.PostgreSQL.Simple.ToRow + +import Wizard.Model.Project.ProjectSimple + +instance ToRow ProjectSimple where + toRow ProjectSimple {..} = [toField uuid, toField name] + +instance FromRow ProjectSimple where + fromRow = do + uuid <- field + name <- field + return $ ProjectSimple {..} + +fieldProjectSimple :: RowParser ProjectSimple +fieldProjectSimple = do + uuid <- field + name <- field + return ProjectSimple {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSimpleWithPerm.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSimpleWithPerm.hs similarity index 57% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSimpleWithPerm.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/ProjectSimpleWithPerm.hs index 0e32f86c7..78ee2846c 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSimpleWithPerm.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSimpleWithPerm.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireSimpleWithPerm where +module Wizard.Database.Mapping.Project.ProjectSimpleWithPerm where import qualified Data.UUID as U import Database.PostgreSQL.Simple @@ -8,13 +8,13 @@ import Database.PostgreSQL.Simple.Types import Shared.Common.Util.String import Shared.Common.Util.Uuid -import Wizard.Database.Mapping.Questionnaire.QuestionnairePerm () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireSimpleWithPerm +import Wizard.Database.Mapping.Project.ProjectPerm () +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.ProjectSimpleWithPerm -instance FromRow QuestionnaireSimpleWithPerm where +instance FromRow ProjectSimpleWithPerm where fromRow = do uuid <- field visibility <- field @@ -31,24 +31,24 @@ instance FromRow QuestionnaireSimpleWithPerm where Just groupPermissions -> fmap (parseGroupPermission uuid tenantUuid) . fromPGArray $ groupPermissions Nothing -> [] let permissions = userPermissions ++ groupPermissions - return $ QuestionnaireSimpleWithPerm {..} + return $ ProjectSimpleWithPerm {..} where - parseUserPermission :: U.UUID -> U.UUID -> String -> QuestionnairePerm - parseUserPermission qtnUuid tenantUuid permission = + parseUserPermission :: U.UUID -> U.UUID -> String -> ProjectPerm + parseUserPermission projectUuid tenantUuid permission = let parts = splitOn "::" permission - in QuestionnairePerm - { questionnaireUuid = qtnUuid - , memberType = UserQuestionnairePermType + in ProjectPerm + { projectUuid = projectUuid + , memberType = UserProjectPermType , memberUuid = u' $ head parts , perms = splitOn "," . replace "}" "" . replace "{" "" $ parts !! 1 , tenantUuid = tenantUuid } - parseGroupPermission :: U.UUID -> U.UUID -> String -> QuestionnairePerm - parseGroupPermission qtnUuid tenantUuid permission = + parseGroupPermission :: U.UUID -> U.UUID -> String -> ProjectPerm + parseGroupPermission projectUuid tenantUuid permission = let parts = splitOn "::" permission - in QuestionnairePerm - { questionnaireUuid = qtnUuid - , memberType = UserGroupQuestionnairePermType + in ProjectPerm + { projectUuid = projectUuid + , memberType = UserGroupProjectPermType , memberUuid = u' $ head parts , perms = splitOn "," . replace "}" "" . replace "{" "" $ parts !! 1 , tenantUuid = tenantUuid diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/ProjectState.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectState.hs new file mode 100644 index 000000000..afa63b603 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectState.hs @@ -0,0 +1,9 @@ +module Wizard.Database.Mapping.Project.ProjectState where + +import Database.PostgreSQL.Simple.FromField + +import Shared.Common.Database.Mapping.Common +import Wizard.Model.Project.ProjectState + +instance FromField ProjectState where + fromField = fromFieldGenericEnum diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSuggestion.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSuggestion.hs new file mode 100644 index 000000000..5f45f7944 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectSuggestion.hs @@ -0,0 +1,7 @@ +module Wizard.Database.Mapping.Project.ProjectSuggestion where + +import Database.PostgreSQL.Simple + +import Wizard.Model.Project.ProjectSuggestion + +instance FromRow ProjectSuggestion diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/ProjectVisibility.hs b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectVisibility.hs new file mode 100644 index 000000000..6ffc174b8 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/ProjectVisibility.hs @@ -0,0 +1,13 @@ +module Wizard.Database.Mapping.Project.ProjectVisibility where + +import Database.PostgreSQL.Simple.FromField +import Database.PostgreSQL.Simple.ToField + +import Shared.Common.Database.Mapping.Common +import Wizard.Model.Project.Project + +instance ToField ProjectVisibility where + toField = toFieldGenericEnum + +instance FromField ProjectVisibility where + fromField = fromFieldGenericEnum diff --git a/wizard-server/src/Wizard/Database/Mapping/Project/Version/ProjectVersion.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Version/ProjectVersion.hs new file mode 100644 index 000000000..2529e3e93 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Version/ProjectVersion.hs @@ -0,0 +1,9 @@ +module Wizard.Database.Mapping.Project.Version.ProjectVersion where + +import Database.PostgreSQL.Simple + +import Wizard.Model.Project.Version.ProjectVersion + +instance ToRow ProjectVersion + +instance FromRow ProjectVersion diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVersionList.hs b/wizard-server/src/Wizard/Database/Mapping/Project/Version/ProjectVersionList.hs similarity index 77% rename from wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVersionList.hs rename to wizard-server/src/Wizard/Database/Mapping/Project/Version/ProjectVersionList.hs index 5a7f20a9b..07ea55b74 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVersionList.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Project/Version/ProjectVersionList.hs @@ -1,13 +1,13 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireVersionList where +module Wizard.Database.Mapping.Project.Version.ProjectVersionList where import Database.PostgreSQL.Simple import Database.PostgreSQL.Simple.FromRow import Shared.Common.Util.Gravatar -import Wizard.Model.Questionnaire.QuestionnaireVersionList +import Wizard.Model.Project.Version.ProjectVersionList import WizardLib.Public.Model.User.UserSuggestion -instance FromRow QuestionnaireVersionList where +instance FromRow ProjectVersionList where fromRow = do uuid <- field name <- field @@ -26,4 +26,4 @@ instance FromRow QuestionnaireVersionList where let gravatarHash = createGravatarHash email in Just UserSuggestion {..} _ -> Nothing - return $ QuestionnaireVersionList {..} + return $ ProjectVersionList {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/MigratorState.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/MigratorState.hs deleted file mode 100644 index 86c8d45c4..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/MigratorState.hs +++ /dev/null @@ -1,25 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.MigratorState where - -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.FromRow -import Database.PostgreSQL.Simple.ToField -import Database.PostgreSQL.Simple.ToRow -import Database.PostgreSQL.Simple.Types - -import Wizard.Model.Questionnaire.MigratorState - -instance ToRow MigratorState where - toRow MigratorState {..} = - [ toField oldQuestionnaireUuid - , toField newQuestionnaireUuid - , toField . PGArray $ resolvedQuestionUuids - , toField tenantUuid - ] - -instance FromRow MigratorState where - fromRow = do - oldQuestionnaireUuid <- field - newQuestionnaireUuid <- field - resolvedQuestionUuids <- fromPGArray <$> field - tenantUuid <- field - return $ MigratorState {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetail.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetail.hs deleted file mode 100644 index 3a7842b0c..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireDetail.hs +++ /dev/null @@ -1,28 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireDetail where - -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.FromRow -import Database.PostgreSQL.Simple.Types - -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventJM () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireAcl -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireState () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Questionnaire.QuestionnaireDetail - -instance FromRow QuestionnaireDetail where - fromRow = do - uuid <- field - name <- field - visibility <- field - sharing <- field - knowledgeModelPackageId <- field - selectedQuestionTagUuids <- fromPGArray <$> field - isTemplate <- field - migrationUuid <- field - permissions <- loadPermissions uuid - questionnaireActionsAvailable <- field - questionnaireImportersAvailable <- field - fileCount <- field - return $ QuestionnaireDetail {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFile.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFile.hs deleted file mode 100644 index e95664ed0..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFile.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireFile where - -import Database.PostgreSQL.Simple - -import Wizard.Model.Questionnaire.QuestionnaireFile - -instance ToRow QuestionnaireFile - -instance FromRow QuestionnaireFile diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFileSimple.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFileSimple.hs deleted file mode 100644 index 0d4ab674a..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireFileSimple.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireFileSimple where - -import Database.PostgreSQL.Simple - -import Wizard.Model.Questionnaire.QuestionnaireFileSimple - -instance FromRow QuestionnaireFileSimple diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSharing.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSharing.hs deleted file mode 100644 index 3c7d77061..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSharing.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing where - -import Database.PostgreSQL.Simple.FromField -import Database.PostgreSQL.Simple.ToField - -import Shared.Common.Database.Mapping.Common -import Wizard.Model.Questionnaire.Questionnaire - -instance ToField QuestionnaireSharing where - toField = toFieldGenericEnum - -instance FromField QuestionnaireSharing where - fromField = fromFieldGenericEnum diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSimple.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSimple.hs deleted file mode 100644 index 8b2c9cc1b..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSimple.hs +++ /dev/null @@ -1,17 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireSimple where - -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.FromRow -import Database.PostgreSQL.Simple.ToField -import Database.PostgreSQL.Simple.ToRow - -import Wizard.Model.Questionnaire.QuestionnaireSimple - -instance ToRow QuestionnaireSimple where - toRow QuestionnaireSimple {..} = [toField uuid, toField name] - -instance FromRow QuestionnaireSimple where - fromRow = do - uuid <- field - name <- field - return $ QuestionnaireSimple {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireState.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireState.hs deleted file mode 100644 index 00ae5fbb7..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireState.hs +++ /dev/null @@ -1,15 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireState where - -import qualified Data.ByteString.Char8 as BS -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.FromField - -import Wizard.Model.Questionnaire.QuestionnaireState - -instance FromField QuestionnaireState where - fromField f dat = - case fmap BS.unpack dat of - Just "Default" -> return QSDefault - Just "Migrating" -> return QSMigrating - Just "Outdated" -> return QSOutdated - _ -> returnError ConversionFailed f "Unsupported type" diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSuggestion.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSuggestion.hs deleted file mode 100644 index 82fc14c50..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireSuggestion.hs +++ /dev/null @@ -1,7 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireSuggestion where - -import Database.PostgreSQL.Simple - -import Wizard.Model.Questionnaire.QuestionnaireSuggestion - -instance FromRow QuestionnaireSuggestion diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVersion.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVersion.hs deleted file mode 100644 index dda43a7e0..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVersion.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireVersion where - -import Database.PostgreSQL.Simple - -import Wizard.Model.Questionnaire.QuestionnaireVersion - -instance ToRow QuestionnaireVersion - -instance FromRow QuestionnaireVersion diff --git a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVisibility.hs b/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVisibility.hs deleted file mode 100644 index 55a7bfdfd..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Questionnaire/QuestionnaireVisibility.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility where - -import Database.PostgreSQL.Simple.FromField -import Database.PostgreSQL.Simple.ToField - -import Shared.Common.Database.Mapping.Common -import Wizard.Model.Questionnaire.Questionnaire - -instance ToField QuestionnaireVisibility where - toField = toFieldGenericEnum - -instance FromField QuestionnaireVisibility where - fromField = fromFieldGenericEnum diff --git a/wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigProject.hs b/wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigProject.hs new file mode 100644 index 000000000..d07652a44 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigProject.hs @@ -0,0 +1,77 @@ +module Wizard.Database.Mapping.Tenant.Config.TenantConfigProject where + +import Database.PostgreSQL.Simple +import Database.PostgreSQL.Simple.FromRow +import Database.PostgreSQL.Simple.ToField +import Database.PostgreSQL.Simple.ToRow +import Database.PostgreSQL.Simple.Types + +import Shared.Common.Model.Config.SimpleFeature +import Wizard.Database.Mapping.Project.ProjectCreation () +import Wizard.Database.Mapping.Project.ProjectSharing () +import Wizard.Database.Mapping.Project.ProjectVisibility () +import Wizard.Model.Tenant.Config.TenantConfig + +instance ToRow TenantConfigProject where + toRow TenantConfigProject {..} = + [ toField tenantUuid + , toField projectVisibility.enabled + , toField projectVisibility.defaultValue + , toField projectSharing.enabled + , toField projectSharing.defaultValue + , toField projectSharing.anonymousEnabled + , toField projectCreation + , toField projectTagging.enabled + , toField . PGArray $ projectTagging.tags + , toField summaryReport.enabled + , toField feedback.enabled + , toField feedback.token + , toField feedback.owner + , toField feedback.repo + , toField createdAt + , toField updatedAt + ] + +instance FromRow TenantConfigProject where + fromRow = do + tenantUuid <- field + projectVisibilityEnabled <- field + projectVisibilityDefaultValue <- field + let projectVisibility = + TenantConfigProjectVisibility + { enabled = projectVisibilityEnabled + , defaultValue = projectVisibilityDefaultValue + } + projectSharingEnabled <- field + projectSharingDefaultValue <- field + projectSharingAnonymousEnabled <- field + let projectSharing = + TenantConfigProjectSharing + { enabled = projectSharingEnabled + , defaultValue = projectSharingDefaultValue + , anonymousEnabled = projectSharingAnonymousEnabled + } + projectCreation <- field + projectTaggingEnabled <- field + projectTaggingTags <- fromPGArray <$> field + let projectTagging = + TenantConfigProjectProjectTagging + { enabled = projectTaggingEnabled + , tags = projectTaggingTags + } + summaryReportEnabled <- field + let summaryReport = SimpleFeature summaryReportEnabled + feedbackEnabled <- field + feedbackToken <- field + feedbackOwner <- field + feedbackRepo <- field + let feedback = + TenantConfigProjectFeedback + { enabled = feedbackEnabled + , token = feedbackToken + , owner = feedbackOwner + , repo = feedbackRepo + } + createdAt <- field + updatedAt <- field + return TenantConfigProject {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigQuestionnaire.hs b/wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigQuestionnaire.hs deleted file mode 100644 index 99d49d71e..000000000 --- a/wizard-server/src/Wizard/Database/Mapping/Tenant/Config/TenantConfigQuestionnaire.hs +++ /dev/null @@ -1,77 +0,0 @@ -module Wizard.Database.Mapping.Tenant.Config.TenantConfigQuestionnaire where - -import Database.PostgreSQL.Simple -import Database.PostgreSQL.Simple.FromRow -import Database.PostgreSQL.Simple.ToField -import Database.PostgreSQL.Simple.ToRow -import Database.PostgreSQL.Simple.Types - -import Shared.Common.Model.Config.SimpleFeature -import Wizard.Database.Mapping.Questionnaire.QuestionnaireCreation () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireSharing () -import Wizard.Database.Mapping.Questionnaire.QuestionnaireVisibility () -import Wizard.Model.Tenant.Config.TenantConfig - -instance ToRow TenantConfigQuestionnaire where - toRow TenantConfigQuestionnaire {..} = - [ toField tenantUuid - , toField questionnaireVisibility.enabled - , toField questionnaireVisibility.defaultValue - , toField questionnaireSharing.enabled - , toField questionnaireSharing.defaultValue - , toField questionnaireSharing.anonymousEnabled - , toField questionnaireCreation - , toField projectTagging.enabled - , toField . PGArray $ projectTagging.tags - , toField summaryReport.enabled - , toField feedback.enabled - , toField feedback.token - , toField feedback.owner - , toField feedback.repo - , toField createdAt - , toField updatedAt - ] - -instance FromRow TenantConfigQuestionnaire where - fromRow = do - tenantUuid <- field - questionnaireVisibilityEnabled <- field - questionnaireVisibilityDefaultValue <- field - let questionnaireVisibility = - TenantConfigQuestionnaireVisibility - { enabled = questionnaireVisibilityEnabled - , defaultValue = questionnaireVisibilityDefaultValue - } - questionnaireSharingEnabled <- field - questionnaireSharingDefaultValue <- field - questionnaireSharingAnonymousEnabled <- field - let questionnaireSharing = - TenantConfigQuestionnaireSharing - { enabled = questionnaireSharingEnabled - , defaultValue = questionnaireSharingDefaultValue - , anonymousEnabled = questionnaireSharingAnonymousEnabled - } - questionnaireCreation <- field - projectTaggingEnabled <- field - projectTaggingTags <- fromPGArray <$> field - let projectTagging = - TenantConfigQuestionnaireProjectTagging - { enabled = projectTaggingEnabled - , tags = projectTaggingTags - } - summaryReportEnabled <- field - let summaryReport = SimpleFeature summaryReportEnabled - feedbackEnabled <- field - feedbackToken <- field - feedbackOwner <- field - feedbackRepo <- field - let feedback = - TenantConfigQuestionnaireFeedback - { enabled = feedbackEnabled - , token = feedbackToken - , owner = feedbackOwner - , repo = feedbackRepo - } - createdAt <- field - updatedAt <- field - return TenantConfigQuestionnaire {..} diff --git a/wizard-server/src/Wizard/Database/Mapping/Tenant/TenantLimitBundle.hs b/wizard-server/src/Wizard/Database/Mapping/Tenant/TenantLimitBundle.hs index 1b3f949e4..ab044430e 100644 --- a/wizard-server/src/Wizard/Database/Mapping/Tenant/TenantLimitBundle.hs +++ b/wizard-server/src/Wizard/Database/Mapping/Tenant/TenantLimitBundle.hs @@ -15,7 +15,7 @@ instance FromRow TenantLimitBundle where knowledgeModels <- field knowledgeModelEditors <- field documentTemplates <- field - questionnaires <- field + projects <- field documents <- field storage <- field createdAt <- field @@ -32,7 +32,7 @@ instance ToRow TenantLimitBundle where , toField knowledgeModels , toField knowledgeModelEditors , toField documentTemplates - , toField questionnaires + , toField projects , toField documents , toField storage , toField createdAt diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Document/Data/Documents.hs b/wizard-server/src/Wizard/Database/Migration/Development/Document/Data/Documents.hs index b34030e08..84961cf8c 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Document/Data/Documents.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Document/Data/Documents.hs @@ -16,20 +16,20 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelLenses import Wizard.Api.Resource.Document.DocumentCreateDTO import Wizard.Api.Resource.Document.DocumentDTO -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.Report.Data.Reports import Wizard.Database.Migration.Development.Tenant.Data.TenantConfigs import Wizard.Database.Migration.Development.Tenant.Data.Tenants import Wizard.Database.Migration.Development.User.Data.Users import Wizard.Model.Document.Document import Wizard.Model.Document.DocumentContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireContent +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent import Wizard.Model.Tenant.Tenant import Wizard.Model.User.User import Wizard.Service.Document.Context.DocumentContextMapper import Wizard.Service.Document.DocumentMapper -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionMapper +import Wizard.Service.Project.Version.ProjectVersionMapper import qualified Wizard.Service.User.UserMapper as USR_Mapper doc1 :: Document @@ -39,9 +39,9 @@ doc1 = , name = "My exported document" , state = DoneDocumentState , durability = PersistentDocumentDurability - , questionnaireUuid = Just questionnaire1.uuid - , questionnaireEventUuid = Just . getUuid . last $ questionnaire1Events - , questionnaireRepliesHash = hash . M.toList $ questionnaire1Ctn.replies + , projectUuid = Just project1.uuid + , projectEventUuid = Just . getUuid . last $ project1Events + , projectRepliesHash = hash . M.toList $ project1Ctn.replies , documentTemplateId = wizardDocumentTemplate.tId , formatUuid = formatJson.uuid , createdBy = Just $ userNikola.uuid @@ -78,21 +78,21 @@ dmp1 = , createdBy = Just . USR_Mapper.toDTO $ userNikola , createdAt = doc1.createdAt } - , questionnaire = + , project = DocumentContextQuestionnaire - { uuid = questionnaire1.uuid - , name = questionnaire1.name - , description = questionnaire1.description - , replies = questionnaire1Ctn.replies - , phaseUuid = questionnaire1Ctn.phaseUuid - , labels = questionnaire1Ctn.labels + { uuid = project1.uuid + , name = project1.name + , description = project1.description + , replies = project1Ctn.replies + , phaseUuid = project1Ctn.phaseUuid + , labels = project1Ctn.labels , versionUuid = Nothing - , versions = fmap (`toVersionList` Just userAlbertDto) questionnaire1Versions - , projectTags = questionnaire1.projectTags + , versions = fmap (`toVersionList` Just userAlbertDto) project1Versions + , projectTags = project1.projectTags , files = [] , createdBy = Just . USR_Mapper.toDTO $ userAlbert - , createdAt = questionnaire1.createdAt - , updatedAt = questionnaire1.updatedAt + , createdAt = project1.createdAt + , updatedAt = project1.updatedAt } , knowledgeModel = km1WithQ4 , report = report1 @@ -112,14 +112,14 @@ doc1Create :: DocumentCreateDTO doc1Create = DocumentCreateDTO { name = doc1.name - , questionnaireUuid = questionnaire1.uuid - , questionnaireEventUuid = Just . getUuid . last $ questionnaire1Events + , projectUuid = project1.uuid + , projectEventUuid = Just . getUuid . last $ project1Events , documentTemplateId = doc1.documentTemplateId , formatUuid = doc1.formatUuid } doc1Dto :: DocumentDTO -doc1Dto = toDTOWithDocTemplate doc1 questionnaire1 Nothing [] wizardDocumentTemplate formatJsonSimple +doc1Dto = toDTOWithDocTemplate doc1 project1 Nothing [] wizardDocumentTemplate formatJsonSimple doc2 :: Document doc2 = @@ -128,9 +128,9 @@ doc2 = , name = "My exported document 2" , state = DoneDocumentState , durability = PersistentDocumentDurability - , questionnaireUuid = Just questionnaire2.uuid - , questionnaireEventUuid = Just . getUuid . last $ questionnaire2Events - , questionnaireRepliesHash = hash . M.toList $ questionnaire2Ctn.replies + , projectUuid = Just project2.uuid + , projectEventUuid = Just . getUuid . last $ project2Events + , projectRepliesHash = hash . M.toList $ project2Ctn.replies , documentTemplateId = wizardDocumentTemplate.tId , formatUuid = formatJson.uuid , createdBy = Just $ userNikola.uuid @@ -151,9 +151,9 @@ doc3 = , name = "My exported document 3" , state = DoneDocumentState , durability = PersistentDocumentDurability - , questionnaireUuid = Just questionnaire2.uuid - , questionnaireEventUuid = Just . getUuid . last $ questionnaire2Events - , questionnaireRepliesHash = hash . M.toList $ questionnaire2Ctn.replies + , projectUuid = Just project2.uuid + , projectEventUuid = Just . getUuid . last $ project2Events + , projectRepliesHash = hash . M.toList $ project2Ctn.replies , documentTemplateId = wizardDocumentTemplate.tId , formatUuid = formatJson.uuid , createdBy = Just $ userAlbert.uuid @@ -234,9 +234,9 @@ differentDoc = , name = "My different document" , state = DoneDocumentState , durability = PersistentDocumentDurability - , questionnaireUuid = Just differentQuestionnaire.uuid - , questionnaireEventUuid = Nothing - , questionnaireRepliesHash = hash . M.toList $ questionnaire1Ctn.replies + , projectUuid = Just differentProject.uuid + , projectEventUuid = Nothing + , projectRepliesHash = hash . M.toList $ project1Ctn.replies , documentTemplateId = anotherWizardDocumentTemplate.tId , formatUuid = formatJson.uuid , createdBy = Just $ userCharles.uuid diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Document/DocumentSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Document/DocumentSchemaMigration.hs index d8a25991d..edeb29f91 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Document/DocumentSchemaMigration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Document/DocumentSchemaMigration.hs @@ -32,26 +32,26 @@ createDocumentTable = do let sql = "CREATE TABLE document \ \( \ - \ uuid uuid NOT NULL, \ - \ name varchar NOT NULL, \ - \ state varchar NOT NULL, \ - \ durability varchar NOT NULL, \ - \ questionnaire_uuid uuid, \ - \ questionnaire_event_uuid uuid, \ - \ questionnaire_replies_hash bigint NOT NULL, \ - \ document_template_id varchar NOT NULL, \ - \ format_uuid uuid NOT NULL, \ - \ created_by uuid, \ - \ retrieved_at timestamptz, \ - \ finished_at timestamptz, \ - \ created_at timestamptz NOT NULL, \ - \ file_name varchar, \ - \ content_type varchar, \ - \ worker_log varchar, \ - \ tenant_uuid uuid NOT NULL, \ - \ file_size bigint, \ + \ uuid uuid NOT NULL, \ + \ name varchar NOT NULL, \ + \ state varchar NOT NULL, \ + \ durability varchar NOT NULL, \ + \ project_uuid uuid, \ + \ project_event_uuid uuid, \ + \ project_replies_hash bigint NOT NULL, \ + \ document_template_id varchar NOT NULL, \ + \ format_uuid uuid NOT NULL, \ + \ created_by uuid, \ + \ retrieved_at timestamptz, \ + \ finished_at timestamptz, \ + \ created_at timestamptz NOT NULL, \ + \ file_name varchar, \ + \ content_type varchar, \ + \ worker_log varchar, \ + \ tenant_uuid uuid NOT NULL, \ + \ file_size bigint, \ \ CONSTRAINT document_pk PRIMARY KEY (uuid), \ - \ CONSTRAINT document_questionnaire_uuid_fk FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT document_project_uuid_fk FOREIGN KEY (project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ \ CONSTRAINT document_document_template_id_fk FOREIGN KEY (document_template_id, tenant_uuid) REFERENCES document_template (id, tenant_uuid) ON DELETE CASCADE, \ \ CONSTRAINT document_format_uuid_fk FOREIGN KEY (document_template_id, format_uuid, tenant_uuid) REFERENCES document_template_format (document_template_id, uuid, tenant_uuid) ON DELETE CASCADE, \ \ CONSTRAINT document_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ diff --git a/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateDrafts.hs b/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateDrafts.hs index e9a2ca2a0..0aceb1fcc 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateDrafts.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplateDrafts.hs @@ -7,17 +7,17 @@ import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftChangeDTO import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftCreateDTO import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataChangeDTO import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataDTO -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Model.DocumentTemplate.DocumentTemplateDraftData -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Service.DocumentTemplate.Draft.DocumentTemplateDraftMapper -import qualified Wizard.Service.Questionnaire.QuestionnaireMapper as QuestionnaireMapper +import qualified Wizard.Service.Project.ProjectMapper as ProjectMapper wizardDocumentTemplateDraftData :: DocumentTemplateDraftData wizardDocumentTemplateDraftData = DocumentTemplateDraftData { documentTemplateId = wizardDocumentTemplateDraft.tId - , questionnaireUuid = Just questionnaire1.uuid + , projectUuid = Just project1.uuid , knowledgeModelEditorUuid = Nothing , formatUuid = Just formatJson.uuid , tenantUuid = wizardDocumentTemplateDraft.tenantUuid @@ -28,7 +28,7 @@ wizardDocumentTemplateDraftData = wizardDocumentTemplateDraftDataEdited :: DocumentTemplateDraftData wizardDocumentTemplateDraftDataEdited = wizardDocumentTemplateDraftData - { questionnaireUuid = Just questionnaire2.uuid + { projectUuid = Just project2.uuid , formatUuid = Just formatPdf.uuid } @@ -47,8 +47,8 @@ wizardDocumentTemplateDraftChangeDTO = toChangeDTO wizardDocumentTemplateDraft wizardDocumentTemplateDraftDataDTO :: DocumentTemplateDraftDataDTO wizardDocumentTemplateDraftDataDTO = DocumentTemplateDraftDataDTO - { questionnaireUuid = wizardDocumentTemplateDraftDataEdited.questionnaireUuid - , questionnaire = Just . QuestionnaireMapper.toSuggestion $ questionnaire2 + { projectUuid = wizardDocumentTemplateDraftDataEdited.projectUuid + , project = Just . ProjectMapper.toSuggestion $ project2 , knowledgeModelEditorUuid = Nothing , knowledgeModelEditor = Nothing , formatUuid = wizardDocumentTemplateDraftDataEdited.formatUuid @@ -57,7 +57,7 @@ wizardDocumentTemplateDraftDataDTO = wizardDocumentTemplateDraftDataChangeDTO :: DocumentTemplateDraftDataChangeDTO wizardDocumentTemplateDraftDataChangeDTO = DocumentTemplateDraftDataChangeDTO - { questionnaireUuid = wizardDocumentTemplateDraftDataEdited.questionnaireUuid + { projectUuid = wizardDocumentTemplateDraftDataEdited.projectUuid , knowledgeModelEditorUuid = Nothing , formatUuid = wizardDocumentTemplateDraftDataEdited.formatUuid } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs b/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs index eee530fe9..a2800f560 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/Data/DocumentTemplates.hs @@ -31,7 +31,7 @@ wizardDocumentTemplateDetailDTO = [commonWizardRegistryTemplate] [globalRegistryOrganization] ["1.0.0"] - (Just "https://registry-test.ds-wizard.org/document-templates/global:questionnaire-report:1.0.0") + (Just "https://registry-test.ds-wizard.org/document-templates/global:project-report:1.0.0") [globalKmPackage, netherlandsKmPackageV2] wizardDocumentTemplateDeprecatedChangeDTO :: DocumentTemplateChangeDTO diff --git a/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/DocumentTemplateSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/DocumentTemplateSchemaMigration.hs index 3d9e86c5d..bc44f89a0 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/DocumentTemplateSchemaMigration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/DocumentTemplate/DocumentTemplateSchemaMigration.hs @@ -32,14 +32,14 @@ dropBucket = do dropFunctions :: AppContextM Int64 dropFunctions = do logInfo _CMP_MIGRATION "(Function/DocumentTemplate) drop functions" - let sql = "DROP FUNCTION IF EXISTS create_persistent_command_from_questionnaire_file_delete;" + let sql = "DROP FUNCTION IF EXISTS create_persistent_command_from_project_file_delete;" let action conn = execute_ conn sql runDB action dropTriggers :: AppContextM Int64 dropTriggers = do logInfo _CMP_MIGRATION "(Trigger/DocumentTemplate) drop tables" - let sql = "DROP TRIGGER IF EXISTS trigger_on_after_questionnaire_file_delete ON questionnaire_file;" + let sql = "DROP TRIGGER IF EXISTS trigger_on_after_document_template_asset_delete ON project_file;" let action conn = execute_ conn sql runDB action @@ -161,7 +161,7 @@ createDraftDataTable = do "CREATE TABLE document_template_draft_data \ \( \ \ document_template_id varchar NOT NULL, \ - \ questionnaire_uuid uuid, \ + \ project_uuid uuid, \ \ format_uuid uuid, \ \ tenant_uuid uuid NOT NULL, \ \ created_at timestamptz NOT NULL, \ @@ -169,7 +169,7 @@ createDraftDataTable = do \ knowledge_model_editor_uuid uuid, \ \ CONSTRAINT document_template_draft_data_pk PRIMARY KEY (document_template_id, tenant_uuid), \ \ CONSTRAINT document_template_draft_data_document_template_id_fk FOREIGN KEY (document_template_id, tenant_uuid) REFERENCES document_template (id, tenant_uuid) ON DELETE CASCADE, \ - \ CONSTRAINT document_template_draft_data_questionnaire_uuid_fk FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE SET NULL, \ + \ CONSTRAINT document_template_draft_data_project_uuid_fk FOREIGN KEY (project_uuid) REFERENCES project (uuid) ON DELETE SET NULL, \ \ CONSTRAINT document_template_draft_data_knowledge_model_editor_uuid_fk FOREIGN KEY (knowledge_model_editor_uuid) REFERENCES knowledge_model_editor (uuid) ON DELETE CASCADE, \ \ CONSTRAINT document_template_draft_data_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ \);" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorActions.hs b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorActions.hs deleted file mode 100644 index 7a2ab2f53..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorActions.hs +++ /dev/null @@ -1,11 +0,0 @@ -module Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorActions where - -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO -import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorEvents -import Wizard.Database.Migration.Development.User.Data.Users - -ensureOnlineUserAction :: ClientKnowledgeModelEditorActionDTO -ensureOnlineUserAction = SetContent_ClientKnowledgeModelEditorActionDTO knowledgeModelEditorWebsocketEvent1' - -setUserListAction :: ServerKnowledgeModelEditorActionDTO -setUserListAction = SetUserList_ServerKnowledgeModelEditorActionDTO [userAlbertOnlineInfo] diff --git a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorEvents.hs b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorEvents.hs index 10963dd6f..bc83fd683 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorEvents.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorEvents.hs @@ -4,7 +4,7 @@ import Shared.Common.Util.Uuid import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Event.KnowledgeModelEvents import Wizard.Api.Resource.KnowledgeModel.Editor.Event.KnowledgeModelEditorWebSocketEventDTO import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesDTO -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies knowledgeModelEditorWebsocketEvent1' :: KnowledgeModelEditorWebSocketEventDTO knowledgeModelEditorWebsocketEvent1' = AddKnowledgeModelEditorWebSocketEventDTO' knowledgeModelEditorWebsocketEvent1 diff --git a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorMessages.hs b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorMessages.hs new file mode 100644 index 000000000..21ae23ac1 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditorMessages.hs @@ -0,0 +1,11 @@ +module Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorMessages where + +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO +import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorEvents +import Wizard.Database.Migration.Development.User.Data.Users + +ensureOnlineUserAction :: ClientKnowledgeModelEditorMessageDTO +ensureOnlineUserAction = SetContent_ClientKnowledgeModelEditorMessageDTO knowledgeModelEditorWebsocketEvent1' + +setUserListAction :: ServerKnowledgeModelEditorMessageDTO +setUserListAction = SetUserList_ServerKnowledgeModelEditorMessageDTO [userAlbertOnlineInfo] diff --git a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditors.hs b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditors.hs index c1d60ad6e..951826e30 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditors.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Editor/KnowledgeModelEditors.hs @@ -26,7 +26,7 @@ import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorEvent import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorList import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorState import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorSuggestion -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import Wizard.Model.Tenant.Tenant import Wizard.Model.User.User import Wizard.Service.KnowledgeModel.Compiler.Compiler diff --git a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Migration/KnowledgeModelMigrations.hs b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Migration/KnowledgeModelMigrations.hs index 22a5c9461..6d785c63d 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Migration/KnowledgeModelMigrations.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/Data/Migration/KnowledgeModelMigrations.hs @@ -19,8 +19,8 @@ import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorList import Wizard.Model.KnowledgeModel.Migration.KnowledgeModelMigration import Wizard.Model.Tenant.Tenant -migratorState :: KnowledgeModelMigrationDTO -migratorState = +knowledgeModelMigrationDTO :: KnowledgeModelMigrationDTO +knowledgeModelMigrationDTO = KnowledgeModelMigrationDTO { editorUuid = amsterdamKnowledgeModelEditorList.uuid , editorName = amsterdamKnowledgeModelEditorList.name @@ -30,18 +30,18 @@ migratorState = , currentKnowledgeModel = Just km1Netherlands } -migratorStateCreate :: KnowledgeModelMigrationCreateDTO -migratorStateCreate = KnowledgeModelMigrationCreateDTO {targetPackageId = netherlandsKmPackageV2.pId} +knowledgeModelMigrationCreateDTO :: KnowledgeModelMigrationCreateDTO +knowledgeModelMigrationCreateDTO = KnowledgeModelMigrationCreateDTO {targetPackageId = netherlandsKmPackageV2.pId} -migratorConflict :: KnowledgeModelMigrationResolutionDTO -migratorConflict = +knowledgeModelMigrationResolutionDTO :: KnowledgeModelMigrationResolutionDTO +knowledgeModelMigrationResolutionDTO = KnowledgeModelMigrationResolutionDTO { originalEventUuid = a_km1_ch4.uuid , action = RejectKnowledgeModelMigrationAction } -differentMigratorState :: KnowledgeModelMigration -differentMigratorState = +differentKnowledgeModelMigration :: KnowledgeModelMigration +differentKnowledgeModelMigration = KnowledgeModelMigration { editorUuid = differentKnowledgeModelEditor.uuid , metamodelVersion = knowledgeModelMetamodelVersion diff --git a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/KnowledgeModelMigrationMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/KnowledgeModelMigrationMigration.hs index 57bafdd96..7db4bf894 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/KnowledgeModelMigrationMigration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/KnowledgeModel/KnowledgeModelMigrationMigration.hs @@ -7,6 +7,6 @@ import Wizard.Database.Migration.Development.KnowledgeModel.Data.Migration.Knowl runMigration = do logInfo _CMP_MIGRATION "(Migration/KnowledgeModel) started" - deleteMigratorStates - insertMigratorState differentMigratorState + deleteKnowledgeModelMigrations + insertKnowledgeModelMigration differentKnowledgeModelMigration logInfo _CMP_MIGRATION "(Migration/KnowledgeModel) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Migration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Migration.hs index 0d5872141..fc74f00f6 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Migration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Migration.hs @@ -24,8 +24,8 @@ import qualified Wizard.Database.Migration.Development.Instance.InstanceSchemaMi import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelCacheSchemaMigration as KnowledgeModelCache import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelEditorMigration as KnowledgeModelEditor import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelEditorSchemaMigration as KnowledgeModelEditor -import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelMigrationMigration as KnowledgeModelMigrator -import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelMigrationSchemaMigration as KnowledgeModelMigrator +import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelMigrationMigration as KnowledgeModelMigration +import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelMigrationSchemaMigration as KnowledgeModelMigration import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageMigration as KnowledgeModelPackage import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageSchemaMigration as KnowledgeModelPackage import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelSecretMigration as KnowledgeModelSecret @@ -33,14 +33,14 @@ import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeM import qualified Wizard.Database.Migration.Development.Locale.LocaleMigration as Locale import qualified Wizard.Database.Migration.Development.Locale.LocaleSchemaMigration as Locale import qualified Wizard.Database.Migration.Development.PersistentCommand.PersistentCommandSchemaMigration as PersistentCommand -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorMigration as QuestionnaireMigrator -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorSchemaMigration as QuestionnaireMigrator -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as Questionnaire -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireSchemaMigration as Questionnaire -import qualified Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionMigration as QuestionnaireAction -import qualified Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionSchemaMigration as QuestionnaireAction -import qualified Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterMigration as QuestionnaireImporter -import qualified Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterSchemaMigration as QuestionnaireImporter +import qualified Wizard.Database.Migration.Development.Project.ProjectActionMigration as ProjectAction +import qualified Wizard.Database.Migration.Development.Project.ProjectActionSchemaMigration as ProjectAction +import qualified Wizard.Database.Migration.Development.Project.ProjectImporterMigration as ProjectImporter +import qualified Wizard.Database.Migration.Development.Project.ProjectImporterSchemaMigration as ProjectImporter +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as Project +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationMigration as ProjectMigration +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationSchemaMigration as ProjectMigration +import qualified Wizard.Database.Migration.Development.Project.ProjectSchemaMigration as Project import qualified Wizard.Database.Migration.Development.Registry.RegistryMigration as Registry import qualified Wizard.Database.Migration.Development.Registry.RegistrySchemaMigration as Registry import qualified Wizard.Database.Migration.Development.Submission.SubmissionSchemaMigration as Submission @@ -57,10 +57,10 @@ runMigration = runAppContextWithBaseContext $ do logInfo _CMP_MIGRATION "started" -- 1. Drop DB triggers Document.dropTriggers - Questionnaire.dropTriggers + Project.dropTriggers Locale.dropTriggers -- 2. Drop DB functions - Questionnaire.dropFunctions + Project.dropFunctions DocumentTemplate.dropFunctions KnowledgeModelEditor.dropFunctions KnowledgeModelPackage.dropFunctions @@ -69,20 +69,20 @@ runMigration = runAppContextWithBaseContext $ do ExternalLink.dropTables Component.dropTables Registry.dropTables - QuestionnaireAction.dropTables - QuestionnaireImporter.dropTables + ProjectAction.dropTables + ProjectImporter.dropTables Audit.dropTables Prefab.dropTables PersistentCommand.dropTables Submission.dropTables ActionKey.dropTables Feedback.dropTables - KnowledgeModelMigrator.dropTables + KnowledgeModelMigration.dropTables KnowledgeModelEditor.dropTables KnowledgeModelCache.dropTables Document.dropTables - QuestionnaireMigrator.dropTables - Questionnaire.dropTables + ProjectMigration.dropTables + Project.dropTables KnowledgeModelSecret.dropTables KnowledgeModelPackage.dropTables TemporaryFile.dropTables @@ -110,17 +110,17 @@ runMigration = runAppContextWithBaseContext $ do Feedback.createTables KnowledgeModelEditor.createTables KnowledgeModelCache.createTables - Questionnaire.createTables + Project.createTables DocumentTemplate.createDraftDataTable Document.createTables - QuestionnaireMigrator.createTables - KnowledgeModelMigrator.createTables + ProjectMigration.createTables + KnowledgeModelMigration.createTables Submission.createTables PersistentCommand.createTables Prefab.createTables Audit.createTables - QuestionnaireAction.createTables - QuestionnaireImporter.createTables + ProjectAction.createTables + ProjectImporter.createTables Registry.createTables Component.createTables ExternalLink.createTables @@ -129,12 +129,12 @@ runMigration = runAppContextWithBaseContext $ do KnowledgeModelPackage.createFunctions KnowledgeModelEditor.createFunctions DocumentTemplate.createFunctions - Questionnaire.createFunctions + Project.createFunctions -- 8. Create missing foreign key constraints User.createUserLocaleForeignKeyConstraint -- 9. Create DB triggers Locale.createTriggers - Questionnaire.createTriggers + Project.createTriggers Document.createTriggers -- 10. Load S3 fixtures DocumentTemplate.runS3Migration @@ -147,16 +147,16 @@ runMigration = runAppContextWithBaseContext $ do DocumentTemplate.runMigration ActionKey.runMigration KnowledgeModelEditor.runMigration - Questionnaire.runMigration + Project.runMigration Feedback.runMigration Document.runMigration - QuestionnaireMigrator.runMigration - KnowledgeModelMigrator.runMigration + ProjectMigration.runMigration + KnowledgeModelMigration.runMigration PersistentCommand.runMigration Prefab.runMigration Audit.runMigration - QuestionnaireAction.runMigration - QuestionnaireImporter.runMigration + ProjectAction.runMigration + ProjectImporter.runMigration Registry.runMigration Locale.runMigration Component.runMigration diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectActions.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectActions.hs new file mode 100644 index 000000000..c4b2b6152 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectActions.hs @@ -0,0 +1,122 @@ +module Wizard.Database.Migration.Development.Project.Data.ProjectActions where + +import qualified Data.Aeson.KeyMap as KM + +import Shared.Common.Constant.Tenant +import Shared.Common.Util.Date +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Constant.ProjectAction +import Wizard.Model.Project.Action.ProjectAction +import Wizard.Service.Project.Action.ProjectActionMapper + +projectActionFtp1 :: ProjectAction +projectActionFtp1 = + ProjectAction + { paId = "global:project-action-ftp:1.0.0" + , name = "Project Action FTP" + , organizationId = "global" + , actionId = "project-action-ftp" + , version = "1.0.0" + , metamodelVersion = projectActionMetamodelVersion + , description = "Uploading project to FTP" + , readme = "# Project Action FTP" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternAll] + , url = "http://example.com/project-action-ftp" + , config = KM.empty + , enabled = True + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectActionFtp2 :: ProjectAction +projectActionFtp2 = + ProjectAction + { paId = "global:project-action-ftp:2.0.0" + , name = "Project Action FTP" + , organizationId = "global" + , actionId = "project-action-ftp" + , version = "2.0.0" + , metamodelVersion = projectActionMetamodelVersion + , description = "Uploading project to FTP" + , readme = "# Project Action FTP" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternAll] + , url = "http://example.com/project-action-ftp" + , config = KM.empty + , enabled = True + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectActionFtp3 :: ProjectAction +projectActionFtp3 = + ProjectAction + { paId = "global:project-action-ftp:3.0.0" + , name = "Project Action FTP" + , organizationId = "global" + , actionId = "project-action-ftp" + , version = "3.0.0" + , metamodelVersion = projectActionMetamodelVersion + , description = "Uploading project to FTP" + , readme = "# Project Action FTP" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternAll] + , url = "http://example.com/project-action-ftp" + , config = KM.empty + , enabled = False + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectActionFtp3Edited :: ProjectAction +projectActionFtp3Edited = projectActionFtp3 {enabled = True} + +projectActionFtp3Dto :: ProjectActionDTO +projectActionFtp3Dto = toDTO projectActionFtp3 + +projectActionMail1 :: ProjectAction +projectActionMail1 = + ProjectAction + { paId = "global:project-action-mail:1.0.0" + , name = "Project Action Mail" + , organizationId = "global" + , actionId = "project-action-mail" + , version = "1.0.0" + , metamodelVersion = projectActionMetamodelVersion + , description = "Sending project via mail" + , readme = "# Project Action Mail" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternGlobal] + , url = "http://example.com/project-action-mail" + , config = KM.empty + , enabled = True + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectActionScp1 :: ProjectAction +projectActionScp1 = + ProjectAction + { paId = "global:project-action-onto:1.0.0" + , name = "Project Action SCP" + , organizationId = "global" + , actionId = "project-action-onto" + , version = "1.0.0" + , metamodelVersion = projectActionMetamodelVersion + , description = "Uploading project via SCP" + , readme = "# Project Action SCP" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternGlobal] + , url = "http://example.com/project-action-onto" + , config = KM.empty + , enabled = False + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireCommands.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectCommands.hs similarity index 69% rename from wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireCommands.hs rename to wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectCommands.hs index f241ca6de..14cc9c36a 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireCommands.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectCommands.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireCommands where +module Wizard.Database.Migration.Development.Project.Data.ProjectCommands where import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate @@ -6,12 +6,12 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage import Wizard.Database.Migration.Development.User.Data.Users import Wizard.Model.User.User -import WizardLib.Public.Model.PersistentCommand.Questionnaire.CreateQuestionnaireCommand +import WizardLib.Public.Model.PersistentCommand.Project.CreateProjectCommand -command1 :: CreateQuestionnaireCommand +command1 :: CreateProjectCommand command1 = - CreateQuestionnaireCommand - { name = "Questionnaire 1" + CreateProjectCommand + { name = "Project 1" , emails = [ userAlbert.email , userNikola.email @@ -20,10 +20,10 @@ command1 = , documentTemplateId = Just wizardDocumentTemplate.tId } -command2 :: CreateQuestionnaireCommand +command2 :: CreateProjectCommand command2 = - CreateQuestionnaireCommand - { name = "Questionnaire 2" + CreateProjectCommand + { name = "Project 2" , emails = [ userAlbert.email , userIsaac.email diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireComments.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectComments.hs similarity index 72% rename from wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireComments.hs rename to wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectComments.hs index 6fa09362f..dbea3a899 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireComments.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectComments.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments where +module Wizard.Database.Migration.Development.Project.Data.ProjectComments where import Control.Monad.Reader (liftIO) import qualified Data.Map.Strict as M @@ -13,29 +13,29 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Questions import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned -import Wizard.Model.Questionnaire.QuestionnaireUtil +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Comment.ProjectCommentList +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import Wizard.Model.Project.ProjectUtil import Wizard.Model.User.User -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentMapper +import Wizard.Service.Project.Comment.ProjectCommentMapper import Wizard.Service.User.UserMapper -qtnThreadsDto :: M.Map String [QuestionnaireCommentThreadList] -qtnThreadsDto = M.fromList [(cmtQ1_path, [cmtQ1_t1Dto]), (cmtQ2_path, [cmtQ2_t1Dto])] +projectCommentThreadsList :: M.Map String [ProjectCommentThreadList] +projectCommentThreadsList = M.fromList [(cmtQ1_path, [cmtQ1_t1Dto]), (cmtQ2_path, [cmtQ2_t1Dto])] cmtQ1_path :: String cmtQ1_path = createReplyKey [chapter1.uuid, question1.uuid] -cmtQ1_t1 :: QuestionnaireCommentThread +cmtQ1_t1 :: ProjectCommentThread cmtQ1_t1 = - QuestionnaireCommentThread + ProjectCommentThread { uuid = u' "f1de85a9-7f22-4d0c-bc23-3315cc4c85d7" , path = cmtQ1_path , resolved = False , comments = [cmtQ1_t1_1, cmtQ1_t1_2] , private = False - , questionnaireUuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" + , projectUuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" , tenantUuid = defaultTenantUuid , assignedTo = Nothing , assignedBy = Nothing @@ -45,17 +45,17 @@ cmtQ1_t1 = , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -create_cmtQ1_t1 :: U.UUID -> IO QuestionnaireCommentThread -create_cmtQ1_t1 qtnUuid = do +create_cmtQ1_t1 :: U.UUID -> IO ProjectCommentThread +create_cmtQ1_t1 projectUuid = do threadUuid <- liftIO generateUuid return $ - QuestionnaireCommentThread + ProjectCommentThread { uuid = threadUuid , path = cmtQ1_path , resolved = False , comments = [] , private = False - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , assignedTo = Nothing , assignedBy = Nothing @@ -65,21 +65,21 @@ create_cmtQ1_t1 qtnUuid = do , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -cmtQ1_t1Dto :: QuestionnaireCommentThreadList +cmtQ1_t1Dto :: ProjectCommentThreadList cmtQ1_t1Dto = toCommentThreadList cmtQ1_t1 Nothing (Just userAlbert) [cmtQ1_t1_1Dto, cmtQ1_t1_2Dto] -cmtQ1_t1WithEditedCmt :: QuestionnaireCommentThread +cmtQ1_t1WithEditedCmt :: ProjectCommentThread cmtQ1_t1WithEditedCmt = cmtQ1_t1 {comments = [cmtQ1_t1_1Edited, cmtQ1_t1_2]} -cmtQ1_t1WithDeletedCmt :: QuestionnaireCommentThread +cmtQ1_t1WithDeletedCmt :: ProjectCommentThread cmtQ1_t1WithDeletedCmt = cmtQ1_t1 {comments = [cmtQ1_t1_2]} -cmtQ1_t1Resolved :: QuestionnaireCommentThread +cmtQ1_t1Resolved :: ProjectCommentThread cmtQ1_t1Resolved = cmtQ1_t1 {resolved = True} -cmtQ1_t1_1 :: QuestionnaireComment +cmtQ1_t1_1 :: ProjectComment cmtQ1_t1_1 = - QuestionnaireComment + ProjectComment { uuid = u' "a2d4a1f6-6148-43a0-98d1-158176863a3c" , text = "1st comment to 1st question" , threadUuid = cmtQ1_t1.uuid @@ -89,11 +89,11 @@ cmtQ1_t1_1 = , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -create_cmtQ1_t1_1 :: U.UUID -> IO QuestionnaireComment +create_cmtQ1_t1_1 :: U.UUID -> IO ProjectComment create_cmtQ1_t1_1 threadUuid = do commentUuid <- liftIO generateUuid return $ - QuestionnaireComment + ProjectComment { uuid = commentUuid , text = "1st comment to 1st question" , threadUuid = threadUuid @@ -103,15 +103,15 @@ create_cmtQ1_t1_1 threadUuid = do , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -cmtQ1_t1_1Dto :: QuestionnaireCommentList +cmtQ1_t1_1Dto :: ProjectCommentList cmtQ1_t1_1Dto = toCommentList cmtQ1_t1_1 (Just userAlbert) -cmtQ1_t1_1Edited :: QuestionnaireComment +cmtQ1_t1_1Edited :: ProjectComment cmtQ1_t1_1Edited = cmtQ1_t1_1 {text = "EDITED: 1st comment to 1st question"} -cmtQ1_t1_2 :: QuestionnaireComment +cmtQ1_t1_2 :: ProjectComment cmtQ1_t1_2 = - QuestionnaireComment + ProjectComment { uuid = u' "a9861528-7ca9-48d8-917c-3bf9f240bdf3" , text = "2nd comment to 1st question" , threadUuid = cmtQ1_t1.uuid @@ -121,11 +121,11 @@ cmtQ1_t1_2 = , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -create_cmtQ1_t1_2 :: U.UUID -> IO QuestionnaireComment +create_cmtQ1_t1_2 :: U.UUID -> IO ProjectComment create_cmtQ1_t1_2 threadUuid = do commentUuid <- liftIO generateUuid return $ - QuestionnaireComment + ProjectComment { uuid = commentUuid , text = "2nd comment to 1st question" , threadUuid = threadUuid @@ -135,21 +135,21 @@ create_cmtQ1_t1_2 threadUuid = do , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -cmtQ1_t1_2Dto :: QuestionnaireCommentList +cmtQ1_t1_2Dto :: ProjectCommentList cmtQ1_t1_2Dto = toCommentList cmtQ1_t1_2 (Just userAlbert) cmtQ2_path :: String cmtQ2_path = createReplyKey [chapter1.uuid, question2.uuid] -cmtQ2_t1 :: QuestionnaireCommentThread +cmtQ2_t1 :: ProjectCommentThread cmtQ2_t1 = - QuestionnaireCommentThread + ProjectCommentThread { uuid = u' "2b8681dc-54b5-4bc4-bf9f-a1ec6ad37823" , path = cmtQ2_path , resolved = False , comments = [cmtQ2_t1_1] , private = False - , questionnaireUuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" + , projectUuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" , tenantUuid = defaultTenantUuid , assignedTo = Nothing , assignedBy = Nothing @@ -159,12 +159,12 @@ cmtQ2_t1 = , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -cmtQ2_t1Dto :: QuestionnaireCommentThreadList +cmtQ2_t1Dto :: ProjectCommentThreadList cmtQ2_t1Dto = toCommentThreadList cmtQ2_t1 Nothing (Just userAlbert) [cmtQ2_t1_1Dto] -cmtQ2_t1_1 :: QuestionnaireComment +cmtQ2_t1_1 :: ProjectComment cmtQ2_t1_1 = - QuestionnaireComment + ProjectComment { uuid = u' "e9827a92-ecfd-4410-8809-ea761fe03bd3" , text = "1nd comment to 2st question" , threadUuid = cmtQ2_t1.uuid @@ -174,14 +174,14 @@ cmtQ2_t1_1 = , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 } -cmtQ2_t1_1Dto :: QuestionnaireCommentList +cmtQ2_t1_1Dto :: ProjectCommentList cmtQ2_t1_1Dto = toCommentList cmtQ2_t1_1 (Just userAlbert) -cmtAssigned :: QuestionnaireCommentThreadAssigned +cmtAssigned :: ProjectCommentThreadAssigned cmtAssigned = - QuestionnaireCommentThreadAssigned - { questionnaireUuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" - , questionnaireName = "My Private Questionnaire" + ProjectCommentThreadAssigned + { projectUuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" + , projectName = "My Private Project" , commentThreadUuid = cmtQ1_t1.uuid , path = cmtQ1_t1.path , resolved = cmtQ1_t1.resolved diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireEvents.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectEvents.hs similarity index 68% rename from wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireEvents.hs rename to wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectEvents.hs index e1f41e626..a1a3edd28 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireEvents.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectEvents.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents where +module Wizard.Database.Migration.Development.Project.Data.ProjectEvents where import qualified Data.List as L import Data.Maybe (fromJust) @@ -10,371 +10,371 @@ import Shared.Common.Util.String import Shared.Common.Util.Uuid import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Phases import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireLabels -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Database.Migration.Development.Project.Data.ProjectLabels +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.ProjectReply import Wizard.Model.User.User -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Service.Project.Event.ProjectEventMapper import Wizard.Service.User.UserMapper import WizardLib.Public.Model.User.UserSuggestion -fEvents :: U.UUID -> [QuestionnaireEvent] -fEvents qtnUuid = - [ sre_rQ1' qtnUuid - , sre_rQ2' qtnUuid - , sre_rQ2_aYes_fuQ1' qtnUuid - , sre_rQ3' qtnUuid - , sre_rQ4' qtnUuid - , sre_rQ4_it1_q5' qtnUuid - , sre_rQ4_it1_q5_it1_question7' qtnUuid - , sre_rQ4_it1_q5_it1_question8' qtnUuid - , sre_rQ4_it1_q6' qtnUuid - , sre_rQ4_it2_q5' qtnUuid - , sre_rQ4_it2_q6' qtnUuid - , sre_rQ9' qtnUuid - , sre_rQ10' qtnUuid - , sre_rQ11' qtnUuid - , sphse_1' qtnUuid - , slble_rQ1' qtnUuid +fEvents :: U.UUID -> [ProjectEvent] +fEvents projectUuid = + [ sre_rQ1' projectUuid + , sre_rQ2' projectUuid + , sre_rQ2_aYes_fuQ1' projectUuid + , sre_rQ3' projectUuid + , sre_rQ4' projectUuid + , sre_rQ4_it1_q5' projectUuid + , sre_rQ4_it1_q5_it1_question7' projectUuid + , sre_rQ4_it1_q5_it1_question8' projectUuid + , sre_rQ4_it1_q6' projectUuid + , sre_rQ4_it2_q5' projectUuid + , sre_rQ4_it2_q6' projectUuid + , sre_rQ9' projectUuid + , sre_rQ10' projectUuid + , sre_rQ11' projectUuid + , sphse_1' projectUuid + , slble_rQ1' projectUuid ] -fEventsDto :: U.UUID -> [QuestionnaireEventDTO] -fEventsDto qtnUuid = fmap (\event -> toEventDTO event (Just userAlbert)) (fEvents qtnUuid) +fEventsDto :: U.UUID -> [ProjectEventDTO] +fEventsDto projectUuid = fmap (\event -> toEventDTO event (Just userAlbert)) (fEvents projectUuid) -fEventsList :: U.UUID -> [QuestionnaireEventList] -fEventsList qtnUuid = fmap (\event -> toEventList event (Just userAlbert)) (fEvents qtnUuid) +fEventsList :: U.UUID -> [ProjectEventList] +fEventsList projectUuid = fmap (\event -> toEventList event (Just userAlbert)) (fEvents projectUuid) -fEventsWithUpdated :: U.UUID -> [QuestionnaireEvent] -fEventsWithUpdated qtnUuid = fEvents qtnUuid ++ [sre_rQ1Updated' qtnUuid] +fEventsWithUpdated :: U.UUID -> [ProjectEvent] +fEventsWithUpdated projectUuid = fEvents projectUuid ++ [sre_rQ1Updated' projectUuid] -fEventsWithDeleted :: U.UUID -> [QuestionnaireEvent] -fEventsWithDeleted qtnUuid = fEvents qtnUuid ++ [cre_rQ1' qtnUuid] +fEventsWithDeleted :: U.UUID -> [ProjectEvent] +fEventsWithDeleted projectUuid = fEvents projectUuid ++ [cre_rQ1' projectUuid] -fEventsEdited :: U.UUID -> [QuestionnaireEvent] -fEventsEdited qtnUuid = fEvents qtnUuid ++ [slble_rQ2' qtnUuid] +fEventsEdited :: U.UUID -> [ProjectEvent] +fEventsEdited projectUuid = fEvents projectUuid ++ [slble_rQ2' projectUuid] -sre_rQ1' :: U.UUID -> QuestionnaireEvent +sre_rQ1' :: U.UUID -> ProjectEvent sre_rQ1' = SetReplyEvent' . sre_rQ1 sre_rQ1 :: U.UUID -> SetReplyEvent -sre_rQ1 qtnUuid = +sre_rQ1 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "12bc42247314" + { uuid = createEventUuid projectUuid "12bc42247314" , path = fst rQ1 , value = (snd rQ1).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ1).createdBy , createdAt = (snd rQ1).createdAt } -sre_rQ1Updated' :: U.UUID -> QuestionnaireEvent +sre_rQ1Updated' :: U.UUID -> ProjectEvent sre_rQ1Updated' = SetReplyEvent' . sre_rQ1Updated sre_rQ1Updated :: U.UUID -> SetReplyEvent -sre_rQ1Updated qtnUuid = +sre_rQ1Updated projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "ede0aa4d6c5a" + { uuid = createEventUuid projectUuid "ede0aa4d6c5a" , path = fst rQ1Updated , value = (snd rQ1Updated).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ1Updated).createdBy , createdAt = (snd rQ1Updated).createdAt } -sre_rQ1Dto' :: U.UUID -> QuestionnaireEventDTO -sre_rQ1Dto' qtnUuid = toEventDTO (sre_rQ1' qtnUuid) (Just userAlbert) +sre_rQ1Dto' :: U.UUID -> ProjectEventDTO +sre_rQ1Dto' projectUuid = toEventDTO (sre_rQ1' projectUuid) (Just userAlbert) -sre_rQ2' :: U.UUID -> QuestionnaireEvent +sre_rQ2' :: U.UUID -> ProjectEvent sre_rQ2' = SetReplyEvent' . sre_rQ2 sre_rQ2 :: U.UUID -> SetReplyEvent -sre_rQ2 qtnUuid = +sre_rQ2 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "5dc60233046e" + { uuid = createEventUuid projectUuid "5dc60233046e" , path = fst rQ2 , value = (snd rQ2).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ2).createdBy , createdAt = (snd rQ2).createdAt } -sre_rQ2_aYes_fuQ1' :: U.UUID -> QuestionnaireEvent +sre_rQ2_aYes_fuQ1' :: U.UUID -> ProjectEvent sre_rQ2_aYes_fuQ1' = SetReplyEvent' . sre_rQ2_aYes_fuQ1 sre_rQ2_aYes_fuQ1 :: U.UUID -> SetReplyEvent -sre_rQ2_aYes_fuQ1 qtnUuid = +sre_rQ2_aYes_fuQ1 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "c4db3ec5fadd" + { uuid = createEventUuid projectUuid "c4db3ec5fadd" , path = fst rQ2_aYes_fuQ1 , value = (snd rQ2_aYes_fuQ1).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ2_aYes_fuQ1).createdBy , createdAt = (snd rQ2_aYes_fuQ1).createdAt } -sre_rQ3' :: U.UUID -> QuestionnaireEvent +sre_rQ3' :: U.UUID -> ProjectEvent sre_rQ3' = SetReplyEvent' . sre_rQ3 sre_rQ3 :: U.UUID -> SetReplyEvent -sre_rQ3 qtnUuid = +sre_rQ3 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "cf42760517d7" + { uuid = createEventUuid projectUuid "cf42760517d7" , path = fst rQ3 , value = (snd rQ3).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ3).createdBy , createdAt = (snd rQ3).createdAt } -sre_rQ4' :: U.UUID -> QuestionnaireEvent +sre_rQ4' :: U.UUID -> ProjectEvent sre_rQ4' = SetReplyEvent' . sre_rQ4 sre_rQ4 :: U.UUID -> SetReplyEvent -sre_rQ4 qtnUuid = +sre_rQ4 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "52d6816a471c" + { uuid = createEventUuid projectUuid "52d6816a471c" , path = fst rQ4 , value = (snd rQ4).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ4).createdBy , createdAt = (snd rQ4).createdAt } -sre_rQ4_it1_q5' :: U.UUID -> QuestionnaireEvent +sre_rQ4_it1_q5' :: U.UUID -> ProjectEvent sre_rQ4_it1_q5' = SetReplyEvent' . sre_rQ4_it1_q5 sre_rQ4_it1_q5 :: U.UUID -> SetReplyEvent -sre_rQ4_it1_q5 qtnUuid = +sre_rQ4_it1_q5 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "51954a9feb0b" + { uuid = createEventUuid projectUuid "51954a9feb0b" , path = fst rQ4_it1_q5 , value = (snd rQ4_it1_q5).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ4_it1_q5).createdBy , createdAt = (snd rQ4_it1_q5).createdAt } -sre_rQ4_it1_q5_it1_question7' :: U.UUID -> QuestionnaireEvent +sre_rQ4_it1_q5_it1_question7' :: U.UUID -> ProjectEvent sre_rQ4_it1_q5_it1_question7' = SetReplyEvent' . sre_rQ4_it1_q5_it1_question7 sre_rQ4_it1_q5_it1_question7 :: U.UUID -> SetReplyEvent -sre_rQ4_it1_q5_it1_question7 qtnUuid = +sre_rQ4_it1_q5_it1_question7 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "7927b71393bc" + { uuid = createEventUuid projectUuid "7927b71393bc" , path = fst rQ4_it1_q5_it1_question7 , value = (snd rQ4_it1_q5_it1_question7).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ4_it1_q5_it1_question7).createdBy , createdAt = (snd rQ4_it1_q5_it1_question7).createdAt } -sre_rQ4_it1_q5_it1_question8' :: U.UUID -> QuestionnaireEvent +sre_rQ4_it1_q5_it1_question8' :: U.UUID -> ProjectEvent sre_rQ4_it1_q5_it1_question8' = SetReplyEvent' . sre_rQ4_it1_q5_it1_question8 sre_rQ4_it1_q5_it1_question8 :: U.UUID -> SetReplyEvent -sre_rQ4_it1_q5_it1_question8 qtnUuid = +sre_rQ4_it1_q5_it1_question8 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "a8b3312ce8be" + { uuid = createEventUuid projectUuid "a8b3312ce8be" , path = fst rQ4_it1_q5_it1_question8 , value = (snd rQ4_it1_q5_it1_question8).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ4_it1_q5_it1_question8).createdBy , createdAt = (snd rQ4_it1_q5_it1_question8).createdAt } -sre_rQ4_it1_q6' :: U.UUID -> QuestionnaireEvent +sre_rQ4_it1_q6' :: U.UUID -> ProjectEvent sre_rQ4_it1_q6' = SetReplyEvent' . sre_rQ4_it1_q6 sre_rQ4_it1_q6 :: U.UUID -> SetReplyEvent -sre_rQ4_it1_q6 qtnUuid = +sre_rQ4_it1_q6 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "d270a461c2bb" + { uuid = createEventUuid projectUuid "d270a461c2bb" , path = fst rQ4_it1_q6 , value = (snd rQ4_it1_q6).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ4_it1_q6).createdBy , createdAt = (snd rQ4_it1_q6).createdAt } -sre_rQ4_it2_q5' :: U.UUID -> QuestionnaireEvent +sre_rQ4_it2_q5' :: U.UUID -> ProjectEvent sre_rQ4_it2_q5' = SetReplyEvent' . sre_rQ4_it2_q5 sre_rQ4_it2_q5 :: U.UUID -> SetReplyEvent -sre_rQ4_it2_q5 qtnUuid = +sre_rQ4_it2_q5 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "e30b5086cea2" + { uuid = createEventUuid projectUuid "e30b5086cea2" , path = fst rQ4_it2_q5 , value = (snd rQ4_it2_q5).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ4_it2_q5).createdBy , createdAt = (snd rQ4_it2_q5).createdAt } -sre_rQ4_it2_q6' :: U.UUID -> QuestionnaireEvent +sre_rQ4_it2_q6' :: U.UUID -> ProjectEvent sre_rQ4_it2_q6' = SetReplyEvent' . sre_rQ4_it2_q6 sre_rQ4_it2_q6 :: U.UUID -> SetReplyEvent -sre_rQ4_it2_q6 qtnUuid = +sre_rQ4_it2_q6 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "8a83232defb2" + { uuid = createEventUuid projectUuid "8a83232defb2" , path = fst rQ4_it2_q6 , value = (snd rQ4_it2_q6).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ4_it2_q6).createdBy , createdAt = (snd rQ4_it2_q6).createdAt } -sre_rQ9' :: U.UUID -> QuestionnaireEvent +sre_rQ9' :: U.UUID -> ProjectEvent sre_rQ9' = SetReplyEvent' . sre_rQ9 sre_rQ9 :: U.UUID -> SetReplyEvent -sre_rQ9 qtnUuid = +sre_rQ9 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "064a51dfe89a" + { uuid = createEventUuid projectUuid "064a51dfe89a" , path = fst rQ9 , value = (snd rQ9).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ9).createdBy , createdAt = (snd rQ9).createdAt } -sre_rQ10' :: U.UUID -> QuestionnaireEvent +sre_rQ10' :: U.UUID -> ProjectEvent sre_rQ10' = SetReplyEvent' . sre_rQ10 sre_rQ10 :: U.UUID -> SetReplyEvent -sre_rQ10 qtnUuid = +sre_rQ10 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "40df71a81b92" + { uuid = createEventUuid projectUuid "40df71a81b92" , path = fst rQ10 , value = (snd rQ10).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ10).createdBy , createdAt = (snd rQ10).createdAt } -sre_rQ11' :: U.UUID -> QuestionnaireEvent +sre_rQ11' :: U.UUID -> ProjectEvent sre_rQ11' = SetReplyEvent' . sre_rQ11 sre_rQ11 :: U.UUID -> SetReplyEvent -sre_rQ11 qtnUuid = +sre_rQ11 projectUuid = SetReplyEvent - { uuid = createEventUuid qtnUuid "c4f4481d5670" + { uuid = createEventUuid projectUuid "c4f4481d5670" , path = fst rQ11 , value = (snd rQ11).value - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = fmap (.uuid) $ (snd rQ11).createdBy , createdAt = (snd rQ11).createdAt } -cre_rQ1' :: U.UUID -> QuestionnaireEvent +cre_rQ1' :: U.UUID -> ProjectEvent cre_rQ1' = ClearReplyEvent' . cre_rQ1 cre_rQ1 :: U.UUID -> ClearReplyEvent -cre_rQ1 qtnUuid = +cre_rQ1 projectUuid = ClearReplyEvent - { uuid = createEventUuid qtnUuid "c513e14de55e" + { uuid = createEventUuid projectUuid "c513e14de55e" , path = fst rQ1 - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = Just userAlbert.uuid , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 17 } -sphse_1' :: U.UUID -> QuestionnaireEvent +sphse_1' :: U.UUID -> ProjectEvent sphse_1' = SetPhaseEvent' . sphse_1 sphse_1 :: U.UUID -> SetPhaseEvent -sphse_1 qtnUuid = +sphse_1 projectUuid = SetPhaseEvent - { uuid = createEventUuid qtnUuid "ee411f0005d3" + { uuid = createEventUuid projectUuid "ee411f0005d3" , phaseUuid = Just $ phase1.uuid - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = Just userAlbert.uuid , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 18 } -sphse_2' :: U.UUID -> QuestionnaireEvent +sphse_2' :: U.UUID -> ProjectEvent sphse_2' = SetPhaseEvent' . sphse_2 sphse_2 :: U.UUID -> SetPhaseEvent -sphse_2 qtnUuid = +sphse_2 projectUuid = SetPhaseEvent - { uuid = createEventUuid qtnUuid "43eae0986894" + { uuid = createEventUuid projectUuid "43eae0986894" , phaseUuid = Just $ phase2.uuid - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = Just userAlbert.uuid , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 19 } -sphse_3' :: U.UUID -> QuestionnaireEvent +sphse_3' :: U.UUID -> ProjectEvent sphse_3' = SetPhaseEvent' . sphse_3 sphse_3 :: U.UUID -> SetPhaseEvent -sphse_3 qtnUuid = +sphse_3 projectUuid = SetPhaseEvent - { uuid = createEventUuid qtnUuid "dacc8f77de05" + { uuid = createEventUuid projectUuid "dacc8f77de05" , phaseUuid = Just $ phase3.uuid - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = Just userAlbert.uuid , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 20 } -slble_rQ1' :: U.UUID -> QuestionnaireEvent +slble_rQ1' :: U.UUID -> ProjectEvent slble_rQ1' = SetLabelsEvent' . slble_rQ1 slble_rQ1 :: U.UUID -> SetLabelsEvent -slble_rQ1 qtnUuid = +slble_rQ1 projectUuid = SetLabelsEvent - { uuid = createEventUuid qtnUuid "dd016270ce7e" + { uuid = createEventUuid projectUuid "dd016270ce7e" , path = fst rQ1 , value = [fLabel1] - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = Just userAlbert.uuid , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 21 } -slble_rQ2' :: U.UUID -> QuestionnaireEvent +slble_rQ2' :: U.UUID -> ProjectEvent slble_rQ2' = SetLabelsEvent' . slble_rQ2 slble_rQ2 :: U.UUID -> SetLabelsEvent -slble_rQ2 qtnUuid = +slble_rQ2 projectUuid = SetLabelsEvent - { uuid = createEventUuid qtnUuid "e2acc52bf8db" + { uuid = createEventUuid projectUuid "e2acc52bf8db" , path = fst rQ2 , value = [fLabel1] - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = defaultTenantUuid , createdBy = Just userAlbert.uuid , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 22 } -rte_rQ1_t1' :: QuestionnaireEventDTO +rte_rQ1_t1' :: ProjectEventDTO rte_rQ1_t1' = ResolveCommentThreadEventDTO' rte_rQ1_t1 rte_rQ1_t1 :: ResolveCommentThreadEventDTO @@ -388,7 +388,7 @@ rte_rQ1_t1 = , createdAt = cmtQ1_t1Resolved.createdAt } -rtche_rQ1_t1' :: QuestionnaireEventChangeDTO +rtche_rQ1_t1' :: ProjectEventChangeDTO rtche_rQ1_t1' = ResolveCommentThreadEventChangeDTO' rtche_rQ1_t1 rtche_rQ1_t1 :: ResolveCommentThreadEventChangeDTO @@ -401,7 +401,7 @@ rtche_rQ1_t1 = , commentCount = 1 } -ote_rQ1_t1' :: QuestionnaireEventDTO +ote_rQ1_t1' :: ProjectEventDTO ote_rQ1_t1' = ReopenCommentThreadEventDTO' ote_rQ1_t1 ote_rQ1_t1 :: ReopenCommentThreadEventDTO @@ -415,7 +415,7 @@ ote_rQ1_t1 = , createdAt = cmtQ1_t1.createdAt } -otche_rQ1_t1' :: QuestionnaireEventChangeDTO +otche_rQ1_t1' :: ProjectEventChangeDTO otche_rQ1_t1' = ReopenCommentThreadEventChangeDTO' otche_rQ1_t1 otche_rQ1_t1 :: ReopenCommentThreadEventChangeDTO @@ -428,7 +428,7 @@ otche_rQ1_t1 = , private = False } -aste_rQ1_t1' :: QuestionnaireEventDTO +aste_rQ1_t1' :: ProjectEventDTO aste_rQ1_t1' = AssignCommentThreadEventDTO' aste_rQ1_t1 aste_rQ1_t1 :: AssignCommentThreadEventDTO @@ -443,7 +443,7 @@ aste_rQ1_t1 = , createdAt = cmtQ1_t1.createdAt } -asche_rQ1_t1' :: QuestionnaireEventChangeDTO +asche_rQ1_t1' :: ProjectEventChangeDTO asche_rQ1_t1' = AssignCommentThreadEventChangeDTO' asche_rQ1_t1 asche_rQ1_t1 :: AssignCommentThreadEventChangeDTO @@ -456,7 +456,7 @@ asche_rQ1_t1 = , assignedTo = aste_rQ1_t1.assignedTo } -dte_rQ1_t1' :: QuestionnaireEventDTO +dte_rQ1_t1' :: ProjectEventDTO dte_rQ1_t1' = DeleteCommentThreadEventDTO' dte_rQ1_t1 dte_rQ1_t1 :: DeleteCommentThreadEventDTO @@ -469,7 +469,7 @@ dte_rQ1_t1 = , createdAt = cmtQ1_t1.createdAt } -dtche_rQ1_t1' :: QuestionnaireEventChangeDTO +dtche_rQ1_t1' :: ProjectEventChangeDTO dtche_rQ1_t1' = DeleteCommentThreadEventChangeDTO' dtche_rQ1_t1 dtche_rQ1_t1 :: DeleteCommentThreadEventChangeDTO @@ -481,7 +481,7 @@ dtche_rQ1_t1 = , private = False } -ace_rQ1_t1_1' :: QuestionnaireEventDTO +ace_rQ1_t1_1' :: ProjectEventDTO ace_rQ1_t1_1' = AddCommentEventDTO' ace_rQ1_t1_1 ace_rQ1_t1_1 :: AddCommentEventDTO @@ -497,7 +497,7 @@ ace_rQ1_t1_1 = , createdAt = cmtQ1_t1_1.createdAt } -ace_rQ1_t1_2' :: QuestionnaireEventDTO +ace_rQ1_t1_2' :: ProjectEventDTO ace_rQ1_t1_2' = AddCommentEventDTO' ace_rQ1_t1_2 ace_rQ1_t1_2 :: AddCommentEventDTO @@ -513,7 +513,7 @@ ace_rQ1_t1_2 = , createdAt = cmtQ1_t1_2.createdAt } -ace_rQ2_t1_1' :: QuestionnaireEventDTO +ace_rQ2_t1_1' :: ProjectEventDTO ace_rQ2_t1_1' = AddCommentEventDTO' ace_rQ2_t1_1 ace_rQ2_t1_1 :: AddCommentEventDTO @@ -529,7 +529,7 @@ ace_rQ2_t1_1 = , createdAt = cmtQ2_t1_1.createdAt } -acche_rQ2_t1_1' :: QuestionnaireEventChangeDTO +acche_rQ2_t1_1' :: ProjectEventChangeDTO acche_rQ2_t1_1' = AddCommentEventChangeDTO' acche_rQ2_t1_1 acche_rQ2_t1_1 :: AddCommentEventChangeDTO @@ -544,7 +544,7 @@ acche_rQ2_t1_1 = , newThread = True } -ece_rQ1_t1_1' :: QuestionnaireEventDTO +ece_rQ1_t1_1' :: ProjectEventDTO ece_rQ1_t1_1' = EditCommentEventDTO' ece_rQ1_t1_1 ece_rQ1_t1_1 :: EditCommentEventDTO @@ -559,7 +559,7 @@ ece_rQ1_t1_1 = , createdAt = cmtQ1_t1_1Edited.updatedAt } -ecche_rQ1_t1_1' :: QuestionnaireEventChangeDTO +ecche_rQ1_t1_1' :: ProjectEventChangeDTO ecche_rQ1_t1_1' = EditCommentEventChangeDTO' ecche_rQ1_t1_1 ecche_rQ1_t1_1 :: EditCommentEventChangeDTO @@ -573,7 +573,7 @@ ecche_rQ1_t1_1 = , private = False } -dce_rQ1_t1_1' :: QuestionnaireEventDTO +dce_rQ1_t1_1' :: ProjectEventDTO dce_rQ1_t1_1' = DeleteCommentEventDTO' dce_rQ1_t1_1 dce_rQ1_t1_1 :: DeleteCommentEventDTO @@ -587,7 +587,7 @@ dce_rQ1_t1_1 = , createdAt = cmtQ1_t1_1.createdAt } -dcche_rQ1_t1_1' :: QuestionnaireEventChangeDTO +dcche_rQ1_t1_1' :: ProjectEventChangeDTO dcche_rQ1_t1_1' = DeleteCommentEventChangeDTO' dcche_rQ1_t1_1 dcche_rQ1_t1_1 :: DeleteCommentEventChangeDTO @@ -601,6 +601,6 @@ dcche_rQ1_t1_1 = } createEventUuid :: U.UUID -> String -> U.UUID -createEventUuid questionnaireUuid eventSuffix = - let parts = splitOn "-" . U.toString $ questionnaireUuid +createEventUuid projectUuid eventSuffix = + let parts = splitOn "-" . U.toString $ projectUuid in u' . L.intercalate "-" $ [head parts, parts !! 1, parts !! 2, parts !! 3, eventSuffix] diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectFiles.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectFiles.hs new file mode 100644 index 000000000..8fc99f83f --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectFiles.hs @@ -0,0 +1,33 @@ +module Wizard.Database.Migration.Development.Project.Data.ProjectFiles where + +import Shared.Common.Util.Date +import Shared.Common.Util.Uuid +import Wizard.Database.Migration.Development.User.Data.Users +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Project.ProjectSimple + +projectFileList :: ProjectFileList +projectFileList = + ProjectFileList + { uuid = u' "e3726571-f81e-4e34-a17a-2f5714b7aade" + , fileName = "my_file.txt" + , contentType = "application/json" + , fileSize = 123456 + , project = + ProjectSimple + { uuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" + , name = "My Private Project" + } + , createdBy = Just userAlbertSuggestion + , createdAt = dt' 2018 01 21 + } + +projectFileSimple :: ProjectFileSimple +projectFileSimple = + ProjectFileSimple + { uuid = projectFileList.uuid + , fileName = projectFileList.fileName + , contentType = projectFileList.contentType + , fileSize = projectFileList.fileSize + } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectImporters.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectImporters.hs new file mode 100644 index 000000000..3bd6e1a46 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectImporters.hs @@ -0,0 +1,115 @@ +module Wizard.Database.Migration.Development.Project.Data.ProjectImporters where + +import Shared.Common.Constant.Tenant +import Shared.Common.Util.Date +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Constant.ProjectImporter +import Wizard.Model.Project.Importer.ProjectImporter +import Wizard.Service.Project.Importer.ProjectImporterMapper + +projectImporterBio1 :: ProjectImporter +projectImporterBio1 = + ProjectImporter + { piId = "global:project-importer-bio:1.0.0" + , name = "ProjectImporterBio" + , organizationId = "global" + , importerId = "project-importer-bio" + , version = "1.0.0" + , metamodelVersion = projectImporterMetamodelVersion + , description = "Import bio answers from project" + , readme = "# Default ProjectImporter BIO 1" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternAll] + , url = "http://example.com/project-importer-bio" + , enabled = True + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectImporterBio2 :: ProjectImporter +projectImporterBio2 = + ProjectImporter + { piId = "global:project-importer-bio:2.0.0" + , name = "ProjectImporterBio" + , organizationId = "global" + , importerId = "project-importer-bio" + , version = "2.0.0" + , metamodelVersion = projectImporterMetamodelVersion + , description = "Import bio answers from project" + , readme = "# Default ProjectImporter BIO 2" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternAll] + , url = "http://example.com/project-importer-bio" + , enabled = True + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectImporterBio3 :: ProjectImporter +projectImporterBio3 = + ProjectImporter + { piId = "global:project-importer-bio:3.0.0" + , name = "ProjectImporterBio" + , organizationId = "global" + , importerId = "project-importer-bio" + , version = "3.0.0" + , metamodelVersion = projectImporterMetamodelVersion + , description = "Import bio answers from project" + , readme = "# Default ProjectImporter BIO 3" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternAll] + , url = "http://example.com/project-importer-bio" + , enabled = False + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectImporterBio3Edited :: ProjectImporter +projectImporterBio3Edited = projectImporterBio3 {enabled = True} + +projectImporterBio3Dto :: ProjectImporterDTO +projectImporterBio3Dto = toDTO projectImporterBio3 + +projectImporterExt1 :: ProjectImporter +projectImporterExt1 = + ProjectImporter + { piId = "global:project-ext-importer:1.0.0" + , name = "ProjectImporterExt" + , organizationId = "global" + , importerId = "project-ext-importer" + , version = "1.0.0" + , metamodelVersion = projectImporterMetamodelVersion + , description = "Import ext answers from project" + , readme = "# Default Ext ProjectImporter" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternGlobal] + , url = "http://example.com/project-ext-importer" + , enabled = True + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } + +projectImporterOnto1 :: ProjectImporter +projectImporterOnto1 = + ProjectImporter + { piId = "global:project-importer-onto:1.0.0" + , name = "ProjectImporterOnto" + , organizationId = "global" + , importerId = "project-importer-onto" + , version = "1.0.0" + , metamodelVersion = projectImporterMetamodelVersion + , description = "Import onto answers from project" + , readme = "# Default Ext ProjectImporter" + , license = "Apache-2.0" + , allowedPackages = [kmPackagePatternGlobal] + , url = "http://example.com/project-importer-onto" + , enabled = False + , tenantUuid = defaultTenantUuid + , createdAt = dt' 2018 1 21 + , updatedAt = dt' 2018 1 21 + } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireLabels.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectLabels.hs similarity index 66% rename from wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireLabels.hs rename to wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectLabels.hs index bbf91817a..bbb7c80a5 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireLabels.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectLabels.hs @@ -1,10 +1,10 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireLabels where +module Wizard.Database.Migration.Development.Project.Data.ProjectLabels where import qualified Data.Map.Strict as M import qualified Data.UUID as U import Shared.Common.Util.Uuid -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies fLabel1 = u' "3268ae3b-8c1a-44ea-ba69-ad759b3ef2ae" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMessages.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMessages.hs new file mode 100644 index 000000000..ff4740dd6 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMessages.hs @@ -0,0 +1,16 @@ +module Wizard.Database.Migration.Development.Project.Data.ProjectMessages where + +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.User.Data.Users +import Wizard.Service.Project.Event.ProjectEventMapper + +ensureOnlineUserAction :: ClientProjectMessageDTO +ensureOnlineUserAction = + SetContent_ClientProjectMessageDTO . SetReplyEventChangeDTO' $ + toSetReplyEventChangeDTO (sre_rQ1 project1Uuid) + +setUserListAction :: ServerProjectMessageDTO +setUserListAction = SetUserList_ServerProjectMessageDTO [userAlbertOnlineInfo] diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMigrations.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMigrations.hs new file mode 100644 index 000000000..adb6b3edf --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectMigrations.hs @@ -0,0 +1,135 @@ +module Wizard.Database.Migration.Development.Project.Data.ProjectMigrations where + +import qualified Data.Map.Strict as M + +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Questions +import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel +import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.Tenant.Data.Tenants +import Wizard.Model.Project.Migration.ProjectMigration +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Tenant.Tenant +import Wizard.Service.Project.ProjectMapper + +projectMigration :: ProjectMigration +projectMigration = + ProjectMigration + { oldProjectUuid = projectMigrationDto.oldProject.uuid + , newProjectUuid = projectMigrationDto.newProject.uuid + , resolvedQuestionUuids = [question2.uuid] + , tenantUuid = defaultTenant.uuid + } + +projectMigrationDto :: ProjectMigrationDTO +projectMigrationDto = + ProjectMigrationDTO + { oldProject = + toDetailProjectDTO + (toDetailQuestionnaire project4 (Just project4Upgraded.uuid) [] 0 0) + M.empty + M.empty + km1Netherlands + project4Ctn.phaseUuid + project4Ctn.replies + project4Ctn.labels + , newProject = + toDetailProjectDTO + (toDetailQuestionnaire project4Upgraded Nothing [] 0 0) + M.empty + M.empty + km1NetherlandsV2 + project4Ctn.phaseUuid + project4Ctn.replies + project4Ctn.labels + , resolvedQuestionUuids = [question2.uuid] + , tenantUuid = defaultTenant.uuid + } + +projectMigrationVisibleViewDto :: ProjectMigrationDTO +projectMigrationVisibleViewDto = + ProjectMigrationDTO + { oldProject = + toDetailProjectDTO + (toDetailQuestionnaire project4VisibleView (Just project4Upgraded.uuid) [] 0 0) + M.empty + M.empty + km1Netherlands + project4Ctn.phaseUuid + project4Ctn.replies + project4Ctn.labels + , newProject = + toDetailProjectDTO + (toDetailQuestionnaire project4VisibleViewUpgraded Nothing [] 0 0) + M.empty + M.empty + km1NetherlandsV2 + project4Ctn.phaseUuid + project4Ctn.replies + project4Ctn.labels + , resolvedQuestionUuids = projectMigrationDto.resolvedQuestionUuids + , tenantUuid = defaultTenant.uuid + } + +projectMigrationVisibleEditDto :: ProjectMigrationDTO +projectMigrationVisibleEditDto = + ProjectMigrationDTO + { oldProject = + toDetailProjectDTO + (toDetailQuestionnaire project4VisibleEdit (Just project4Upgraded.uuid) [] 0 0) + M.empty + M.empty + km1Netherlands + project4Ctn.phaseUuid + project4Ctn.replies + project4Ctn.labels + , newProject = + toDetailProjectDTO + (toDetailQuestionnaire project4VisibleEditUpgraded Nothing [] 0 0) + M.empty + M.empty + km1NetherlandsV2 + project4Ctn.phaseUuid + project4Ctn.replies + project4Ctn.labels + , resolvedQuestionUuids = projectMigrationDto.resolvedQuestionUuids + , tenantUuid = defaultTenant.uuid + } + +projectMigrationDtoEdited :: ProjectMigrationDTO +projectMigrationDtoEdited = + ProjectMigrationDTO + { oldProject = projectMigrationDto.oldProject + , newProject = projectMigrationDto.newProject + , resolvedQuestionUuids = [question2.uuid, question3.uuid] + , tenantUuid = projectMigrationDto.tenantUuid + } + +projectMigrationCreateDto :: ProjectMigrationCreateDTO +projectMigrationCreateDto = + ProjectMigrationCreateDTO + { targetKnowledgeModelPackageId = netherlandsKmPackageV2.pId + , targetTagUuids = project4Upgraded.selectedQuestionTagUuids + } + +projectMigrationChangeDto :: ProjectMigrationChangeDTO +projectMigrationChangeDto = + ProjectMigrationChangeDTO + { resolvedQuestionUuids = projectMigrationDtoEdited.resolvedQuestionUuids + } + +differentProjectMigration :: ProjectMigration +differentProjectMigration = + ProjectMigration + { oldProjectUuid = differentProject.uuid + , newProjectUuid = differentProject.uuid + , resolvedQuestionUuids = [question2.uuid] + , tenantUuid = differentTenant.uuid + } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireReplies.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectReplies.hs similarity index 97% rename from wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireReplies.hs rename to wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectReplies.hs index 7ff5a5e41..c41007b9e 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireReplies.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectReplies.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies where +module Wizard.Database.Migration.Development.Project.Data.ProjectReplies where import qualified Data.Map.Strict as M import Data.Maybe (fromJust) @@ -12,8 +12,8 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Questions import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireUtil +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.ProjectUtil import qualified Wizard.Service.User.UserMapper as UM fReplies :: M.Map String Reply diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectVersions.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectVersions.hs new file mode 100644 index 000000000..6c1468b0f --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/ProjectVersions.hs @@ -0,0 +1,80 @@ +module Wizard.Database.Migration.Development.Project.Data.ProjectVersions where + +import qualified Data.List as L +import Data.Maybe (fromJust) +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Constant.Tenant (defaultTenantUuid) +import Shared.Common.Util.String +import Shared.Common.Util.Uuid +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.User.Data.Users +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList +import Wizard.Model.User.User +import Wizard.Service.Project.Version.ProjectVersionMapper + +qVersions :: U.UUID -> [ProjectVersion] +qVersions projectUuid = [projectVersion1 projectUuid] + +qVersionsList :: U.UUID -> [ProjectVersionList] +qVersionsList projectUuid = [projectVersion1List projectUuid] + +projectVersion1 :: U.UUID -> ProjectVersion +projectVersion1 projectUuid = + ProjectVersion + { uuid = createVersionUuid projectUuid "dd016270ce7e" + , name = "Version 1" + , description = Just "Version 1 description" + , eventUuid = (slble_rQ1 projectUuid).uuid + , projectUuid = projectUuid + , tenantUuid = defaultTenantUuid + , createdBy = Just userAlbert.uuid + , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 + , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 + } + +projectVersion1List :: U.UUID -> ProjectVersionList +projectVersion1List projectUuid = toVersionList (projectVersion1 projectUuid) (Just userAlbertDto) + +projectVersion1Edited :: U.UUID -> ProjectVersion +projectVersion1Edited projectUuid = + (projectVersion1 projectUuid) + { name = "EDITED: " ++ (projectVersion1 projectUuid).name + , description = fmap ("EDITED: " ++) (projectVersion1 projectUuid).description + , eventUuid = (sre_rQ11 projectUuid).uuid + } + +projectVersion1EditedList :: U.UUID -> ProjectVersionList +projectVersion1EditedList projectUuid = toVersionList (projectVersion1Edited projectUuid) (Just userAlbertDto) + +projectVersion1EditedChangeDto :: U.UUID -> ProjectVersionChangeDTO +projectVersion1EditedChangeDto projectUuid = toVersionChangeDTO (projectVersion1Edited projectUuid) + +projectVersion1RevertDto :: U.UUID -> ProjectVersionRevertDTO +projectVersion1RevertDto projectUuid = toVersionRevertDTO (sre_rQ2 projectUuid).uuid + +projectVersion2 :: U.UUID -> ProjectVersion +projectVersion2 projectUuid = + ProjectVersion + { uuid = createVersionUuid projectUuid "515f1d45b24f" + , name = "Version 2" + , description = Just "Version 2 description" + , eventUuid = (sre_rQ11 projectUuid).uuid + , projectUuid = projectUuid + , tenantUuid = defaultTenantUuid + , createdBy = Just userAlbert.uuid + , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 + , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 + } +projectVersion2ChangeDto :: U.UUID -> ProjectVersionChangeDTO +projectVersion2ChangeDto projectUuid = toVersionChangeDTO (projectVersion2 projectUuid) + +createVersionUuid :: U.UUID -> String -> U.UUID +createVersionUuid projectUuid eventSuffix = + let parts = splitOn "-" . U.toString $ projectUuid + in u' . L.intercalate "-" $ [head parts, parts !! 1, parts !! 2, parts !! 3, eventSuffix] diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/Projects.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/Projects.hs new file mode 100644 index 000000000..07aef07d8 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/Data/Projects.hs @@ -0,0 +1,967 @@ +module Wizard.Database.Migration.Development.Project.Data.Projects where + +import qualified Data.Map.Strict as M +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Lens +import Shared.Common.Util.Date +import Shared.Common.Util.Uuid +import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateFormats +import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates +import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Phases +import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel +import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO +import Wizard.Api.Resource.Project.ProjectContentChangeDTO +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Api.Resource.Project.ProjectCreateDTO +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO +import Wizard.Api.Resource.Project.ProjectShareChangeDTO +import Wizard.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.ProjectLabels +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Tenant.Data.Tenants +import Wizard.Database.Migration.Development.User.Data.Users +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Event.ProjectEventLenses () +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.ProjectState +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Tenant.Tenant +import Wizard.Model.User.User +import Wizard.Service.Project.Event.ProjectEventMapper +import Wizard.Service.Project.ProjectMapper +import WizardLib.Public.Database.Migration.Development.User.Data.UserGroups +import WizardLib.Public.Model.User.UserGroup + +_PROJECT_TAG_1 = "projectTag1" + +_PROJECT_TAG_2 = "projectTag2" + +project1Uuid :: U.UUID +project1Uuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" + +project1 :: Project +project1 = + Project + { uuid = project1Uuid + , name = "My Private Project" + , description = Just "Some description" + , visibility = PrivateProjectVisibility + , sharing = RestrictedProjectSharing + , knowledgeModelPackageId = germanyKmPackage.pId + , selectedQuestionTagUuids = [] + , projectTags = [_PROJECT_TAG_1] + , documentTemplateId = Just $ wizardDocumentTemplate.tId + , formatUuid = Just $ formatJson.uuid + , creatorUuid = Just $ userAlbert.uuid + , permissions = [project1AlbertEditProjectPerm] + , isTemplate = True + , squashed = True + , tenantUuid = defaultTenant.uuid + , createdAt = dt' 2018 1 20 + , updatedAt = dt' 2018 1 25 + } + +project1Events :: [ProjectEvent] +project1Events = fEvents project1Uuid + +project1Edited :: Project +project1Edited = + project1 + { name = "EDITED: " ++ project1.name + , visibility = VisibleEditProjectVisibility + , sharing = RestrictedProjectSharing + , projectTags = [_PROJECT_TAG_1, _PROJECT_TAG_2] + , permissions = [] + } + +project1ShareEdited :: Project +project1ShareEdited = + project1 + { visibility = VisibleEditProjectVisibility + , sharing = RestrictedProjectSharing + , permissions = [] + } + +project1SettingsEdited :: Project +project1SettingsEdited = + project1 + { name = "EDITED: " ++ project1.name + , projectTags = [_PROJECT_TAG_1, _PROJECT_TAG_2] + } + +project1EventsEdited :: [ProjectEvent] +project1EventsEdited = fEventsEdited project1Uuid + +project1Versions :: [ProjectVersion] +project1Versions = qVersions project1Uuid + +project1Ctn :: ProjectContent +project1Ctn = + ProjectContent + { phaseUuid = Just $ phase1.uuid + , replies = fReplies + , labels = fLabels + } + +project1CtnRevertedDto :: ProjectContentDTO +project1CtnRevertedDto = + ProjectContentDTO + { phaseUuid = Nothing + , replies = M.fromList [rQ1, rQ2] + , commentThreadsMap = projectCommentThreadsList + , labels = M.empty + , events = [toEventList (sre_rQ1' project1Uuid) (Just userAlbert), toEventList (sre_rQ2' project1Uuid) (Just userAlbert)] + , versions = [] + } + +project1Dto :: ProjectDTO +project1Dto = toSimpleDTO project1 germanyKmPackage DefaultProjectState [project1AlbertEditProjectPermDto] + +project1Create :: ProjectCreateDTO +project1Create = + ProjectCreateDTO + { name = project1.name + , knowledgeModelPackageId = project1.knowledgeModelPackageId + , visibility = project1.visibility + , sharing = project1.sharing + , questionTagUuids = [] + , documentTemplateId = project1.documentTemplateId + , formatUuid = project1.formatUuid + } + +project1EditedShareChange :: ProjectShareChangeDTO +project1EditedShareChange = + ProjectShareChangeDTO + { visibility = project1ShareEdited.visibility + , sharing = project1ShareEdited.sharing + , permissions = fmap toProjectPermChangeDTO project1ShareEdited.permissions + } + +project1SettingsChange :: ProjectSettingsChangeDTO +project1SettingsChange = + ProjectSettingsChangeDTO + { name = project1SettingsEdited.name + , description = project1SettingsEdited.description + , projectTags = project1SettingsEdited.projectTags + , documentTemplateId = Nothing + , formatUuid = Nothing + , isTemplate = project1SettingsEdited.isTemplate + } + +project1AlbertEditProjectPerm :: ProjectPerm +project1AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project1.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project1AlbertEditProjectPermDto :: ProjectPermDTO +project1AlbertEditProjectPermDto = toUserProjectPermDTO project1AlbertEditProjectPerm userAlbert + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project2Uuid :: U.UUID +project2Uuid = u' "d57520b4-5a70-4d40-8623-af2bfbbdfdfe" + +project2 :: Project +project2 = + Project + { uuid = project2Uuid + , name = "My VisibleView Project" + , description = Just "Some description" + , visibility = VisibleViewProjectVisibility + , sharing = RestrictedProjectSharing + , knowledgeModelPackageId = germanyKmPackage.pId + , selectedQuestionTagUuids = [] + , projectTags = [_PROJECT_TAG_1, _PROJECT_TAG_2] + , documentTemplateId = Just $ wizardDocumentTemplate.tId + , formatUuid = Just $ formatJson.uuid + , creatorUuid = Just $ userAlbert.uuid + , permissions = [project2AlbertEditProjectPerm] + , isTemplate = False + , squashed = True + , tenantUuid = defaultTenant.uuid + , createdAt = dt' 2018 1 20 + , updatedAt = dt' 2018 1 22 + } + +project2Edited :: Project +project2Edited = + Project + { uuid = project2.uuid + , name = "EDITED: " ++ project2.name + , description = Just "EDITED: Some description" + , visibility = VisibleEditProjectVisibility + , sharing = RestrictedProjectSharing + , knowledgeModelPackageId = project2.knowledgeModelPackageId + , selectedQuestionTagUuids = project2.selectedQuestionTagUuids + , projectTags = project2.projectTags + , documentTemplateId = Just $ wizardDocumentTemplate.tId + , formatUuid = Just $ formatJson.uuid + , creatorUuid = Just $ userAlbert.uuid + , permissions = [] + , isTemplate = False + , squashed = True + , tenantUuid = defaultTenant.uuid + , createdAt = project2.createdAt + , updatedAt = project2.updatedAt + } + +project2Events :: [ProjectEvent] +project2Events = fEvents project2Uuid + +project2Versions :: [ProjectVersion] +project2Versions = qVersions project2Uuid + +project2ShareEdited :: Project +project2ShareEdited = + project2 + { visibility = VisibleEditProjectVisibility + , sharing = RestrictedProjectSharing + , permissions = [] + } + +project2SettingsEdited :: Project +project2SettingsEdited = + project2 + { name = "EDITED: " ++ project2.name + , description = Just "EDITED: Some description" + , documentTemplateId = Just $ wizardDocumentTemplate.tId + , formatUuid = Just $ formatJson.uuid + , creatorUuid = Just $ userAlbert.uuid + , isTemplate = False + } + +project2Ctn :: ProjectContent +project2Ctn = + ProjectContent + { phaseUuid = Just $ phase1.uuid + , replies = fReplies + , labels = fLabels + } + +project2EventsEdited :: [ProjectEvent] +project2EventsEdited = fEventsEdited project2Uuid + +project2Dto :: ProjectDTO +project2Dto = toSimpleDTO project2 germanyKmPackage DefaultProjectState [project2AlbertEditProjectPermDto] + +project2AlbertEditProjectPerm :: ProjectPerm +project2AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project2.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project2AlbertEditProjectPermDto :: ProjectPermDTO +project2AlbertEditProjectPermDto = toUserProjectPermDTO project2AlbertEditProjectPerm userAlbert + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project3Uuid :: U.UUID +project3Uuid = u' "16530a07-e673-4ff3-ac1f-57250f2c1bfe" + +project3 :: Project +project3 = + Project + { uuid = project3Uuid + , name = "My VisibleEdit Project" + , description = Just "Some description" + , visibility = VisibleEditProjectVisibility + , sharing = RestrictedProjectSharing + , knowledgeModelPackageId = germanyKmPackage.pId + , selectedQuestionTagUuids = [] + , projectTags = [] + , documentTemplateId = Just $ wizardDocumentTemplate.tId + , formatUuid = Just $ formatJson.uuid + , creatorUuid = Nothing + , permissions = [] + , isTemplate = False + , squashed = True + , tenantUuid = defaultTenant.uuid + , createdAt = dt' 2018 1 20 + , updatedAt = dt' 2018 1 28 + } + +project3Events :: [ProjectEvent] +project3Events = fEvents project3Uuid + +project3Versions :: [ProjectVersion] +project3Versions = qVersions project3Uuid + +project3Ctn :: ProjectContent +project3Ctn = + ProjectContent + { phaseUuid = Just $ phase1.uuid + , replies = fReplies + , labels = fLabels + } + +project3EventsEdited :: [ProjectEvent] +project3EventsEdited = fEventsEdited project3Uuid + +project3Dto :: ProjectDTO +project3Dto = toSimpleDTO project3 germanyKmPackage DefaultProjectState [] + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project4Uuid :: U.UUID +project4Uuid = u' "57250a07-a663-4ff3-ac1f-16530f2c1bfe" + +project4 :: Project +project4 = + Project + { uuid = project4Uuid + , name = "Outdated Project" + , description = Just "Some description" + , visibility = PrivateProjectVisibility + , sharing = RestrictedProjectSharing + , knowledgeModelPackageId = netherlandsKmPackage.pId + , selectedQuestionTagUuids = [] + , projectTags = [] + , documentTemplateId = Just $ wizardDocumentTemplate.tId + , formatUuid = Just $ formatJson.uuid + , creatorUuid = Nothing + , permissions = [] + , isTemplate = False + , squashed = True + , tenantUuid = defaultTenant.uuid + , createdAt = dt' 2018 1 20 + , updatedAt = dt' 2018 1 25 + } + +project4Events :: [ProjectEvent] +project4Events = [sphse_2' project4Uuid] + +project4Versions :: [ProjectVersion] +project4Versions = [] + +project4Ctn :: ProjectContent +project4Ctn = + ProjectContent + { phaseUuid = Just $ phase2.uuid + , replies = M.empty + , labels = M.empty + } + +project4VisibleView :: Project +project4VisibleView = project4 {visibility = VisibleViewProjectVisibility} + +project4VisibleViewEvents :: [ProjectEvent] +project4VisibleViewEvents = [sphse_2' project4VisibleView.uuid] + +project4VisibleEdit :: Project +project4VisibleEdit = project4 {visibility = VisibleEditProjectVisibility} + +project4VisibleEditEvents :: [ProjectEvent] +project4VisibleEditEvents = [sphse_2' project4VisibleEdit.uuid] + +project4Upgraded :: Project +project4Upgraded = + project4 + { uuid = u' "5deabef8-f526-421c-90e2-dd7aed1a25c5" + , knowledgeModelPackageId = netherlandsKmPackageV2.pId + } + +project4UpgradedEvents :: [ProjectEvent] +project4UpgradedEvents = [sphse_2' project4Upgraded.uuid] + +project4VisibleViewUpgraded :: Project +project4VisibleViewUpgraded = project4Upgraded {visibility = VisibleViewProjectVisibility} + +project4VisibleViewUpgradedEvents :: [ProjectEvent] +project4VisibleViewUpgradedEvents = [sphse_2' project4VisibleViewUpgraded.uuid] + +project4VisibleEditUpgraded :: Project +project4VisibleEditUpgraded = project4Upgraded {visibility = VisibleEditProjectVisibility} + +project4VisibleEditUpgradedEvents :: [ProjectEvent] +project4VisibleEditUpgradedEvents = [sphse_2' project4VisibleEditUpgraded.uuid] + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project5Uuid :: U.UUID +project5Uuid = u' "506be867-ba92-4e10-8175-187e99613366" + +project5 :: Project +project5 = + project1 + { uuid = project5Uuid + , name = "My Private Project SharedView" + , visibility = PrivateProjectVisibility + , sharing = AnyoneWithLinkViewProjectSharing + , permissions = [project5AlbertEditProjectPerm] + } + +project5Events :: [ProjectEvent] +project5Events = fEvents project5Uuid + +project5EventsEdited :: [ProjectEvent] +project5EventsEdited = fEventsEdited project5Uuid + +project5Versions :: [ProjectVersion] +project5Versions = qVersions project5Uuid + +project5AlbertEditProjectPerm :: ProjectPerm +project5AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project5.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project6Uuid :: U.UUID +project6Uuid = u' "09304abd-2035-4046-8dc8-b3e5ba8c016c" + +project6 :: Project +project6 = + project1 + { uuid = project6Uuid + , name = "My Private Project SharedEdit" + , visibility = PrivateProjectVisibility + , sharing = AnyoneWithLinkEditProjectSharing + , permissions = [project6AlbertEditProjectPerm] + } + +project6Events :: [ProjectEvent] +project6Events = fEvents project6Uuid + +project6Versions :: [ProjectVersion] +project6Versions = qVersions project6Uuid + +project6Ctn :: ProjectContent +project6Ctn = + ProjectContent + { phaseUuid = Just $ phase1.uuid + , replies = fReplies + , labels = fLabels + } + +project6EventsEdited :: [ProjectEvent] +project6EventsEdited = fEventsEdited project6Uuid + +project6Dto :: ProjectDTO +project6Dto = toSimpleDTO project6 germanyKmPackage DefaultProjectState [project6AlbertEditProjectPermDto] + +project6AlbertEditProjectPerm :: ProjectPerm +project6AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project6.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project6AlbertEditProjectPermDto :: ProjectPermDTO +project6AlbertEditProjectPermDto = toUserProjectPermDTO project6AlbertEditProjectPerm userAlbert + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project7Uuid :: U.UUID +project7Uuid = u' "abd22b10-63fd-4cb8-bb23-7997ff32eccc" + +project7 :: Project +project7 = + project2 + { uuid = project7Uuid + , name = "My VisibleView Project SharedView" + , visibility = VisibleViewProjectVisibility + , sharing = AnyoneWithLinkViewProjectSharing + , permissions = [project7AlbertEditProjectPerm] + } + +project7Events :: [ProjectEvent] +project7Events = fEvents project7Uuid + +project7EventsEdited :: [ProjectEvent] +project7EventsEdited = fEventsEdited project8Uuid + +project7Versions :: [ProjectVersion] +project7Versions = qVersions project7Uuid + +project7Ctn :: ProjectContent +project7Ctn = + ProjectContent + { phaseUuid = Just $ phase1.uuid + , replies = fReplies + , labels = fLabels + } + +project7AlbertEditProjectPerm :: ProjectPerm +project7AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project7.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project7AlbertEditProjectPermDto :: ProjectPermDTO +project7AlbertEditProjectPermDto = toUserProjectPermDTO project7AlbertEditProjectPerm userAlbert + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project8Uuid :: U.UUID +project8Uuid = u' "a990f62a-ca1f-4517-82d4-399951b8630b" + +project8 :: Project +project8 = + project2 + { uuid = project8Uuid + , name = "My VisibleView Project SharedEdit" + , visibility = VisibleViewProjectVisibility + , sharing = AnyoneWithLinkEditProjectSharing + , permissions = [project8AlbertEditProjectPerm] + } + +project8Events :: [ProjectEvent] +project8Events = fEvents project8Uuid + +project8EventsEdited :: [ProjectEvent] +project8EventsEdited = fEventsEdited project8Uuid + +project8Versions :: [ProjectVersion] +project8Versions = qVersions project8Uuid + +project8AlbertEditProjectPerm :: ProjectPerm +project8AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project8.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project9Uuid :: U.UUID +project9Uuid = u' "936e852f-4c41-4524-8387-bd87090e9fcc" + +project9 :: Project +project9 = + project2 + { uuid = project9Uuid + , name = "My VisibleEdit Project SharedView" + , visibility = VisibleEditProjectVisibility + , sharing = AnyoneWithLinkViewProjectSharing + , permissions = [project9AlbertEditProjectPerm] + } + +project9Events :: [ProjectEvent] +project9Events = fEvents project9Uuid + +project9EventsEdited :: [ProjectEvent] +project9EventsEdited = fEventsEdited project9Uuid + +project9Versions :: [ProjectVersion] +project9Versions = qVersions project9Uuid + +project9AlbertEditProjectPerm :: ProjectPerm +project9AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project9.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project10Uuid :: U.UUID +project10Uuid = u' "3c8e7ce6-cb5e-4cd1-a4d1-fb9de55f67ed" + +project10 :: Project +project10 = + project3 + { uuid = project10Uuid + , name = "My VisibleEdit Project SharedEdit" + , visibility = VisibleEditProjectVisibility + , sharing = AnyoneWithLinkEditProjectSharing + } + +project10Events :: [ProjectEvent] +project10Events = fEvents project10Uuid + +project10EventsEdited :: [ProjectEvent] +project10EventsEdited = project10Events ++ [setCreatedBy (slble_rQ2' project10Uuid) Nothing] + +project10Versions :: [ProjectVersion] +project10Versions = qVersions project10Uuid + +project10Ctn :: ProjectContent +project10Ctn = + ProjectContent + { phaseUuid = Just $ phase1.uuid + , replies = fReplies + , labels = fLabels + } + +project10EditedShare :: Project +project10EditedShare = project10 {permissions = [project10NikolaEditProjectPerm]} + +project10EditedSettings :: Project +project10EditedSettings = project10 {name = "EDITED: " ++ project10.name} + +project10NikolaEditProjectPerm :: ProjectPerm +project10NikolaEditProjectPerm = + ProjectPerm + { projectUuid = project10.uuid + , memberType = UserProjectPermType + , memberUuid = userNikola.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project10NikolaEditProjectPermDto :: ProjectPermDTO +project10NikolaEditProjectPermDto = toUserProjectPermDTO project10NikolaEditProjectPerm userNikola + +project10EditedSettingsChange :: ProjectSettingsChangeDTO +project10EditedSettingsChange = + ProjectSettingsChangeDTO + { name = "EDITED: " ++ project10.name + , description = project10.description + , projectTags = project10.projectTags + , documentTemplateId = Nothing + , formatUuid = Nothing + , isTemplate = project10.isTemplate + } + +project10EditedWs :: ProjectDetailWsDTO +project10EditedWs = + ProjectDetailWsDTO + { name = project10EditedSettingsChange.name + , description = project10EditedSettingsChange.description + , visibility = project10.visibility + , sharing = project10.sharing + , projectTags = project10EditedSettingsChange.projectTags + , permissions = [] + , documentTemplateId = Nothing + , documentTemplate = Nothing + , formatUuid = Nothing + , format = Nothing + , isTemplate = project10EditedSettingsChange.isTemplate + , labels = M.empty + , unresolvedCommentCounts = M.empty + , resolvedCommentCounts = M.empty + } + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project11Uuid :: U.UUID +project11Uuid = u' "ba6b6c0e-2bb7-40e7-9019-feb943756888" + +project11 :: Project +project11 = + project1 + { uuid = project11Uuid + , name = "My Project from project template" + , permissions = [project11AlbertEditProjectPerm] + } + +project11Events :: [ProjectEvent] +project11Events = fEvents project11Uuid + +project11Versions :: [ProjectVersion] +project11Versions = qVersions project11Uuid + +project11Ctn :: ProjectContent +project11Ctn = project1Ctn + +project11Dto :: ProjectDTO +project11Dto = toSimpleDTO project11 germanyKmPackage DefaultProjectState [project11AlbertEditProjectPermDto] + +project11AlbertEditProjectPerm :: ProjectPerm +project11AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project11.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project11AlbertEditProjectPermDto :: ProjectPermDTO +project11AlbertEditProjectPermDto = toUserProjectPermDTO project11AlbertEditProjectPerm userAlbert + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project12Uuid :: U.UUID +project12Uuid = u' "e02bc040-7446-48a2-b557-678e01d66937" + +project12 :: Project +project12 = + project1 + { uuid = project12Uuid + , name = "My Private Project with 2 users" + , visibility = VisibleEditProjectVisibility + , sharing = AnyoneWithLinkEditProjectSharing + , permissions = [project12NikolaEditProjectPerm, project12AlbertEditProjectPerm] + , updatedAt = dt' 2018 1 23 + } + +project12Events :: [ProjectEvent] +project12Events = fEvents project12Uuid + +project12Versions :: [ProjectVersion] +project12Versions = qVersions project12Uuid + +project12Ctn :: ProjectContent +project12Ctn = project1Ctn + +project12Dto :: ProjectDTO +project12Dto = + toSimpleDTO project12 germanyKmPackage DefaultProjectState [project12NikolaEditProjectPermDto, project12AlbertEditProjectPermDto] + +project12AlbertEditProjectPerm :: ProjectPerm +project12AlbertEditProjectPerm = + ProjectPerm + { projectUuid = project12.uuid + , memberType = UserProjectPermType + , memberUuid = userAlbert.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project12AlbertEditProjectPermDto :: ProjectPermDTO +project12AlbertEditProjectPermDto = toUserProjectPermDTO project12AlbertEditProjectPerm userAlbert + +project12NikolaEditProjectPerm :: ProjectPerm +project12NikolaEditProjectPerm = + ProjectPerm + { projectUuid = project12.uuid + , memberType = UserProjectPermType + , memberUuid = userNikola.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project12NikolaEditProjectPermDto :: ProjectPermDTO +project12NikolaEditProjectPermDto = toUserProjectPermDTO project12NikolaEditProjectPerm userNikola + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project13Uuid :: U.UUID +project13Uuid = u' "59b97a8e-aa48-47f7-93a7-646f9df077df" + +project13 :: Project +project13 = + project1 + { uuid = project13Uuid + , name = "My VisibleCommentProjectVisibility Project" + , visibility = VisibleCommentProjectVisibility + , permissions = [project13NikolaCommentProjectPerm] + } + +project13Events :: [ProjectEvent] +project13Events = fEvents project13Uuid + +project13Versions :: [ProjectVersion] +project13Versions = qVersions project13Uuid + +project13Ctn :: ProjectContent +project13Ctn = project1Ctn + +project13Dto :: ProjectDTO +project13Dto = toSimpleDTO project13 germanyKmPackage DefaultProjectState [project13NikolaCommentProjectPermDto] + +project13NikolaCommentProjectPerm :: ProjectPerm +project13NikolaCommentProjectPerm = + ProjectPerm + { projectUuid = project13.uuid + , memberType = UserProjectPermType + , memberUuid = userNikola.uuid + , perms = commentatorPermissions + , tenantUuid = defaultTenant.uuid + } + +project13NikolaCommentProjectPermDto :: ProjectPermDTO +project13NikolaCommentProjectPermDto = toUserProjectPermDTO project13NikolaCommentProjectPerm userNikola + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project14 :: Project +project14 = + project1 + { uuid = u' "8355fe3c-47b9-4078-b5b6-08aa0188e85f" + , name = "My different KM Project" + , permissions = [project14NikolaEditProjectPerm] + , knowledgeModelPackageId = amsterdamKmPackage.pId + , updatedAt = dt' 2018 1 26 + } + +project14Events :: [ProjectEvent] +project14Events = [] + +project14Ctn :: ProjectContent +project14Ctn = project1Ctn + +project14Dto :: ProjectDTO +project14Dto = toSimpleDTO project14 amsterdamKmPackage DefaultProjectState [project14NikolaEditProjectPermDto] + +project14NikolaEditProjectPerm :: ProjectPerm +project14NikolaEditProjectPerm = + ProjectPerm + { projectUuid = project14.uuid + , memberType = UserProjectPermType + , memberUuid = userNikola.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project14NikolaEditProjectPermDto :: ProjectPermDTO +project14NikolaEditProjectPermDto = toUserProjectPermDTO project14NikolaEditProjectPerm userNikola + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +project15Uuid :: U.UUID +project15Uuid = u' "d09695f4-638b-472b-9951-a31bd7dc91f7" + +project15 :: Project +project15 = + Project + { uuid = project15Uuid + , name = "My Group Project" + , description = Just "Some description" + , visibility = PrivateProjectVisibility + , sharing = RestrictedProjectSharing + , knowledgeModelPackageId = germanyKmPackage.pId + , selectedQuestionTagUuids = [] + , projectTags = [] + , documentTemplateId = Just wizardDocumentTemplate.tId + , formatUuid = Just formatJson.uuid + , creatorUuid = Nothing + , permissions = [project15GroupEditProjectPerm] + , isTemplate = False + , squashed = True + , tenantUuid = defaultTenant.uuid + , createdAt = dt' 2018 1 20 + , updatedAt = dt' 2018 1 29 + } + +project15AnonymousEdit :: Project +project15AnonymousEdit = + project15 + { sharing = AnyoneWithLinkEditProjectSharing + } + +project15AnonymousComment :: Project +project15AnonymousComment = + project15 + { sharing = AnyoneWithLinkCommentProjectSharing + } + +project15NoPerms :: Project +project15NoPerms = + project15 + { permissions = [] + } + +project15Events :: [ProjectEvent] +project15Events = fEvents project15Uuid + +project15Versions :: [ProjectVersion] +project15Versions = qVersions project15Uuid + +project15Dto :: ProjectDTO +project15Dto = toSimpleDTO project15 germanyKmPackage DefaultProjectState [project15GroupEditProjectPermDto] + +project15GroupEditProjectPerm :: ProjectPerm +project15GroupEditProjectPerm = + ProjectPerm + { projectUuid = project15.uuid + , memberType = UserGroupProjectPermType + , memberUuid = bioGroup.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +project15GroupEditProjectPermDto :: ProjectPermDTO +project15GroupEditProjectPermDto = toUserGroupProjectPermDTO project15GroupEditProjectPerm bioGroup + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +differentProject :: Project +differentProject = + Project + { uuid = u' "7bf4a83e-1687-4e99-b1df-9221977d7b4f" + , name = "My Different Project" + , description = Just "Some description" + , visibility = PrivateProjectVisibility + , sharing = RestrictedProjectSharing + , knowledgeModelPackageId = differentPackage.pId + , selectedQuestionTagUuids = [] + , projectTags = [] + , documentTemplateId = Just $ anotherWizardDocumentTemplate.tId + , formatUuid = Just $ formatJson.uuid + , creatorUuid = Just $ userCharles.uuid + , permissions = [differentCharlesOwnerProjectPerm] + , isTemplate = True + , squashed = True + , tenantUuid = differentTenant.uuid + , createdAt = dt' 2018 1 20 + , updatedAt = dt' 2018 1 25 + } + +differentProjectEvents :: [ProjectEvent] +differentProjectEvents = [] + +differentProjectVersions :: [ProjectVersion] +differentProjectVersions = [] + +differentCharlesOwnerProjectPerm :: ProjectPerm +differentCharlesOwnerProjectPerm = + ProjectPerm + { projectUuid = differentProject.uuid + , memberType = UserProjectPermType + , memberUuid = userCharles.uuid + , perms = ownerPermissions + , tenantUuid = differentTenant.uuid + } + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +contentChangeDTO :: ProjectContentChangeDTO +contentChangeDTO = + ProjectContentChangeDTO + { events = fmap toEventChangeDTO (fEvents U.nil) + } + +-- ------------------------------------------------------------------------ +-- ------------------------------------------------------------------------ +bioGroupEditProjectPerm :: ProjectPerm +bioGroupEditProjectPerm = + ProjectPerm + { projectUuid = project1.uuid + , memberType = UserGroupProjectPermType + , memberUuid = bioGroup.uuid + , perms = ownerPermissions + , tenantUuid = defaultTenant.uuid + } + +bioGroupEditProjectPermDto :: ProjectPermDTO +bioGroupEditProjectPermDto = toUserGroupProjectPermDTO bioGroupEditProjectPerm bioGroup diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectActionMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectActionMigration.hs new file mode 100644 index 000000000..41a417e7d --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectActionMigration.hs @@ -0,0 +1,19 @@ +module Wizard.Database.Migration.Development.Project.ProjectActionMigration where + +import Shared.Common.Constant.Component +import Shared.Common.Util.Logger +import Wizard.Database.DAO.Project.ProjectActionDAO +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () + +runMigration :: AppContextM () +runMigration = do + logInfo _CMP_MIGRATION "(ProjectAction/ProjectAction) started" + deleteProjectActions + insertProjectAction projectActionFtp1 + insertProjectAction projectActionFtp2 + insertProjectAction projectActionFtp3 + insertProjectAction projectActionMail1 + insertProjectAction projectActionScp1 + logInfo _CMP_MIGRATION "(ProjectAction/ProjectAction) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/QuestionnaireActionSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectActionSchemaMigration.hs similarity index 69% rename from wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/QuestionnaireActionSchemaMigration.hs rename to wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectActionSchemaMigration.hs index 5d2c504aa..efd83ec5e 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/QuestionnaireActionSchemaMigration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectActionSchemaMigration.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionSchemaMigration where +module Wizard.Database.Migration.Development.Project.ProjectActionSchemaMigration where import Database.PostgreSQL.Simple import GHC.Int @@ -10,16 +10,16 @@ import Wizard.Model.Context.ContextLenses () dropTables :: AppContextM Int64 dropTables = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireAction) drop tables" - let sql = "DROP TABLE IF EXISTS questionnaire_action CASCADE;" + logInfo _CMP_MIGRATION "(Table/ProjectAction) drop tables" + let sql = "DROP TABLE IF EXISTS project_action CASCADE;" let action conn = execute_ conn sql runDB action createTables :: AppContextM Int64 createTables = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireAction) create table" + logInfo _CMP_MIGRATION "(Table/ProjectAction) create table" let sql = - "CREATE TABLE questionnaire_action \ + "CREATE TABLE project_action \ \( \ \ id varchar NOT NULL, \ \ name varchar NOT NULL, \ @@ -37,8 +37,8 @@ createTables = do \ tenant_uuid uuid NOT NULL, \ \ created_at timestamptz NOT NULL, \ \ updated_at timestamptz NOT NULL, \ - \ CONSTRAINT questionnaire_action_pk PRIMARY KEY (id, tenant_uuid), \ - \ CONSTRAINT questionnaire_action_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \ CONSTRAINT project_action_pk PRIMARY KEY (id, tenant_uuid), \ + \ CONSTRAINT project_action_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ \);" let action conn = execute_ conn sql runDB action diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectImporterMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectImporterMigration.hs new file mode 100644 index 000000000..9986a6687 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectImporterMigration.hs @@ -0,0 +1,19 @@ +module Wizard.Database.Migration.Development.Project.ProjectImporterMigration where + +import Shared.Common.Constant.Component +import Shared.Common.Util.Logger +import Wizard.Database.DAO.Project.ProjectImporterDAO +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () + +runMigration :: AppContextM () +runMigration = do + logInfo _CMP_MIGRATION "(ProjectImporter/ProjectImporter) started" + deleteProjectImporters + insertProjectImporter projectImporterBio1 + insertProjectImporter projectImporterBio2 + insertProjectImporter projectImporterBio3 + insertProjectImporter projectImporterExt1 + insertProjectImporter projectImporterOnto1 + logInfo _CMP_MIGRATION "(ProjectImporter/ProjectImporter) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/QuestionnaireImporterSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectImporterSchemaMigration.hs similarity index 68% rename from wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/QuestionnaireImporterSchemaMigration.hs rename to wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectImporterSchemaMigration.hs index 34b11f1b0..865d89619 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/QuestionnaireImporterSchemaMigration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectImporterSchemaMigration.hs @@ -1,4 +1,4 @@ -module Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterSchemaMigration where +module Wizard.Database.Migration.Development.Project.ProjectImporterSchemaMigration where import Database.PostgreSQL.Simple import GHC.Int @@ -10,16 +10,16 @@ import Wizard.Model.Context.ContextLenses () dropTables :: AppContextM Int64 dropTables = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireImporter) drop tables" - let sql = "DROP TABLE IF EXISTS questionnaire_importer CASCADE;" + logInfo _CMP_MIGRATION "(Table/ProjectImporter) drop tables" + let sql = "DROP TABLE IF EXISTS project_importer CASCADE;" let action conn = execute_ conn sql runDB action createTables :: AppContextM Int64 createTables = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireImporter) create table" + logInfo _CMP_MIGRATION "(Table/ProjectImporter) create table" let sql = - "CREATE TABLE questionnaire_importer \ + "CREATE TABLE project_importer \ \( \ \ id varchar NOT NULL, \ \ name varchar NOT NULL, \ @@ -36,8 +36,8 @@ createTables = do \ tenant_uuid uuid NOT NULL, \ \ created_at timestamptz NOT NULL, \ \ updated_at timestamptz NOT NULL, \ - \ CONSTRAINT questionnaire_importer_pk PRIMARY KEY (id, tenant_uuid), \ - \ CONSTRAINT questionnaire_importer_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \ CONSTRAINT project_importer_pk PRIMARY KEY (id, tenant_uuid), \ + \ CONSTRAINT project_importer_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ \);" let action conn = execute_ conn sql runDB action diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigration.hs new file mode 100644 index 000000000..c068767e7 --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigration.hs @@ -0,0 +1,46 @@ +module Wizard.Database.Migration.Development.Project.ProjectMigration where + +import Data.Foldable (traverse_) + +import Shared.Common.Constant.Component +import Shared.Common.Util.Logger +import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO +import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectFileDAO +import Wizard.Database.DAO.Project.ProjectPermDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.S3.Project.ProjectFileS3 + +runMigration = do + logInfo _CMP_MIGRATION "(Project/Project) started" + deleteProjectFiles + purgeBucket + deleteProjectComments + deleteProjectCommentThreads + deleteProjectPerms + deleteProjectEvents + deleteProjects + insertPackage germanyKmPackage + insertProject project1 + insertProjectEvents (fEvents project1Uuid) + traverse_ insertProjectVersion project1Versions + insertProject project2 + insertProjectEvents (fEvents project2Uuid) + traverse_ insertProjectVersion project2Versions + insertProject project3 + insertProjectEvents (fEvents project3Uuid) + traverse_ insertProjectVersion project3Versions + insertProject differentProject + insertProjectCommentThread cmtQ1_t1 + insertProjectComment cmtQ1_t1_1 + insertProjectComment cmtQ1_t1_2 + insertProjectCommentThread cmtQ2_t1 + insertProjectComment cmtQ2_t1_1 + logInfo _CMP_MIGRATION "(Project/Project) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationMigration.hs new file mode 100644 index 000000000..0c3dcee6d --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationMigration.hs @@ -0,0 +1,12 @@ +module Wizard.Database.Migration.Development.Project.ProjectMigrationMigration where + +import Shared.Common.Constant.Component +import Shared.Common.Util.Logger +import Wizard.Database.DAO.Project.ProjectMigrationDAO +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations + +runMigration = do + logInfo _CMP_MIGRATION "(Migration/Project) started" + deleteProjectMigrations + insertProjectMigration differentProjectMigration + logInfo _CMP_MIGRATION "(Migration/Project) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationSchemaMigration.hs new file mode 100644 index 000000000..07cbb522e --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectMigrationSchemaMigration.hs @@ -0,0 +1,34 @@ +module Wizard.Database.Migration.Development.Project.ProjectMigrationSchemaMigration where + +import Database.PostgreSQL.Simple +import GHC.Int + +import Shared.Common.Util.Logger +import Wizard.Database.DAO.Common +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () + +dropTables :: AppContextM Int64 +dropTables = do + logInfo _CMP_MIGRATION "(Table/Migration/Project) drop tables" + let sql = "DROP TABLE IF EXISTS project_migration;" + let action conn = execute_ conn sql + runDB action + +createTables :: AppContextM Int64 +createTables = do + logInfo _CMP_MIGRATION "(Table/Migration/Project) create table" + let sql = + "CREATE TABLE project_migration \ + \( \ + \ old_project_uuid uuid NOT NULL, \ + \ new_project_uuid uuid NOT NULL, \ + \ resolved_question_uuids uuid[] NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ CONSTRAINT project_migration_pk PRIMARY KEY (old_project_uuid, new_project_uuid), \ + \ CONSTRAINT project_migration_old_project_uuid_fk FOREIGN KEY (old_project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_migration_new_project_uuid_fk FOREIGN KEY (new_project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_migration_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectSchemaMigration.hs new file mode 100644 index 000000000..d6f91fa3d --- /dev/null +++ b/wizard-server/src/Wizard/Database/Migration/Development/Project/ProjectSchemaMigration.hs @@ -0,0 +1,273 @@ +module Wizard.Database.Migration.Development.Project.ProjectSchemaMigration where + +import Control.Monad.Except (catchError) +import Database.PostgreSQL.Simple +import GHC.Int + +import Shared.Common.Util.Logger +import Wizard.Database.DAO.Common +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () +import Wizard.S3.Project.ProjectFileS3 + +dropTables :: AppContextM Int64 +dropTables = do + logInfo _CMP_MIGRATION "(Table/Project) drop tables" + let sql = + "DROP TABLE IF EXISTS project_file CASCADE; \ + \DROP TABLE IF EXISTS project_version CASCADE; \ + \DROP TABLE IF EXISTS project_comment CASCADE; \ + \DROP TABLE IF EXISTS project_comment_thread CASCADE; \ + \DROP TABLE IF EXISTS project_perm_group CASCADE; \ + \DROP TABLE IF EXISTS project_perm_user CASCADE; \ + \DROP TABLE IF EXISTS project_event; \ + \DROP TYPE IF EXISTS project_event_type; \ + \DROP TYPE IF EXISTS value_type; \ + \DROP TABLE IF EXISTS project CASCADE; " + let action conn = execute_ conn sql + runDB action + +dropBucket :: AppContextM () +dropBucket = do + catchError purgeBucket (\e -> return ()) + catchError removeBucket (\e -> return ()) + +dropFunctions :: AppContextM Int64 +dropFunctions = do + logInfo _CMP_MIGRATION "(Function/Project) drop functions" + let sql = "DROP FUNCTION IF EXISTS create_persistent_command_from_project_file_delete;" + let action conn = execute_ conn sql + runDB action + +dropTriggers :: AppContextM Int64 +dropTriggers = do + logInfo _CMP_MIGRATION "(Trigger/Project) drop tables" + let sql = "DROP TRIGGER IF EXISTS trigger_on_after_project_file_delete ON project_file;" + let action conn = execute_ conn sql + runDB action + +createTables :: AppContextM () +createTables = do + createProjectTable + createProjectEventTable + createProjectPermUserTable + createProjectPermGroupTable + createProjectCommentThreadTable + createProjectCommentTable + createProjectVersionTable + createProjectFileTable + createPersistentCommandFromProjectFileDeleteFunction + makeBucket + +createProjectTable = do + logInfo _CMP_MIGRATION "(Table/Project) create table" + let sql = + "CREATE TABLE project \ + \( \ + \ uuid uuid NOT NULL, \ + \ name varchar NOT NULL, \ + \ visibility varchar NOT NULL, \ + \ sharing varchar NOT NULL, \ + \ knowledge_model_package_id varchar NOT NULL, \ + \ selected_question_tag_uuids uuid[] NOT NULL, \ + \ document_template_id varchar, \ + \ format_uuid uuid, \ + \ created_by uuid, \ + \ created_at timestamptz NOT NULL, \ + \ updated_at timestamptz NOT NULL, \ + \ description varchar, \ + \ is_template boolean NOT NULL, \ + \ squashed boolean NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ project_tags text[] NOT NULL, \ + \ CONSTRAINT project_pk PRIMARY KEY (uuid), \ + \ CONSTRAINT project_knowledge_model_package_id_fk FOREIGN KEY (knowledge_model_package_id, tenant_uuid) REFERENCES knowledge_model_package (id, tenant_uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_document_template_id_fk FOREIGN KEY (document_template_id, tenant_uuid) REFERENCES document_template (id, tenant_uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ + \ CONSTRAINT project_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action + +createProjectEventTable = do + logInfo _CMP_MIGRATION "(Table/ProjectEvent) create table" + let sql = + "CREATE TYPE project_event_type AS ENUM ('ClearReplyEvent', 'SetReplyEvent', 'SetLabelsEvent', 'SetPhaseEvent'); \ + \CREATE TYPE value_type AS ENUM ('IntegrationReply', 'AnswerReply', 'MultiChoiceReply', 'ItemListReply', 'StringReply', 'ItemSelectReply', 'FileReply'); \ + \CREATE TABLE IF NOT EXISTS project_event \ + \( \ + \ uuid uuid NOT NULL, \ + \ event_type project_event_type NOT NULL, \ + \ path text, \ + \ created_at timestamptz NOT NULL, \ + \ created_by uuid, \ + \ project_uuid uuid NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ value_type value_type, \ + \ value text[], \ + \ value_id text, \ + \ value_raw jsonb, \ + \ CONSTRAINT project_event_pk PRIMARY KEY (uuid), \ + \ CONSTRAINT project_event_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity(uuid) ON DELETE SET NULL, \ + \ CONSTRAINT project_event_project_uuid_fk FOREIGN KEY (project_uuid) REFERENCES project(uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_event_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant(uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action + +createProjectPermUserTable = do + logInfo _CMP_MIGRATION "(Table/ProjectPermUser) create table" + let sql = + "CREATE TABLE project_perm_user \ + \( \ + \ project_uuid uuid NOT NULL, \ + \ user_uuid uuid NOT NULL, \ + \ perms text[] NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ CONSTRAINT project_perm_user_pk PRIMARY KEY (user_uuid, project_uuid), \ + \ CONSTRAINT project_perm_user_project_uuid_fk FOREIGN KEY (project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_perm_user_user_uuid_fk FOREIGN KEY (user_uuid) REFERENCES user_entity (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_perm_user_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action + +createProjectPermGroupTable = do + logInfo _CMP_MIGRATION "(Table/ProjectPermGroup) create table" + let sql = + "CREATE TABLE project_perm_group \ + \( \ + \ project_uuid uuid NOT NULL, \ + \ user_group_uuid uuid NOT NULL, \ + \ perms text[] NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ CONSTRAINT project_perm_group_pk PRIMARY KEY (user_group_uuid, project_uuid), \ + \ CONSTRAINT project_perm_group_project_uuid_fk FOREIGN KEY (project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_perm_group_user_group_uuid_fk FOREIGN KEY (user_group_uuid) REFERENCES user_group (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_perm_group_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action + +createProjectCommentThreadTable = do + logInfo _CMP_MIGRATION "(Table/ProjectCommentThread) create table" + let sql = + "CREATE TABLE project_comment_thread \ + \( \ + \ uuid uuid NOT NULL, \ + \ path text NOT NULL, \ + \ resolved bool NOT NULL, \ + \ private bool NOT NULL, \ + \ project_uuid uuid NOT NULL, \ + \ created_by uuid, \ + \ created_at timestamptz NOT NULL, \ + \ updated_at timestamptz NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ assigned_to uuid, \ + \ assigned_by uuid, \ + \ notification_required bool NOT NULL DEFAULT false, \ + \ CONSTRAINT project_comment_thread_pk PRIMARY KEY (uuid), \ + \ CONSTRAINT project_comment_thread_project_uuid FOREIGN KEY (project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_comment_thread_assigned_to FOREIGN KEY (assigned_to) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ + \ CONSTRAINT project_comment_thread_assigned_by FOREIGN KEY (assigned_by) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ + \ CONSTRAINT project_comment_thread_tenant_uuid FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action + +createProjectCommentTable = do + logInfo _CMP_MIGRATION "(Table/ProjectComment) create table" + let sql = + "CREATE TABLE project_comment \ + \( \ + \ uuid uuid NOT NULL, \ + \ text text NOT NULL, \ + \ comment_thread_uuid uuid, \ + \ created_by uuid, \ + \ created_at timestamptz NOT NULL, \ + \ updated_at timestamptz NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ CONSTRAINT project_comment_pk PRIMARY KEY (uuid), \ + \ CONSTRAINT project_comment_comment_thread_uuid FOREIGN KEY (comment_thread_uuid) REFERENCES project_comment_thread (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_comment_tenant_uuid FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action + +createProjectVersionTable = do + logInfo _CMP_MIGRATION "(Table/ProjectVersion) create table" + let sql = + "CREATE TABLE project_version \ + \( \ + \ uuid uuid NOT NULL, \ + \ name varchar NOT NULL, \ + \ description varchar, \ + \ event_uuid uuid NOT NULL, \ + \ project_uuid uuid NOT NULL, \ + \ tenant_uuid uuid NOT NULL, \ + \ created_by uuid, \ + \ created_at timestamptz NOT NULL, \ + \ updated_at timestamptz NOT NULL, \ + \ CONSTRAINT project_version_pk PRIMARY KEY (uuid), \ + \ CONSTRAINT project_version_event_uuid_fk FOREIGN KEY (event_uuid) REFERENCES project_event (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_version_project_uuid_fk FOREIGN KEY (project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_version_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_version_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity (uuid) ON DELETE SET NULL \ + \);" + let action conn = execute_ conn sql + runDB action + +createProjectFileTable = do + logInfo _CMP_MIGRATION "(Table/ProjectFile) create table" + let sql = + "CREATE TABLE project_file \ + \( \ + \ uuid uuid NOT NULL, \ + \ file_name varchar NOT NULL, \ + \ content_type varchar NOT NULL, \ + \ file_size bigint NOT NULL, \ + \ project_uuid uuid NOT NULL, \ + \ created_by uuid, \ + \ tenant_uuid uuid NOT NULL, \ + \ created_at timestamptz NOT NULL, \ + \ CONSTRAINT project_file_pk PRIMARY KEY (uuid), \ + \ CONSTRAINT project_file_project_uuid_fk FOREIGN KEY (project_uuid) REFERENCES project (uuid) ON DELETE CASCADE, \ + \ CONSTRAINT project_file_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ + \ CONSTRAINT project_file_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \);" + let action conn = execute_ conn sql + runDB action + +createFunctions :: AppContextM Int64 +createFunctions = do + logInfo _CMP_MIGRATION "(Function/Project) create functions" + createPersistentCommandFromProjectFileDeleteFunction + +createPersistentCommandFromProjectFileDeleteFunction = do + let sql = + "CREATE OR REPLACE FUNCTION create_persistent_command_from_project_file_delete() \ + \ RETURNS TRIGGER AS \ + \$$ \ + \BEGIN \ + \ PERFORM create_persistent_command( \ + \ 'project_file', \ + \ 'deleteFromS3', \ + \ jsonb_build_object('projectUuid', OLD.project_uuid, 'fileUuid', OLD.uuid), \ + \ OLD.tenant_uuid); \ + \ RETURN OLD; \ + \END; \ + \$$ LANGUAGE plpgsql;" + let action conn = execute_ conn sql + runDB action + +createTriggers :: AppContextM Int64 +createTriggers = do + logInfo _CMP_MIGRATION "(Trigger/Project) create triggers" + let sql = + "CREATE OR REPLACE TRIGGER trigger_on_after_project_file_delete \ + \ AFTER DELETE \ + \ ON project_file \ + \ FOR EACH ROW \ + \EXECUTE FUNCTION create_persistent_command_from_project_file_delete();" + let action conn = execute_ conn sql + runDB action diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/MigratorStates.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/MigratorStates.hs deleted file mode 100644 index 7f01dfd40..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/MigratorStates.hs +++ /dev/null @@ -1,135 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates where - -import qualified Data.Map.Strict as M - -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Questions -import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.Tenant.Data.Tenants -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Tenant.Tenant -import Wizard.Service.Questionnaire.QuestionnaireMapper - -nlQtnMigrationState :: MigratorState -nlQtnMigrationState = - MigratorState - { oldQuestionnaireUuid = nlQtnMigrationStateDto.oldQuestionnaire.uuid - , newQuestionnaireUuid = nlQtnMigrationStateDto.newQuestionnaire.uuid - , resolvedQuestionUuids = [question2.uuid] - , tenantUuid = defaultTenant.uuid - } - -nlQtnMigrationStateDto :: MigratorStateDTO -nlQtnMigrationStateDto = - MigratorStateDTO - { oldQuestionnaire = - toDetailQuestionnaireDTO - (toDetailQuestionnaire questionnaire4 (Just questionnaire4Upgraded.uuid) [] 0 0) - M.empty - M.empty - km1Netherlands - questionnaire4Ctn.phaseUuid - questionnaire4Ctn.replies - questionnaire4Ctn.labels - , newQuestionnaire = - toDetailQuestionnaireDTO - (toDetailQuestionnaire questionnaire4Upgraded Nothing [] 0 0) - M.empty - M.empty - km1NetherlandsV2 - questionnaire4Ctn.phaseUuid - questionnaire4Ctn.replies - questionnaire4Ctn.labels - , resolvedQuestionUuids = [question2.uuid] - , tenantUuid = defaultTenant.uuid - } - -nlQtnMigrationStateVisibleViewDto :: MigratorStateDTO -nlQtnMigrationStateVisibleViewDto = - MigratorStateDTO - { oldQuestionnaire = - toDetailQuestionnaireDTO - (toDetailQuestionnaire questionnaire4VisibleView (Just questionnaire4Upgraded.uuid) [] 0 0) - M.empty - M.empty - km1Netherlands - questionnaire4Ctn.phaseUuid - questionnaire4Ctn.replies - questionnaire4Ctn.labels - , newQuestionnaire = - toDetailQuestionnaireDTO - (toDetailQuestionnaire questionnaire4VisibleViewUpgraded Nothing [] 0 0) - M.empty - M.empty - km1NetherlandsV2 - questionnaire4Ctn.phaseUuid - questionnaire4Ctn.replies - questionnaire4Ctn.labels - , resolvedQuestionUuids = nlQtnMigrationStateDto.resolvedQuestionUuids - , tenantUuid = defaultTenant.uuid - } - -nlQtnMigrationStateVisibleEditDto :: MigratorStateDTO -nlQtnMigrationStateVisibleEditDto = - MigratorStateDTO - { oldQuestionnaire = - toDetailQuestionnaireDTO - (toDetailQuestionnaire questionnaire4VisibleEdit (Just questionnaire4Upgraded.uuid) [] 0 0) - M.empty - M.empty - km1Netherlands - questionnaire4Ctn.phaseUuid - questionnaire4Ctn.replies - questionnaire4Ctn.labels - , newQuestionnaire = - toDetailQuestionnaireDTO - (toDetailQuestionnaire questionnaire4VisibleEditUpgraded Nothing [] 0 0) - M.empty - M.empty - km1NetherlandsV2 - questionnaire4Ctn.phaseUuid - questionnaire4Ctn.replies - questionnaire4Ctn.labels - , resolvedQuestionUuids = nlQtnMigrationStateDto.resolvedQuestionUuids - , tenantUuid = defaultTenant.uuid - } - -nlQtnMigrationStateDtoEdited :: MigratorStateDTO -nlQtnMigrationStateDtoEdited = - MigratorStateDTO - { oldQuestionnaire = nlQtnMigrationStateDto.oldQuestionnaire - , newQuestionnaire = nlQtnMigrationStateDto.newQuestionnaire - , resolvedQuestionUuids = [question2.uuid, question3.uuid] - , tenantUuid = nlQtnMigrationStateDto.tenantUuid - } - -migratorStateCreate :: MigratorStateCreateDTO -migratorStateCreate = - MigratorStateCreateDTO - { targetKnowledgeModelPackageId = netherlandsKmPackageV2.pId - , targetTagUuids = questionnaire4Upgraded.selectedQuestionTagUuids - } - -migratorStateChange :: MigratorStateChangeDTO -migratorStateChange = - MigratorStateChangeDTO - { resolvedQuestionUuids = nlQtnMigrationStateDtoEdited.resolvedQuestionUuids - } - -differentQtnMigrationState :: MigratorState -differentQtnMigrationState = - MigratorState - { oldQuestionnaireUuid = differentQuestionnaire.uuid - , newQuestionnaireUuid = differentQuestionnaire.uuid - , resolvedQuestionUuids = [question2.uuid] - , tenantUuid = differentTenant.uuid - } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireActions.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireActions.hs deleted file mode 100644 index 13fc2660f..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireActions.hs +++ /dev/null @@ -1,16 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireActions where - -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper - -ensureOnlineUserAction :: ClientQuestionnaireActionDTO -ensureOnlineUserAction = - SetContent_ClientQuestionnaireActionDTO . SetReplyEventChangeDTO' $ - toSetReplyEventChangeDTO (sre_rQ1 questionnaire1Uuid) - -setUserListAction :: ServerQuestionnaireActionDTO -setUserListAction = SetUserList_ServerQuestionnaireActionDTO [userAlbertOnlineInfo] diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireFiles.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireFiles.hs deleted file mode 100644 index fc76c0200..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireFiles.hs +++ /dev/null @@ -1,33 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireFiles where - -import Shared.Common.Util.Date -import Shared.Common.Util.Uuid -import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import Wizard.Model.Questionnaire.QuestionnaireSimple - -questionnaireFileList :: QuestionnaireFileList -questionnaireFileList = - QuestionnaireFileList - { uuid = u' "e3726571-f81e-4e34-a17a-2f5714b7aade" - , fileName = "my_file.txt" - , contentType = "application/json" - , fileSize = 123456 - , questionnaire = - QuestionnaireSimple - { uuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" - , name = "My Private Questionnaire" - } - , createdBy = Just userAlbertSuggestion - , createdAt = dt' 2018 01 21 - } - -questionnaireFileSimple :: QuestionnaireFileSimple -questionnaireFileSimple = - QuestionnaireFileSimple - { uuid = questionnaireFileList.uuid - , fileName = questionnaireFileList.fileName - , contentType = questionnaireFileList.contentType - , fileSize = questionnaireFileList.fileSize - } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireVersions.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireVersions.hs deleted file mode 100644 index fab0886fc..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/QuestionnaireVersions.hs +++ /dev/null @@ -1,80 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions where - -import qualified Data.List as L -import Data.Maybe (fromJust) -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Constant.Tenant (defaultTenantUuid) -import Shared.Common.Util.String -import Shared.Common.Util.Uuid -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import Wizard.Model.User.User -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionMapper - -qVersions :: U.UUID -> [QuestionnaireVersion] -qVersions qtnUuid = [questionnaireVersion1 qtnUuid] - -qVersionsList :: U.UUID -> [QuestionnaireVersionList] -qVersionsList qtnUuid = [questionnaireVersion1List qtnUuid] - -questionnaireVersion1 :: U.UUID -> QuestionnaireVersion -questionnaireVersion1 qtnUuid = - QuestionnaireVersion - { uuid = createVersionUuid qtnUuid "dd016270ce7e" - , name = "Version 1" - , description = Just "Version 1 description" - , eventUuid = (slble_rQ1 qtnUuid).uuid - , questionnaireUuid = qtnUuid - , tenantUuid = defaultTenantUuid - , createdBy = Just userAlbert.uuid - , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 - , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 - } - -questionnaireVersion1List :: U.UUID -> QuestionnaireVersionList -questionnaireVersion1List qtnUuid = toVersionList (questionnaireVersion1 qtnUuid) (Just userAlbertDto) - -questionnaireVersion1Edited :: U.UUID -> QuestionnaireVersion -questionnaireVersion1Edited qtnUuid = - (questionnaireVersion1 qtnUuid) - { name = "EDITED: " ++ (questionnaireVersion1 qtnUuid).name - , description = fmap ("EDITED: " ++) (questionnaireVersion1 qtnUuid).description - , eventUuid = (sre_rQ11 qtnUuid).uuid - } - -questionnaireVersion1EditedList :: U.UUID -> QuestionnaireVersionList -questionnaireVersion1EditedList qtnUuid = toVersionList (questionnaireVersion1Edited qtnUuid) (Just userAlbertDto) - -questionnaireVersion1EditedChangeDto :: U.UUID -> QuestionnaireVersionChangeDTO -questionnaireVersion1EditedChangeDto qtnUuid = toVersionChangeDTO (questionnaireVersion1Edited qtnUuid) - -questionnaireVersion1RevertDto :: U.UUID -> QuestionnaireVersionRevertDTO -questionnaireVersion1RevertDto qtnUuid = toVersionRevertDTO (sre_rQ2 qtnUuid).uuid - -questionnaireVersion2 :: U.UUID -> QuestionnaireVersion -questionnaireVersion2 qtnUuid = - QuestionnaireVersion - { uuid = createVersionUuid qtnUuid "515f1d45b24f" - , name = "Version 2" - , description = Just "Version 2 description" - , eventUuid = (sre_rQ11 qtnUuid).uuid - , questionnaireUuid = qtnUuid - , tenantUuid = defaultTenantUuid - , createdBy = Just userAlbert.uuid - , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 - , updatedAt = UTCTime (fromJust $ fromGregorianValid 2018 1 21) 0 - } -questionnaireVersion2ChangeDto :: U.UUID -> QuestionnaireVersionChangeDTO -questionnaireVersion2ChangeDto qtnUuid = toVersionChangeDTO (questionnaireVersion2 qtnUuid) - -createVersionUuid :: U.UUID -> String -> U.UUID -createVersionUuid questionnaireUuid eventSuffix = - let parts = splitOn "-" . U.toString $ questionnaireUuid - in u' . L.intercalate "-" $ [head parts, parts !! 1, parts !! 2, parts !! 3, eventSuffix] diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/Questionnaires.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/Questionnaires.hs deleted file mode 100644 index 435406476..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/Data/Questionnaires.hs +++ /dev/null @@ -1,977 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires where - -import qualified Data.Map.Strict as M -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Lens -import Shared.Common.Util.Date -import Shared.Common.Util.Uuid -import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateFormats -import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates -import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Phases -import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO -import Wizard.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireLabels -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Tenant.Data.Tenants -import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireEventLenses () -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireState -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Tenant.Tenant -import Wizard.Model.User.User -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper -import Wizard.Service.Questionnaire.QuestionnaireMapper -import WizardLib.Public.Database.Migration.Development.User.Data.UserGroups -import WizardLib.Public.Model.User.UserGroup - -_QUESTIONNAIRE_PROJECT_TAG_1 = "projectTag1" - -_QUESTIONNAIRE_PROJECT_TAG_2 = "projectTag2" - -questionnaire1Uuid :: U.UUID -questionnaire1Uuid = u' "af984a75-56e3-49f8-b16f-d6b99599910a" - -questionnaire1 :: Questionnaire -questionnaire1 = - Questionnaire - { uuid = questionnaire1Uuid - , name = "My Private Questionnaire" - , description = Just "Some description" - , visibility = PrivateQuestionnaire - , sharing = RestrictedQuestionnaire - , knowledgeModelPackageId = germanyKmPackage.pId - , selectedQuestionTagUuids = [] - , projectTags = [_QUESTIONNAIRE_PROJECT_TAG_1] - , documentTemplateId = Just $ wizardDocumentTemplate.tId - , formatUuid = Just $ formatJson.uuid - , creatorUuid = Just $ userAlbert.uuid - , permissions = [qtn1AlbertEditQtnPerm] - , isTemplate = True - , squashed = True - , tenantUuid = defaultTenant.uuid - , createdAt = dt' 2018 1 20 - , updatedAt = dt' 2018 1 25 - } - -questionnaire1Events :: [QuestionnaireEvent] -questionnaire1Events = fEvents questionnaire1Uuid - -questionnaire1Edited :: Questionnaire -questionnaire1Edited = - questionnaire1 - { name = "EDITED: " ++ questionnaire1.name - , visibility = VisibleEditQuestionnaire - , sharing = RestrictedQuestionnaire - , projectTags = [_QUESTIONNAIRE_PROJECT_TAG_1, _QUESTIONNAIRE_PROJECT_TAG_2] - , permissions = [] - } - -questionnaire1ShareEdited :: Questionnaire -questionnaire1ShareEdited = - questionnaire1 - { visibility = VisibleEditQuestionnaire - , sharing = RestrictedQuestionnaire - , permissions = [] - } - -questionnaire1SettingsEdited :: Questionnaire -questionnaire1SettingsEdited = - questionnaire1 - { name = "EDITED: " ++ questionnaire1.name - , projectTags = [_QUESTIONNAIRE_PROJECT_TAG_1, _QUESTIONNAIRE_PROJECT_TAG_2] - } - -questionnaire1EventsEdited :: [QuestionnaireEvent] -questionnaire1EventsEdited = fEventsEdited questionnaire1Uuid - -questionnaire1Versions :: [QuestionnaireVersion] -questionnaire1Versions = qVersions questionnaire1Uuid - -questionnaire1Ctn :: QuestionnaireContent -questionnaire1Ctn = - QuestionnaireContent - { phaseUuid = Just $ phase1.uuid - , replies = fReplies - , labels = fLabels - } - -questionnaire1CtnRevertedDto :: QuestionnaireContentDTO -questionnaire1CtnRevertedDto = - QuestionnaireContentDTO - { phaseUuid = Nothing - , replies = M.fromList [rQ1, rQ2] - , commentThreadsMap = qtnThreadsDto - , labels = M.empty - , events = [toEventList (sre_rQ1' questionnaire1Uuid) (Just userAlbert), toEventList (sre_rQ2' questionnaire1Uuid) (Just userAlbert)] - , versions = [] - } - -questionnaire1Dto :: QuestionnaireDTO -questionnaire1Dto = toSimpleDTO questionnaire1 germanyKmPackage QSDefault [qtn1AlbertEditQtnPermDto] - -questionnaire1Create :: QuestionnaireCreateDTO -questionnaire1Create = - QuestionnaireCreateDTO - { name = questionnaire1.name - , knowledgeModelPackageId = questionnaire1.knowledgeModelPackageId - , visibility = questionnaire1.visibility - , sharing = questionnaire1.sharing - , questionTagUuids = [] - , documentTemplateId = questionnaire1.documentTemplateId - , formatUuid = questionnaire1.formatUuid - } - -questionnaire1EditedShareChange :: QuestionnaireShareChangeDTO -questionnaire1EditedShareChange = - QuestionnaireShareChangeDTO - { visibility = questionnaire1ShareEdited.visibility - , sharing = questionnaire1ShareEdited.sharing - , permissions = fmap toQuestionnairePermChangeDTO questionnaire1ShareEdited.permissions - } - -questionnaire1SettingsChange :: QuestionnaireSettingsChangeDTO -questionnaire1SettingsChange = - QuestionnaireSettingsChangeDTO - { name = questionnaire1SettingsEdited.name - , description = questionnaire1SettingsEdited.description - , projectTags = questionnaire1SettingsEdited.projectTags - , documentTemplateId = Nothing - , formatUuid = Nothing - , isTemplate = questionnaire1SettingsEdited.isTemplate - } - -qtn1AlbertEditQtnPerm :: QuestionnairePerm -qtn1AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire1.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn1AlbertEditQtnPermDto :: QuestionnairePermDTO -qtn1AlbertEditQtnPermDto = toUserQuestionnairePermDTO qtn1AlbertEditQtnPerm userAlbert - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire2Uuid :: U.UUID -questionnaire2Uuid = u' "d57520b4-5a70-4d40-8623-af2bfbbdfdfe" - -questionnaire2 :: Questionnaire -questionnaire2 = - Questionnaire - { uuid = questionnaire2Uuid - , name = "My VisibleView Questionnaire" - , description = Just "Some description" - , visibility = VisibleViewQuestionnaire - , sharing = RestrictedQuestionnaire - , knowledgeModelPackageId = germanyKmPackage.pId - , selectedQuestionTagUuids = [] - , projectTags = [_QUESTIONNAIRE_PROJECT_TAG_1, _QUESTIONNAIRE_PROJECT_TAG_2] - , documentTemplateId = Just $ wizardDocumentTemplate.tId - , formatUuid = Just $ formatJson.uuid - , creatorUuid = Just $ userAlbert.uuid - , permissions = [qtn2AlbertEditQtnPerm] - , isTemplate = False - , squashed = True - , tenantUuid = defaultTenant.uuid - , createdAt = dt' 2018 1 20 - , updatedAt = dt' 2018 1 22 - } - -questionnaire2Edited :: Questionnaire -questionnaire2Edited = - Questionnaire - { uuid = questionnaire2.uuid - , name = "EDITED: " ++ questionnaire2.name - , description = Just "EDITED: Some description" - , visibility = VisibleEditQuestionnaire - , sharing = RestrictedQuestionnaire - , knowledgeModelPackageId = questionnaire2.knowledgeModelPackageId - , selectedQuestionTagUuids = questionnaire2.selectedQuestionTagUuids - , projectTags = questionnaire2.projectTags - , documentTemplateId = Just $ wizardDocumentTemplate.tId - , formatUuid = Just $ formatJson.uuid - , creatorUuid = Just $ userAlbert.uuid - , permissions = [] - , isTemplate = False - , squashed = True - , tenantUuid = defaultTenant.uuid - , createdAt = questionnaire2.createdAt - , updatedAt = questionnaire2.updatedAt - } - -questionnaire2Events :: [QuestionnaireEvent] -questionnaire2Events = fEvents questionnaire2Uuid - -questionnaire2Versions :: [QuestionnaireVersion] -questionnaire2Versions = qVersions questionnaire2Uuid - -questionnaire2ShareEdited :: Questionnaire -questionnaire2ShareEdited = - questionnaire2 - { visibility = VisibleEditQuestionnaire - , sharing = RestrictedQuestionnaire - , permissions = [] - } - -questionnaire2SettingsEdited :: Questionnaire -questionnaire2SettingsEdited = - questionnaire2 - { name = "EDITED: " ++ questionnaire2.name - , description = Just "EDITED: Some description" - , documentTemplateId = Just $ wizardDocumentTemplate.tId - , formatUuid = Just $ formatJson.uuid - , creatorUuid = Just $ userAlbert.uuid - , isTemplate = False - } - -questionnaire2Ctn :: QuestionnaireContent -questionnaire2Ctn = - QuestionnaireContent - { phaseUuid = Just $ phase1.uuid - , replies = fReplies - , labels = fLabels - } - -questionnaire2EventsEdited :: [QuestionnaireEvent] -questionnaire2EventsEdited = fEventsEdited questionnaire2Uuid - -questionnaire2Dto :: QuestionnaireDTO -questionnaire2Dto = toSimpleDTO questionnaire2 germanyKmPackage QSDefault [qtn2AlbertEditQtnPermDto] - -qtn2AlbertEditQtnPerm :: QuestionnairePerm -qtn2AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire2.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn2AlbertEditQtnPermDto :: QuestionnairePermDTO -qtn2AlbertEditQtnPermDto = toUserQuestionnairePermDTO qtn2AlbertEditQtnPerm userAlbert - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire3Uuid :: U.UUID -questionnaire3Uuid = u' "16530a07-e673-4ff3-ac1f-57250f2c1bfe" - -questionnaire3 :: Questionnaire -questionnaire3 = - Questionnaire - { uuid = questionnaire3Uuid - , name = "My VisibleEdit Questionnaire" - , description = Just "Some description" - , visibility = VisibleEditQuestionnaire - , sharing = RestrictedQuestionnaire - , knowledgeModelPackageId = germanyKmPackage.pId - , selectedQuestionTagUuids = [] - , projectTags = [] - , documentTemplateId = Just $ wizardDocumentTemplate.tId - , formatUuid = Just $ formatJson.uuid - , creatorUuid = Nothing - , permissions = [] - , isTemplate = False - , squashed = True - , tenantUuid = defaultTenant.uuid - , createdAt = dt' 2018 1 20 - , updatedAt = dt' 2018 1 28 - } - -questionnaire3Events :: [QuestionnaireEvent] -questionnaire3Events = fEvents questionnaire3Uuid - -questionnaire3Versions :: [QuestionnaireVersion] -questionnaire3Versions = qVersions questionnaire3Uuid - -questionnaire3Ctn :: QuestionnaireContent -questionnaire3Ctn = - QuestionnaireContent - { phaseUuid = Just $ phase1.uuid - , replies = fReplies - , labels = fLabels - } - -questionnaire3EventsEdited :: [QuestionnaireEvent] -questionnaire3EventsEdited = fEventsEdited questionnaire3Uuid - -questionnaire3Dto :: QuestionnaireDTO -questionnaire3Dto = toSimpleDTO questionnaire3 germanyKmPackage QSDefault [] - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire4Uuid :: U.UUID -questionnaire4Uuid = u' "57250a07-a663-4ff3-ac1f-16530f2c1bfe" - -questionnaire4 :: Questionnaire -questionnaire4 = - Questionnaire - { uuid = questionnaire4Uuid - , name = "Outdated Questionnaire" - , description = Just "Some description" - , visibility = PrivateQuestionnaire - , sharing = RestrictedQuestionnaire - , knowledgeModelPackageId = netherlandsKmPackage.pId - , selectedQuestionTagUuids = [] - , projectTags = [] - , documentTemplateId = Just $ wizardDocumentTemplate.tId - , formatUuid = Just $ formatJson.uuid - , creatorUuid = Nothing - , permissions = [] - , isTemplate = False - , squashed = True - , tenantUuid = defaultTenant.uuid - , createdAt = dt' 2018 1 20 - , updatedAt = dt' 2018 1 25 - } - -questionnaire4Events :: [QuestionnaireEvent] -questionnaire4Events = [sphse_2' questionnaire4Uuid] - -questionnaire4Versions :: [QuestionnaireVersion] -questionnaire4Versions = [] - -questionnaire4Ctn :: QuestionnaireContent -questionnaire4Ctn = - QuestionnaireContent - { phaseUuid = Just $ phase2.uuid - , replies = M.empty - , labels = M.empty - } - -questionnaire4VisibleView :: Questionnaire -questionnaire4VisibleView = questionnaire4 {visibility = VisibleViewQuestionnaire} - -questionnaire4VisibleViewEvents :: [QuestionnaireEvent] -questionnaire4VisibleViewEvents = [sphse_2' questionnaire4VisibleView.uuid] - -questionnaire4VisibleEdit :: Questionnaire -questionnaire4VisibleEdit = questionnaire4 {visibility = VisibleEditQuestionnaire} - -questionnaire4VisibleEditEvents :: [QuestionnaireEvent] -questionnaire4VisibleEditEvents = [sphse_2' questionnaire4VisibleEdit.uuid] - -questionnaire4Upgraded :: Questionnaire -questionnaire4Upgraded = - questionnaire4 - { uuid = u' "5deabef8-f526-421c-90e2-dd7aed1a25c5" - , knowledgeModelPackageId = netherlandsKmPackageV2.pId - } - -questionnaire4UpgradedEvents :: [QuestionnaireEvent] -questionnaire4UpgradedEvents = [sphse_2' questionnaire4Upgraded.uuid] - -questionnaire4VisibleViewUpgraded :: Questionnaire -questionnaire4VisibleViewUpgraded = questionnaire4Upgraded {visibility = VisibleViewQuestionnaire} - -questionnaire4VisibleViewUpgradedEvents :: [QuestionnaireEvent] -questionnaire4VisibleViewUpgradedEvents = [sphse_2' questionnaire4VisibleViewUpgraded.uuid] - -questionnaire4VisibleEditUpgraded :: Questionnaire -questionnaire4VisibleEditUpgraded = questionnaire4Upgraded {visibility = VisibleEditQuestionnaire} - -questionnaire4VisibleEditUpgradedEvents :: [QuestionnaireEvent] -questionnaire4VisibleEditUpgradedEvents = [sphse_2' questionnaire4VisibleEditUpgraded.uuid] - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire5Uuid :: U.UUID -questionnaire5Uuid = u' "506be867-ba92-4e10-8175-187e99613366" - -questionnaire5 :: Questionnaire -questionnaire5 = - questionnaire1 - { uuid = questionnaire5Uuid - , name = "My Private Questionnaire SharedView" - , visibility = PrivateQuestionnaire - , sharing = AnyoneWithLinkViewQuestionnaire - , permissions = [qtn5AlbertEditQtnPerm] - } - -questionnaire5Events :: [QuestionnaireEvent] -questionnaire5Events = fEvents questionnaire5Uuid - -questionnaire5EventsEdited :: [QuestionnaireEvent] -questionnaire5EventsEdited = fEventsEdited questionnaire5Uuid - -questionnaire5Versions :: [QuestionnaireVersion] -questionnaire5Versions = qVersions questionnaire5Uuid - -qtn5AlbertEditQtnPerm :: QuestionnairePerm -qtn5AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire5.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire6Uuid :: U.UUID -questionnaire6Uuid = u' "09304abd-2035-4046-8dc8-b3e5ba8c016c" - -questionnaire6 :: Questionnaire -questionnaire6 = - questionnaire1 - { uuid = questionnaire6Uuid - , name = "My Private Questionnaire SharedEdit" - , visibility = PrivateQuestionnaire - , sharing = AnyoneWithLinkEditQuestionnaire - , permissions = [qtn6AlbertEditQtnPerm] - } - -questionnaire6Events :: [QuestionnaireEvent] -questionnaire6Events = fEvents questionnaire6Uuid - -questionnaire6Versions :: [QuestionnaireVersion] -questionnaire6Versions = qVersions questionnaire6Uuid - -questionnaire6Ctn :: QuestionnaireContent -questionnaire6Ctn = - QuestionnaireContent - { phaseUuid = Just $ phase1.uuid - , replies = fReplies - , labels = fLabels - } - -questionnaire6EventsEdited :: [QuestionnaireEvent] -questionnaire6EventsEdited = fEventsEdited questionnaire6Uuid - -questionnaire6Dto :: QuestionnaireDTO -questionnaire6Dto = toSimpleDTO questionnaire6 germanyKmPackage QSDefault [qtn6AlbertEditQtnPermDto] - -qtn6AlbertEditQtnPerm :: QuestionnairePerm -qtn6AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire6.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn6AlbertEditQtnPermDto :: QuestionnairePermDTO -qtn6AlbertEditQtnPermDto = toUserQuestionnairePermDTO qtn6AlbertEditQtnPerm userAlbert - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire7Uuid :: U.UUID -questionnaire7Uuid = u' "abd22b10-63fd-4cb8-bb23-7997ff32eccc" - -questionnaire7 :: Questionnaire -questionnaire7 = - questionnaire2 - { uuid = questionnaire7Uuid - , name = "My VisibleView Questionnaire SharedView" - , visibility = VisibleViewQuestionnaire - , sharing = AnyoneWithLinkViewQuestionnaire - , permissions = [qtn7AlbertEditQtnPerm] - } - -questionnaire7Events :: [QuestionnaireEvent] -questionnaire7Events = fEvents questionnaire7Uuid - -questionnaire7EventsEdited :: [QuestionnaireEvent] -questionnaire7EventsEdited = fEventsEdited questionnaire8Uuid - -questionnaire7Versions :: [QuestionnaireVersion] -questionnaire7Versions = qVersions questionnaire7Uuid - -questionnaire7Ctn :: QuestionnaireContent -questionnaire7Ctn = - QuestionnaireContent - { phaseUuid = Just $ phase1.uuid - , replies = fReplies - , labels = fLabels - } - -qtn7AlbertEditQtnPerm :: QuestionnairePerm -qtn7AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire7.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn7AlbertEditQtnPermDto :: QuestionnairePermDTO -qtn7AlbertEditQtnPermDto = toUserQuestionnairePermDTO qtn7AlbertEditQtnPerm userAlbert - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire8Uuid :: U.UUID -questionnaire8Uuid = u' "a990f62a-ca1f-4517-82d4-399951b8630b" - -questionnaire8 :: Questionnaire -questionnaire8 = - questionnaire2 - { uuid = questionnaire8Uuid - , name = "My VisibleView Questionnaire SharedEdit" - , visibility = VisibleViewQuestionnaire - , sharing = AnyoneWithLinkEditQuestionnaire - , permissions = [qtn8AlbertEditQtnPerm] - } - -questionnaire8Events :: [QuestionnaireEvent] -questionnaire8Events = fEvents questionnaire8Uuid - -questionnaire8EventsEdited :: [QuestionnaireEvent] -questionnaire8EventsEdited = fEventsEdited questionnaire8Uuid - -questionnaire8Versions :: [QuestionnaireVersion] -questionnaire8Versions = qVersions questionnaire8Uuid - -qtn8AlbertEditQtnPerm :: QuestionnairePerm -qtn8AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire8.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire9Uuid :: U.UUID -questionnaire9Uuid = u' "936e852f-4c41-4524-8387-bd87090e9fcc" - -questionnaire9 :: Questionnaire -questionnaire9 = - questionnaire2 - { uuid = questionnaire9Uuid - , name = "My VisibleEdit Questionnaire SharedView" - , visibility = VisibleEditQuestionnaire - , sharing = AnyoneWithLinkViewQuestionnaire - , permissions = [qtn9AlbertEditQtnPerm] - } - -questionnaire9Events :: [QuestionnaireEvent] -questionnaire9Events = fEvents questionnaire9Uuid - -questionnaire9EventsEdited :: [QuestionnaireEvent] -questionnaire9EventsEdited = fEventsEdited questionnaire9Uuid - -questionnaire9Versions :: [QuestionnaireVersion] -questionnaire9Versions = qVersions questionnaire9Uuid - -qtn9AlbertEditQtnPerm :: QuestionnairePerm -qtn9AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire9.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire10Uuid :: U.UUID -questionnaire10Uuid = u' "3c8e7ce6-cb5e-4cd1-a4d1-fb9de55f67ed" - -questionnaire10 :: Questionnaire -questionnaire10 = - questionnaire3 - { uuid = questionnaire10Uuid - , name = "My VisibleEdit Questionnaire SharedEdit" - , visibility = VisibleEditQuestionnaire - , sharing = AnyoneWithLinkEditQuestionnaire - } - -questionnaire10Events :: [QuestionnaireEvent] -questionnaire10Events = fEvents questionnaire10Uuid - -questionnaire10EventsEdited :: [QuestionnaireEvent] -questionnaire10EventsEdited = questionnaire10Events ++ [setCreatedBy (slble_rQ2' questionnaire10Uuid) Nothing] - -questionnaire10Versions :: [QuestionnaireVersion] -questionnaire10Versions = qVersions questionnaire10Uuid - -questionnaire10Ctn :: QuestionnaireContent -questionnaire10Ctn = - QuestionnaireContent - { phaseUuid = Just $ phase1.uuid - , replies = fReplies - , labels = fLabels - } - -questionnaire10EditedShare :: Questionnaire -questionnaire10EditedShare = questionnaire10 {permissions = [qtn10NikolaEditQtnPerm]} - -questionnaire10EditedSettings :: Questionnaire -questionnaire10EditedSettings = questionnaire10 {name = "EDITED: " ++ questionnaire10.name} - -qtn10NikolaEditQtnPerm :: QuestionnairePerm -qtn10NikolaEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire10.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userNikola.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn10NikolaEditQtnPermDto :: QuestionnairePermDTO -qtn10NikolaEditQtnPermDto = toUserQuestionnairePermDTO qtn10NikolaEditQtnPerm userNikola - -questionnaire10EditedSettingsChange :: QuestionnaireSettingsChangeDTO -questionnaire10EditedSettingsChange = - QuestionnaireSettingsChangeDTO - { name = "EDITED: " ++ questionnaire10.name - , description = questionnaire10.description - , projectTags = questionnaire10.projectTags - , documentTemplateId = Nothing - , formatUuid = Nothing - , isTemplate = questionnaire10.isTemplate - } - -questionnaire10EditedWs :: QuestionnaireDetailWsDTO -questionnaire10EditedWs = - QuestionnaireDetailWsDTO - { name = questionnaire10EditedSettingsChange.name - , description = questionnaire10EditedSettingsChange.description - , visibility = questionnaire10.visibility - , sharing = questionnaire10.sharing - , projectTags = questionnaire10EditedSettingsChange.projectTags - , permissions = [] - , documentTemplateId = Nothing - , documentTemplate = Nothing - , formatUuid = Nothing - , format = Nothing - , isTemplate = questionnaire10EditedSettingsChange.isTemplate - , labels = M.empty - , unresolvedCommentCounts = M.empty - , resolvedCommentCounts = M.empty - } - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire11Uuid :: U.UUID -questionnaire11Uuid = u' "ba6b6c0e-2bb7-40e7-9019-feb943756888" - -questionnaire11 :: Questionnaire -questionnaire11 = - questionnaire1 - { uuid = questionnaire11Uuid - , name = "My Questionnaire from project template" - , permissions = [qtn11AlbertEditQtnPerm] - } - -questionnaire11Events :: [QuestionnaireEvent] -questionnaire11Events = fEvents questionnaire11Uuid - -questionnaire11Versions :: [QuestionnaireVersion] -questionnaire11Versions = qVersions questionnaire11Uuid - -questionnaire11Ctn :: QuestionnaireContent -questionnaire11Ctn = questionnaire1Ctn - -questionnaire11Dto :: QuestionnaireDTO -questionnaire11Dto = toSimpleDTO questionnaire11 germanyKmPackage QSDefault [qtn11AlbertEditQtnPermDto] - -qtn11AlbertEditQtnPerm :: QuestionnairePerm -qtn11AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire11.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn11AlbertEditQtnPermDto :: QuestionnairePermDTO -qtn11AlbertEditQtnPermDto = toUserQuestionnairePermDTO qtn11AlbertEditQtnPerm userAlbert - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire12Uuid :: U.UUID -questionnaire12Uuid = u' "e02bc040-7446-48a2-b557-678e01d66937" - -questionnaire12 :: Questionnaire -questionnaire12 = - questionnaire1 - { uuid = questionnaire12Uuid - , name = "My Private Questionnaire with 2 users" - , visibility = VisibleEditQuestionnaire - , sharing = AnyoneWithLinkEditQuestionnaire - , permissions = [qtn12NikolaEditQtnPerm, qtn12AlbertEditQtnPerm] - , updatedAt = dt' 2018 1 23 - } - -questionnaire12Events :: [QuestionnaireEvent] -questionnaire12Events = fEvents questionnaire12Uuid - -questionnaire12Versions :: [QuestionnaireVersion] -questionnaire12Versions = qVersions questionnaire12Uuid - -questionnaire12Ctn :: QuestionnaireContent -questionnaire12Ctn = questionnaire1Ctn - -questionnaire12Dto :: QuestionnaireDTO -questionnaire12Dto = - toSimpleDTO questionnaire12 germanyKmPackage QSDefault [qtn12NikolaEditQtnPermDto, qtn12AlbertEditQtnPermDto] - -qtn12AlbertEditQtnPerm :: QuestionnairePerm -qtn12AlbertEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire12.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userAlbert.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn12AlbertEditQtnPermDto :: QuestionnairePermDTO -qtn12AlbertEditQtnPermDto = toUserQuestionnairePermDTO qtn12AlbertEditQtnPerm userAlbert - -qtn12NikolaEditQtnPerm :: QuestionnairePerm -qtn12NikolaEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire12.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userNikola.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn12NikolaEditQtnPermDto :: QuestionnairePermDTO -qtn12NikolaEditQtnPermDto = toUserQuestionnairePermDTO qtn12NikolaEditQtnPerm userNikola - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire13Uuid :: U.UUID -questionnaire13Uuid = u' "59b97a8e-aa48-47f7-93a7-646f9df077df" - -questionnaire13 :: Questionnaire -questionnaire13 = - questionnaire1 - { uuid = questionnaire13Uuid - , name = "My VisibleCommentQuestionnaire Questionnaire" - , visibility = VisibleCommentQuestionnaire - , permissions = [qtn13NikolaCommentQtnPerm] - } - -questionnaire13Events :: [QuestionnaireEvent] -questionnaire13Events = fEvents questionnaire13Uuid - -questionnaire13Versions :: [QuestionnaireVersion] -questionnaire13Versions = qVersions questionnaire13Uuid - -questionnaire13Ctn :: QuestionnaireContent -questionnaire13Ctn = questionnaire1Ctn - -questionnaire13Dto :: QuestionnaireDTO -questionnaire13Dto = toSimpleDTO questionnaire13 germanyKmPackage QSDefault [qtn13NikolaCommentQtnPermDto] - -qtn13NikolaCommentQtnPerm :: QuestionnairePerm -qtn13NikolaCommentQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire13.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userNikola.uuid - , perms = commentatorPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn13NikolaCommentQtnPermDto :: QuestionnairePermDTO -qtn13NikolaCommentQtnPermDto = toUserQuestionnairePermDTO qtn13NikolaCommentQtnPerm userNikola - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire14 :: Questionnaire -questionnaire14 = - questionnaire1 - { uuid = u' "8355fe3c-47b9-4078-b5b6-08aa0188e85f" - , name = "My different KM Questionnaire" - , permissions = [qtn14NikolaEditQtnPerm] - , knowledgeModelPackageId = amsterdamKmPackage.pId - , updatedAt = dt' 2018 1 26 - } - -questionnaire14Events :: [QuestionnaireEvent] -questionnaire14Events = [] - -questionnaire14Ctn :: QuestionnaireContent -questionnaire14Ctn = questionnaire1Ctn - -questionnaire14Dto :: QuestionnaireDTO -questionnaire14Dto = toSimpleDTO questionnaire14 amsterdamKmPackage QSDefault [qtn14NikolaEditQtnPermDto] - -qtn14NikolaEditQtnPerm :: QuestionnairePerm -qtn14NikolaEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire14.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userNikola.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn14NikolaEditQtnPermDto :: QuestionnairePermDTO -qtn14NikolaEditQtnPermDto = toUserQuestionnairePermDTO qtn14NikolaEditQtnPerm userNikola - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -questionnaire15Uuid :: U.UUID -questionnaire15Uuid = u' "d09695f4-638b-472b-9951-a31bd7dc91f7" - -questionnaire15 :: Questionnaire -questionnaire15 = - Questionnaire - { uuid = questionnaire15Uuid - , name = "My Group Questionnaire" - , description = Just "Some description" - , visibility = PrivateQuestionnaire - , sharing = RestrictedQuestionnaire - , knowledgeModelPackageId = germanyKmPackage.pId - , selectedQuestionTagUuids = [] - , projectTags = [] - , documentTemplateId = Just wizardDocumentTemplate.tId - , formatUuid = Just formatJson.uuid - , creatorUuid = Nothing - , permissions = [qtn15GroupEditQtnPerm] - , isTemplate = False - , squashed = True - , tenantUuid = defaultTenant.uuid - , createdAt = dt' 2018 1 20 - , updatedAt = dt' 2018 1 29 - } - -questionnaire15AnonymousEdit :: Questionnaire -questionnaire15AnonymousEdit = - questionnaire15 - { sharing = AnyoneWithLinkEditQuestionnaire - } - -questionnaire15AnonymousComment :: Questionnaire -questionnaire15AnonymousComment = - questionnaire15 - { sharing = AnyoneWithLinkCommentQuestionnaire - } - -questionnaire15NoPerms :: Questionnaire -questionnaire15NoPerms = - questionnaire15 - { permissions = [] - } - -questionnaire15Events :: [QuestionnaireEvent] -questionnaire15Events = fEvents questionnaire15Uuid - -questionnaire15Versions :: [QuestionnaireVersion] -questionnaire15Versions = qVersions questionnaire15Uuid - -questionnaire15Dto :: QuestionnaireDTO -questionnaire15Dto = toSimpleDTO questionnaire15 germanyKmPackage QSDefault [qtn15GroupEditQtnPermDto] - -qtn15GroupEditQtnPerm :: QuestionnairePerm -qtn15GroupEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire15.uuid - , memberType = UserGroupQuestionnairePermType - , memberUuid = bioGroup.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn15GroupViewQtnPerm :: QuestionnairePerm -qtn15GroupViewQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire15.uuid - , memberType = UserGroupQuestionnairePermType - , memberUuid = animalGroup.uuid - , perms = viewerPermissions - , tenantUuid = defaultTenant.uuid - } - -qtn15GroupEditQtnPermDto :: QuestionnairePermDTO -qtn15GroupEditQtnPermDto = toUserGroupQuestionnairePermDTO qtn15GroupEditQtnPerm bioGroup - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -differentQuestionnaire :: Questionnaire -differentQuestionnaire = - Questionnaire - { uuid = u' "7bf4a83e-1687-4e99-b1df-9221977d7b4f" - , name = "My Different Questionnaire" - , description = Just "Some description" - , visibility = PrivateQuestionnaire - , sharing = RestrictedQuestionnaire - , knowledgeModelPackageId = differentPackage.pId - , selectedQuestionTagUuids = [] - , projectTags = [] - , documentTemplateId = Just $ anotherWizardDocumentTemplate.tId - , formatUuid = Just $ formatJson.uuid - , creatorUuid = Just $ userCharles.uuid - , permissions = [differentCharlesOwnerQtnPerm] - , isTemplate = True - , squashed = True - , tenantUuid = differentTenant.uuid - , createdAt = dt' 2018 1 20 - , updatedAt = dt' 2018 1 25 - } - -differentQuestionnaireEvents :: [QuestionnaireEvent] -differentQuestionnaireEvents = [] - -differentQuestionnaireVersions :: [QuestionnaireVersion] -differentQuestionnaireVersions = [] - -differentCharlesOwnerQtnPerm :: QuestionnairePerm -differentCharlesOwnerQtnPerm = - QuestionnairePerm - { questionnaireUuid = differentQuestionnaire.uuid - , memberType = UserQuestionnairePermType - , memberUuid = userCharles.uuid - , perms = ownerPermissions - , tenantUuid = differentTenant.uuid - } - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -contentChangeDTO :: QuestionnaireContentChangeDTO -contentChangeDTO = - QuestionnaireContentChangeDTO - { events = fmap toEventChangeDTO (fEvents U.nil) - } - --- ------------------------------------------------------------------------ --- ------------------------------------------------------------------------ -bioGroupEditQtnPerm :: QuestionnairePerm -bioGroupEditQtnPerm = - QuestionnairePerm - { questionnaireUuid = questionnaire1.uuid - , memberType = UserGroupQuestionnairePermType - , memberUuid = bioGroup.uuid - , perms = ownerPermissions - , tenantUuid = defaultTenant.uuid - } - -bioGroupEditQtnPermDto :: QuestionnairePermDTO -bioGroupEditQtnPermDto = toUserGroupQuestionnairePermDTO bioGroupEditQtnPerm bioGroup diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorMigration.hs deleted file mode 100644 index 688c5ec2e..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorMigration.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.MigratorMigration where - -import Shared.Common.Constant.Component -import Shared.Common.Util.Logger -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates - -runMigration = do - logInfo _CMP_MIGRATION "(Migration/Questionnaire) started" - deleteMigratorStates - insertMigratorState differentQtnMigrationState - logInfo _CMP_MIGRATION "(Migration/Questionnaire) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorSchemaMigration.hs deleted file mode 100644 index bee6f352f..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/MigratorSchemaMigration.hs +++ /dev/null @@ -1,34 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.MigratorSchemaMigration where - -import Database.PostgreSQL.Simple -import GHC.Int - -import Shared.Common.Util.Logger -import Wizard.Database.DAO.Common -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () - -dropTables :: AppContextM Int64 -dropTables = do - logInfo _CMP_MIGRATION "(Table/Migration/Questionnaire) drop tables" - let sql = "DROP TABLE IF EXISTS questionnaire_migration;" - let action conn = execute_ conn sql - runDB action - -createTables :: AppContextM Int64 -createTables = do - logInfo _CMP_MIGRATION "(Table/Migration/Questionnaire) create table" - let sql = - "CREATE TABLE questionnaire_migration \ - \( \ - \ old_questionnaire_uuid uuid NOT NULL, \ - \ new_questionnaire_uuid uuid NOT NULL, \ - \ resolved_question_uuids uuid[] NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ CONSTRAINT questionnaire_migration_pk PRIMARY KEY (old_questionnaire_uuid, new_questionnaire_uuid), \ - \ CONSTRAINT questionnaire_migration_old_questionnaire_uuid_fk FOREIGN KEY (old_questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_migration_new_questionnaire_uuid_fk FOREIGN KEY (new_questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_migration_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireMigration.hs deleted file mode 100644 index b0e24d675..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireMigration.hs +++ /dev/null @@ -1,46 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration where - -import Data.Foldable (traverse_) - -import Shared.Common.Constant.Component -import Shared.Common.Util.Logger -import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO -import Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.S3.Questionnaire.QuestionnaireFileS3 - -runMigration = do - logInfo _CMP_MIGRATION "(Questionnaire/Questionnaire) started" - deleteQuestionnaireFiles - purgeBucket - deleteQuestionnaireComments - deleteQuestionnaireCommentThreads - deleteQuestionnairePerms - deleteQuestionnaireEvents - deleteQuestionnaires - insertPackage germanyKmPackage - insertQuestionnaire questionnaire1 - insertQuestionnaireEvents (fEvents questionnaire1Uuid) - traverse_ insertQuestionnaireVersion questionnaire1Versions - insertQuestionnaire questionnaire2 - insertQuestionnaireEvents (fEvents questionnaire2Uuid) - traverse_ insertQuestionnaireVersion questionnaire2Versions - insertQuestionnaire questionnaire3 - insertQuestionnaireEvents (fEvents questionnaire3Uuid) - traverse_ insertQuestionnaireVersion questionnaire3Versions - insertQuestionnaire differentQuestionnaire - insertQuestionnaireCommentThread cmtQ1_t1 - insertQuestionnaireComment cmtQ1_t1_1 - insertQuestionnaireComment cmtQ1_t1_2 - insertQuestionnaireCommentThread cmtQ2_t1 - insertQuestionnaireComment cmtQ2_t1_1 - logInfo _CMP_MIGRATION "(Questionnaire/Questionnaire) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireSchemaMigration.hs deleted file mode 100644 index 9f1eb6305..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/Questionnaire/QuestionnaireSchemaMigration.hs +++ /dev/null @@ -1,275 +0,0 @@ -module Wizard.Database.Migration.Development.Questionnaire.QuestionnaireSchemaMigration where - -import Control.Monad.Except (catchError) -import Database.PostgreSQL.Simple -import GHC.Int - -import Shared.Common.Util.Logger -import Wizard.Database.DAO.Common -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () -import Wizard.S3.Questionnaire.QuestionnaireFileS3 - -dropTables :: AppContextM Int64 -dropTables = do - logInfo _CMP_MIGRATION "(Table/Questionnaire) drop tables" - let sql = - "DROP TRIGGER IF EXISTS trigger_on_after_questionnaire_file_delete ON questionnaire_file; \ - \DROP FUNCTION IF EXISTS create_persistent_command_from_questionnaire_file_delete; \ - \DROP TABLE IF EXISTS questionnaire_file CASCADE; \ - \DROP TABLE IF EXISTS questionnaire_version CASCADE; \ - \DROP TABLE IF EXISTS questionnaire_comment CASCADE; \ - \DROP TABLE IF EXISTS questionnaire_comment_thread CASCADE; \ - \DROP TABLE IF EXISTS questionnaire_perm_group CASCADE; \ - \DROP TABLE IF EXISTS questionnaire_perm_user CASCADE; \ - \DROP TABLE IF EXISTS questionnaire_event; \ - \DROP TYPE IF EXISTS questionnaire_event_type; \ - \DROP TYPE IF EXISTS value_type; \ - \DROP TABLE IF EXISTS questionnaire CASCADE; " - let action conn = execute_ conn sql - runDB action - -dropBucket :: AppContextM () -dropBucket = do - catchError purgeBucket (\e -> return ()) - catchError removeBucket (\e -> return ()) - -dropFunctions :: AppContextM Int64 -dropFunctions = do - logInfo _CMP_MIGRATION "(Function/Questionnaire) drop functions" - let sql = "DROP FUNCTION IF EXISTS create_persistent_command_from_questionnaire_file_delete;" - let action conn = execute_ conn sql - runDB action - -dropTriggers :: AppContextM Int64 -dropTriggers = do - logInfo _CMP_MIGRATION "(Trigger/Questionnaire) drop tables" - let sql = "DROP TRIGGER IF EXISTS trigger_on_after_questionnaire_file_delete ON questionnaire_file;" - let action conn = execute_ conn sql - runDB action - -createTables :: AppContextM () -createTables = do - createQtnTable - createQtnEventTable - createQtnAclUserTable - createQtnAclGroupTable - createQtnCommentThreadTable - createQtnCommentTable - createQtnVersionTable - createQtnFileTable - createPersistentCommandFromQuestionnaireFileDeleteFunction - makeBucket - -createQtnTable = do - logInfo _CMP_MIGRATION "(Table/Questionnaire) create table" - let sql = - "CREATE TABLE questionnaire \ - \( \ - \ uuid uuid NOT NULL, \ - \ name varchar NOT NULL, \ - \ visibility varchar NOT NULL, \ - \ sharing varchar NOT NULL, \ - \ knowledge_model_package_id varchar NOT NULL, \ - \ selected_question_tag_uuids uuid[] NOT NULL, \ - \ document_template_id varchar, \ - \ format_uuid uuid, \ - \ created_by uuid, \ - \ created_at timestamptz NOT NULL, \ - \ updated_at timestamptz NOT NULL, \ - \ description varchar, \ - \ is_template boolean NOT NULL, \ - \ squashed boolean NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ project_tags text[] NOT NULL, \ - \ CONSTRAINT questionnaire_pk PRIMARY KEY (uuid), \ - \ CONSTRAINT questionnaire_knowledge_model_package_id_fk FOREIGN KEY (knowledge_model_package_id, tenant_uuid) REFERENCES knowledge_model_package (id, tenant_uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_document_template_id_fk FOREIGN KEY (document_template_id, tenant_uuid) REFERENCES document_template (id, tenant_uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ - \ CONSTRAINT questionnaire_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action - -createQtnEventTable = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireEvent) create table" - let sql = - "CREATE TYPE questionnaire_event_type AS ENUM ('ClearReplyEvent', 'SetReplyEvent', 'SetLabelsEvent', 'SetPhaseEvent'); \ - \CREATE TYPE value_type AS ENUM ('IntegrationReply', 'AnswerReply', 'MultiChoiceReply', 'ItemListReply', 'StringReply', 'ItemSelectReply', 'FileReply'); \ - \CREATE TABLE IF NOT EXISTS questionnaire_event \ - \( \ - \ uuid uuid NOT NULL, \ - \ event_type questionnaire_event_type NOT NULL, \ - \ path text, \ - \ created_at timestamptz NOT NULL, \ - \ created_by uuid, \ - \ questionnaire_uuid uuid NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ value_type value_type, \ - \ value text[], \ - \ value_id text, \ - \ value_raw jsonb, \ - \ CONSTRAINT questionnaire_event_pk PRIMARY KEY (uuid), \ - \ CONSTRAINT questionnaire_event_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity(uuid) ON DELETE SET NULL, \ - \ CONSTRAINT questionnaire_event_questionnaire_uuid_fk FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire(uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_event_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant(uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action - -createQtnAclUserTable = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireAclUser) create table" - let sql = - "CREATE TABLE questionnaire_perm_user \ - \( \ - \ questionnaire_uuid uuid NOT NULL, \ - \ user_uuid uuid NOT NULL, \ - \ perms text[] NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ CONSTRAINT questionnaire_perm_user_pk PRIMARY KEY (user_uuid, questionnaire_uuid), \ - \ CONSTRAINT questionnaire_perm_user_questionnaire_uuid_fk FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_perm_user_user_uuid_fk FOREIGN KEY (user_uuid) REFERENCES user_entity (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_perm_user_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action - -createQtnAclGroupTable = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireAclGroup) create table" - let sql = - "CREATE TABLE questionnaire_perm_group \ - \( \ - \ questionnaire_uuid uuid NOT NULL, \ - \ user_group_uuid uuid NOT NULL, \ - \ perms text[] NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ CONSTRAINT questionnaire_perm_group_pk PRIMARY KEY (user_group_uuid, questionnaire_uuid), \ - \ CONSTRAINT questionnaire_perm_group_questionnaire_uuid_fk FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_perm_group_user_group_uuid_fk FOREIGN KEY (user_group_uuid) REFERENCES user_group (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_perm_group_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action - -createQtnCommentThreadTable = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireCommentThread) create table" - let sql = - "CREATE TABLE questionnaire_comment_thread \ - \( \ - \ uuid uuid NOT NULL, \ - \ path text NOT NULL, \ - \ resolved bool NOT NULL, \ - \ private bool NOT NULL, \ - \ questionnaire_uuid uuid NOT NULL, \ - \ created_by uuid, \ - \ created_at timestamptz NOT NULL, \ - \ updated_at timestamptz NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ assigned_to uuid, \ - \ assigned_by uuid, \ - \ notification_required bool NOT NULL DEFAULT false, \ - \ CONSTRAINT questionnaire_comment_thread_pk PRIMARY KEY (uuid), \ - \ CONSTRAINT questionnaire_comment_thread_questionnaire_uuid FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_comment_thread_assigned_to FOREIGN KEY (assigned_to) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ - \ CONSTRAINT questionnaire_comment_thread_assigned_by FOREIGN KEY (assigned_by) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ - \ CONSTRAINT questionnaire_comment_thread_tenant_uuid FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action - -createQtnCommentTable = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireComment) create table" - let sql = - "CREATE TABLE questionnaire_comment \ - \( \ - \ uuid uuid NOT NULL, \ - \ text text NOT NULL, \ - \ comment_thread_uuid uuid, \ - \ created_by uuid, \ - \ created_at timestamptz NOT NULL, \ - \ updated_at timestamptz NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ CONSTRAINT questionnaire_comment_pk PRIMARY KEY (uuid), \ - \ CONSTRAINT questionnaire_comment_comment_thread_uuid FOREIGN KEY (comment_thread_uuid) REFERENCES questionnaire_comment_thread (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_comment_tenant_uuid FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action - -createQtnVersionTable = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireVersion) create table" - let sql = - "CREATE TABLE questionnaire_version \ - \( \ - \ uuid uuid NOT NULL, \ - \ name varchar NOT NULL, \ - \ description varchar, \ - \ event_uuid uuid NOT NULL, \ - \ questionnaire_uuid uuid NOT NULL, \ - \ tenant_uuid uuid NOT NULL, \ - \ created_by uuid, \ - \ created_at timestamptz NOT NULL, \ - \ updated_at timestamptz NOT NULL, \ - \ CONSTRAINT questionnaire_version_pk PRIMARY KEY (uuid), \ - \ CONSTRAINT questionnaire_version_event_uuid_fk FOREIGN KEY (event_uuid) REFERENCES questionnaire_event (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_version_questionnaire_uuid_fk FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_version_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_version_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity (uuid) ON DELETE SET NULL \ - \);" - let action conn = execute_ conn sql - runDB action - -createQtnFileTable = do - logInfo _CMP_MIGRATION "(Table/QuestionnaireFile) create table" - let sql = - "CREATE TABLE questionnaire_file \ - \( \ - \ uuid uuid NOT NULL, \ - \ file_name varchar NOT NULL, \ - \ content_type varchar NOT NULL, \ - \ file_size bigint NOT NULL, \ - \ questionnaire_uuid uuid NOT NULL, \ - \ created_by uuid, \ - \ tenant_uuid uuid NOT NULL, \ - \ created_at timestamptz NOT NULL, \ - \ CONSTRAINT questionnaire_file_pk PRIMARY KEY (uuid), \ - \ CONSTRAINT questionnaire_file_questionnaire_uuid_fk FOREIGN KEY (questionnaire_uuid) REFERENCES questionnaire (uuid) ON DELETE CASCADE, \ - \ CONSTRAINT questionnaire_file_created_by_fk FOREIGN KEY (created_by) REFERENCES user_entity (uuid) ON DELETE SET NULL, \ - \ CONSTRAINT questionnaire_file_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ - \);" - let action conn = execute_ conn sql - runDB action - -createFunctions :: AppContextM Int64 -createFunctions = do - logInfo _CMP_MIGRATION "(Function/Questionnaire) create functions" - createPersistentCommandFromQuestionnaireFileDeleteFunction - -createPersistentCommandFromQuestionnaireFileDeleteFunction = do - let sql = - "CREATE OR REPLACE FUNCTION create_persistent_command_from_questionnaire_file_delete() \ - \ RETURNS TRIGGER AS \ - \$$ \ - \BEGIN \ - \ PERFORM create_persistent_command( \ - \ 'questionnaire_file', \ - \ 'deleteFromS3', \ - \ jsonb_build_object('questionnaireUuid', OLD.questionnaire_uuid, 'fileUuid', OLD.uuid), \ - \ OLD.tenant_uuid); \ - \ RETURN OLD; \ - \END; \ - \$$ LANGUAGE plpgsql;" - let action conn = execute_ conn sql - runDB action - -createTriggers :: AppContextM Int64 -createTriggers = do - logInfo _CMP_MIGRATION "(Trigger/Questionnaire) create triggers" - let sql = - "CREATE OR REPLACE TRIGGER trigger_on_after_questionnaire_file_delete \ - \ AFTER DELETE \ - \ ON questionnaire_file \ - \ FOR EACH ROW \ - \EXECUTE FUNCTION create_persistent_command_from_questionnaire_file_delete();" - let action conn = execute_ conn sql - runDB action diff --git a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/Data/QuestionnaireActions.hs b/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/Data/QuestionnaireActions.hs deleted file mode 100644 index da0e97019..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/Data/QuestionnaireActions.hs +++ /dev/null @@ -1,122 +0,0 @@ -module Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions where - -import qualified Data.Aeson.KeyMap as KM - -import Shared.Common.Constant.Tenant -import Shared.Common.Util.Date -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Constant.QuestionnaireAction -import Wizard.Model.QuestionnaireAction.QuestionnaireAction -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper - -questionnaireActionFtp1 :: QuestionnaireAction -questionnaireActionFtp1 = - QuestionnaireAction - { qaId = "global:questionnaire-action-ftp:1.0.0" - , name = "Questionnaire Action FTP" - , organizationId = "global" - , actionId = "questionnaire-action-ftp" - , version = "1.0.0" - , metamodelVersion = questionnaireActionMetamodelVersion - , description = "Uploading questionnaire to FTP" - , readme = "# Questionnaire Action FTP" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternAll] - , url = "http://example.com/questionnaire-action-ftp" - , config = KM.empty - , enabled = True - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireActionFtp2 :: QuestionnaireAction -questionnaireActionFtp2 = - QuestionnaireAction - { qaId = "global:questionnaire-action-ftp:2.0.0" - , name = "Questionnaire Action FTP" - , organizationId = "global" - , actionId = "questionnaire-action-ftp" - , version = "2.0.0" - , metamodelVersion = questionnaireActionMetamodelVersion - , description = "Uploading questionnaire to FTP" - , readme = "# Questionnaire Action FTP" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternAll] - , url = "http://example.com/questionnaire-action-ftp" - , config = KM.empty - , enabled = True - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireActionFtp3 :: QuestionnaireAction -questionnaireActionFtp3 = - QuestionnaireAction - { qaId = "global:questionnaire-action-ftp:3.0.0" - , name = "Questionnaire Action FTP" - , organizationId = "global" - , actionId = "questionnaire-action-ftp" - , version = "3.0.0" - , metamodelVersion = questionnaireActionMetamodelVersion - , description = "Uploading questionnaire to FTP" - , readme = "# Questionnaire Action FTP" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternAll] - , url = "http://example.com/questionnaire-action-ftp" - , config = KM.empty - , enabled = False - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireActionFtp3Edited :: QuestionnaireAction -questionnaireActionFtp3Edited = questionnaireActionFtp3 {enabled = True} - -questionnaireActionFtp3Dto :: QuestionnaireActionDTO -questionnaireActionFtp3Dto = toDTO questionnaireActionFtp3 - -questionnaireActionMail1 :: QuestionnaireAction -questionnaireActionMail1 = - QuestionnaireAction - { qaId = "global:questionnaire-action-mail:1.0.0" - , name = "Questionnaire Action Mail" - , organizationId = "global" - , actionId = "questionnaire-action-mail" - , version = "1.0.0" - , metamodelVersion = questionnaireActionMetamodelVersion - , description = "Sending questionnaire via mail" - , readme = "# Questionnaire Action Mail" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternGlobal] - , url = "http://example.com/questionnaire-action-mail" - , config = KM.empty - , enabled = True - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireActionScp1 :: QuestionnaireAction -questionnaireActionScp1 = - QuestionnaireAction - { qaId = "global:questionnaire-action-onto:1.0.0" - , name = "Questionnaire Action SCP" - , organizationId = "global" - , actionId = "questionnaire-action-onto" - , version = "1.0.0" - , metamodelVersion = questionnaireActionMetamodelVersion - , description = "Uploading questionnaire via SCP" - , readme = "# Questionnaire Action SCP" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternGlobal] - , url = "http://example.com/questionnaire-action-onto" - , config = KM.empty - , enabled = False - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/QuestionnaireActionMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/QuestionnaireActionMigration.hs deleted file mode 100644 index cd52585fc..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireAction/QuestionnaireActionMigration.hs +++ /dev/null @@ -1,19 +0,0 @@ -module Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionMigration where - -import Shared.Common.Constant.Component -import Shared.Common.Util.Logger -import Wizard.Database.DAO.QuestionnaireAction.QuestionnaireActionDAO -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () - -runMigration :: AppContextM () -runMigration = do - logInfo _CMP_MIGRATION "(QuestionnaireAction/QuestionnaireAction) started" - deleteQuestionnaireActions - insertQuestionnaireAction questionnaireActionFtp1 - insertQuestionnaireAction questionnaireActionFtp2 - insertQuestionnaireAction questionnaireActionFtp3 - insertQuestionnaireAction questionnaireActionMail1 - insertQuestionnaireAction questionnaireActionScp1 - logInfo _CMP_MIGRATION "(QuestionnaireAction/QuestionnaireAction) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/Data/QuestionnaireImporters.hs b/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/Data/QuestionnaireImporters.hs deleted file mode 100644 index 973acbbd6..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/Data/QuestionnaireImporters.hs +++ /dev/null @@ -1,115 +0,0 @@ -module Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters where - -import Shared.Common.Constant.Tenant -import Shared.Common.Util.Date -import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Constant.QuestionnaireImporter -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper - -questionnaireImporterBio1 :: QuestionnaireImporter -questionnaireImporterBio1 = - QuestionnaireImporter - { qiId = "global:questionnaire-importer-bio:1.0.0" - , name = "QuestionnaireImporterBio" - , organizationId = "global" - , importerId = "questionnaire-importer-bio" - , version = "1.0.0" - , metamodelVersion = questionnaireImporterMetamodelVersion - , description = "Import bio answers from questionnaire" - , readme = "# Default QuestionnaireImporter BIO 1" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternAll] - , url = "http://example.com/questionnaire-importer-bio" - , enabled = True - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireImporterBio2 :: QuestionnaireImporter -questionnaireImporterBio2 = - QuestionnaireImporter - { qiId = "global:questionnaire-importer-bio:2.0.0" - , name = "QuestionnaireImporterBio" - , organizationId = "global" - , importerId = "questionnaire-importer-bio" - , version = "2.0.0" - , metamodelVersion = questionnaireImporterMetamodelVersion - , description = "Import bio answers from questionnaire" - , readme = "# Default QuestionnaireImporter BIO 2" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternAll] - , url = "http://example.com/questionnaire-importer-bio" - , enabled = True - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireImporterBio3 :: QuestionnaireImporter -questionnaireImporterBio3 = - QuestionnaireImporter - { qiId = "global:questionnaire-importer-bio:3.0.0" - , name = "QuestionnaireImporterBio" - , organizationId = "global" - , importerId = "questionnaire-importer-bio" - , version = "3.0.0" - , metamodelVersion = questionnaireImporterMetamodelVersion - , description = "Import bio answers from questionnaire" - , readme = "# Default QuestionnaireImporter BIO 3" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternAll] - , url = "http://example.com/questionnaire-importer-bio" - , enabled = False - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireImporterBio3Edited :: QuestionnaireImporter -questionnaireImporterBio3Edited = questionnaireImporterBio3 {enabled = True} - -questionnaireImporterBio3Dto :: QuestionnaireImporterDTO -questionnaireImporterBio3Dto = toDTO questionnaireImporterBio3 - -questionnaireImporterExt1 :: QuestionnaireImporter -questionnaireImporterExt1 = - QuestionnaireImporter - { qiId = "global:questionnaire-ext-importer:1.0.0" - , name = "QuestionnaireImporterExt" - , organizationId = "global" - , importerId = "questionnaire-ext-importer" - , version = "1.0.0" - , metamodelVersion = questionnaireImporterMetamodelVersion - , description = "Import ext answers from questionnaire" - , readme = "# Default Ext QuestionnaireImporter" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternGlobal] - , url = "http://example.com/questionnaire-ext-importer" - , enabled = True - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } - -questionnaireImporterOnto1 :: QuestionnaireImporter -questionnaireImporterOnto1 = - QuestionnaireImporter - { qiId = "global:questionnaire-importer-onto:1.0.0" - , name = "QuestionnaireImporterOnto" - , organizationId = "global" - , importerId = "questionnaire-importer-onto" - , version = "1.0.0" - , metamodelVersion = questionnaireImporterMetamodelVersion - , description = "Import onto answers from questionnaire" - , readme = "# Default Ext QuestionnaireImporter" - , license = "Apache-2.0" - , allowedPackages = [kmPackagePatternGlobal] - , url = "http://example.com/questionnaire-importer-onto" - , enabled = False - , tenantUuid = defaultTenantUuid - , createdAt = dt' 2018 1 21 - , updatedAt = dt' 2018 1 21 - } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/QuestionnaireImporterMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/QuestionnaireImporterMigration.hs deleted file mode 100644 index 1bf91f14b..000000000 --- a/wizard-server/src/Wizard/Database/Migration/Development/QuestionnaireImporter/QuestionnaireImporterMigration.hs +++ /dev/null @@ -1,19 +0,0 @@ -module Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterMigration where - -import Shared.Common.Constant.Component -import Shared.Common.Util.Logger -import Wizard.Database.DAO.QuestionnaireImporter.QuestionnaireImporterDAO -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () - -runMigration :: AppContextM () -runMigration = do - logInfo _CMP_MIGRATION "(QuestionnaireImporter/QuestionnaireImporter) started" - deleteQuestionnaireImporters - insertQuestionnaireImporter questionnaireImporterBio1 - insertQuestionnaireImporter questionnaireImporterBio2 - insertQuestionnaireImporter questionnaireImporterBio3 - insertQuestionnaireImporter questionnaireImporterExt1 - insertQuestionnaireImporter questionnaireImporterOnto1 - logInfo _CMP_MIGRATION "(QuestionnaireImporter/QuestionnaireImporter) ended" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Report/Data/Reports.hs b/wizard-server/src/Wizard/Database/Migration/Development/Report/Data/Reports.hs index b40e62844..75ed4fc13 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Report/Data/Reports.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Report/Data/Reports.hs @@ -7,7 +7,7 @@ import qualified Data.UUID as U import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Chapters import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Metrics import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportDTO +import Wizard.Api.Resource.Project.ProjectReportDTO import Wizard.Model.Report.Report report1 :: Report @@ -142,9 +142,9 @@ report1_ch3_full = -- ------------------------------------------------------------------------ -- ------------------------------------------------------------------------ -questionnaireReport :: QuestionnaireReportDTO -questionnaireReport = - QuestionnaireReportDTO +projectReport :: ProjectReportDTO +projectReport = + ProjectReportDTO { indications = [ PhasesAnsweredIndication' $ PhasesAnsweredIndication diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantConfigs.hs b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantConfigs.hs index ef63cb698..c1b72b3ec 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantConfigs.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantConfigs.hs @@ -13,7 +13,7 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.OpenId.Database.Migration.Development.OpenId.Data.OpenIds import Wizard.Api.Resource.Tenant.Config.TenantConfigChangeDTO import Wizard.Database.Migration.Development.Tenant.Data.Tenants -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Model.Tenant.Config.TenantConfigEM () import Wizard.Model.Tenant.Tenant @@ -34,7 +34,7 @@ defaultTenantConfig = , lookAndFeel = defaultLookAndFeel , registry = defaultRegistry , knowledgeModel = defaultKnowledgeModel - , questionnaire = defaultQuestionnaire + , project = defaultProject , submission = defaultSubmission , owl = defaultOwl , mailConfigUuid = Nothing @@ -44,7 +44,7 @@ defaultTenantConfig = } defaultTenantConfigChangeDto :: TenantConfigChangeDTO -defaultTenantConfigChangeDto = toChangeDTO defaultOrganizationChangeDto defaultAuthenticationChangeDto defaultPrivacyAndSupportChangeDto defaultDashboardAndLoginScreenChangeDto defaultLookAndFeelChangeDto defaultRegistryChangeDto defaultKnowledgeModelChangeDto defaultQuestionnaireChangeDto defaultSubmissionChangeDto defaultFeaturesChangeDto +defaultTenantConfigChangeDto = toChangeDTO defaultOrganizationChangeDto defaultAuthenticationChangeDto defaultPrivacyAndSupportChangeDto defaultDashboardAndLoginScreenChangeDto defaultLookAndFeelChangeDto defaultRegistryChangeDto defaultKnowledgeModelChangeDto defaultProjectChangeDto defaultSubmissionChangeDto defaultFeaturesChangeDto defaultOrganization :: TenantConfigOrganization defaultOrganization = fromOrganizationChangeDTO defaultOrganizationChangeDto defaultTenant.uuid (dt' 2018 1 20) (dt' 2018 1 20) @@ -190,52 +190,52 @@ defaultKnowledgeModelPublicPackagePattern = , updatedAt = dt' 2018 1 20 } -defaultQuestionnaire :: TenantConfigQuestionnaire -defaultQuestionnaire = fromQuestionnaireChangeDTO defaultQuestionnaireChangeDto defaultTenant.uuid (dt' 2018 1 20) (dt' 2018 1 20) +defaultProject :: TenantConfigProject +defaultProject = fromProjectChangeDTO defaultProjectChangeDto defaultTenant.uuid (dt' 2018 1 20) (dt' 2018 1 20) -defaultQuestionnaireEncrypted :: TenantConfigQuestionnaire -defaultQuestionnaireEncrypted = process defaultSecret defaultQuestionnaire +defaultProjectEncrypted :: TenantConfigProject +defaultProjectEncrypted = process defaultSecret defaultProject -defaultQuestionnaireChangeDto :: TenantConfigQuestionnaireChangeDTO -defaultQuestionnaireChangeDto = - TenantConfigQuestionnaireChangeDTO - { questionnaireVisibility = defaultQuestionnaireVisibility - , questionnaireSharing = defaultQuestionnaireSharing - , questionnaireCreation = TemplateAndCustomQuestionnaireCreation - , projectTagging = defaultQuestionnaireProjectTagging +defaultProjectChangeDto :: TenantConfigProjectChangeDTO +defaultProjectChangeDto = + TenantConfigProjectChangeDTO + { projectVisibility = defaultProjectVisibility + , projectSharing = defaultProjectSharing + , projectCreation = TemplateAndCustomProjectCreation + , projectTagging = defaultProjectProjectTagging , summaryReport = SimpleFeature True , feedback = defaultFeedback } -defaultQuestionnaireVisibility :: TenantConfigQuestionnaireVisibility -defaultQuestionnaireVisibility = - TenantConfigQuestionnaireVisibility +defaultProjectVisibility :: TenantConfigProjectVisibility +defaultProjectVisibility = + TenantConfigProjectVisibility { enabled = True - , defaultValue = PrivateQuestionnaire + , defaultValue = PrivateProjectVisibility } -defaultQuestionnaireSharing :: TenantConfigQuestionnaireSharing -defaultQuestionnaireSharing = - TenantConfigQuestionnaireSharing +defaultProjectSharing :: TenantConfigProjectSharing +defaultProjectSharing = + TenantConfigProjectSharing { enabled = True - , defaultValue = RestrictedQuestionnaire + , defaultValue = RestrictedProjectSharing , anonymousEnabled = False } -_SETTINGS_PROJECT_TAG_1 = "settingsProjectTag1" +_SETTINGS__PROJECT_TAG_1 = "settingsProjectTag1" -_SETTINGS_PROJECT_TAG_2 = "settingsProjectTag2" +_SETTINGS__PROJECT_TAG_2 = "settingsProjectTag2" -defaultQuestionnaireProjectTagging :: TenantConfigQuestionnaireProjectTagging -defaultQuestionnaireProjectTagging = - TenantConfigQuestionnaireProjectTagging +defaultProjectProjectTagging :: TenantConfigProjectProjectTagging +defaultProjectProjectTagging = + TenantConfigProjectProjectTagging { enabled = True - , tags = [_SETTINGS_PROJECT_TAG_1, _SETTINGS_PROJECT_TAG_2] + , tags = [_SETTINGS__PROJECT_TAG_1, _SETTINGS__PROJECT_TAG_2] } -defaultFeedback :: TenantConfigQuestionnaireFeedback +defaultFeedback :: TenantConfigProjectFeedback defaultFeedback = - TenantConfigQuestionnaireFeedback + TenantConfigProjectFeedback { enabled = True , token = "" , owner = "DSWGlobal" @@ -334,11 +334,11 @@ defaultOwl = -- ------------------------------------------------------------ -- ------------------------------------------------------------ -editedQuestionnaire :: TenantConfigQuestionnaire -editedQuestionnaire = fromQuestionnaireChangeDTO editedQuestionnaireChangeDto defaultTenant.uuid (dt' 2018 1 20) (dt' 2018 1 20) +editedProject :: TenantConfigProject +editedProject = fromProjectChangeDTO editedProjectChangeDto defaultTenant.uuid (dt' 2018 1 20) (dt' 2018 1 20) -editedQuestionnaireChangeDto :: TenantConfigQuestionnaireChangeDTO -editedQuestionnaireChangeDto = defaultQuestionnaireChangeDto {summaryReport = SimpleFeature False} +editedProjectChangeDto :: TenantConfigProjectChangeDTO +editedProjectChangeDto = defaultProjectChangeDto {summaryReport = SimpleFeature False} -- ------------------------------------------------------------ -- ------------------------------------------------------------ diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs index 5da209254..ad5f48ce6 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/Data/TenantLimitBundles.hs @@ -16,7 +16,7 @@ defaultTenantLimitBundle = , knowledgeModelEditors = -1000 , documentTemplates = -1000 , documentTemplateDrafts = -1000 - , questionnaires = -1000 + , projects = -1000 , documents = -1000 , locales = -1000 , storage = -1000 * 5 * 1000 * 1000 @@ -40,7 +40,7 @@ differentTenantLimitBundle = , knowledgeModelEditors = -1000 , documentTemplates = -1000 , documentTemplateDrafts = -1000 - , questionnaires = -1000 + , projects = -1000 , documents = -1000 , locales = -1000 , storage = -1000 * 5 * 1000 * 1000 diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantMigration.hs index 32b5b31a9..72f500db9 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantMigration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantMigration.hs @@ -8,7 +8,7 @@ import Wizard.Database.DAO.Tenant.Config.TenantConfigKnowledgeModelDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOwlDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigPrivacyAndSupportDAO -import Wizard.Database.DAO.Tenant.Config.TenantConfigQuestionnaireDAO +import Wizard.Database.DAO.Tenant.Config.TenantConfigProjectDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigRegistryDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Database.DAO.Tenant.TenantDAO @@ -53,7 +53,7 @@ runConfigMigration = do insertTenantConfigRegistry defaultRegistryEncrypted insertTenantConfigKnowledgeModel defaultKnowledgeModelEncrypted insertTenantConfigKnowledgeModelPublicPackagePattern defaultKnowledgeModelPublicPackagePattern - insertTenantConfigQuestionnaire defaultQuestionnaireEncrypted + insertTenantConfigProject defaultProjectEncrypted insertTenantConfigSubmission (defaultSubmission {services = []}) insertTenantConfigFeatures defaultFeatures insertTenantConfigMail defaultMail diff --git a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantSchemaMigration.hs b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantSchemaMigration.hs index cdd1f542b..629ebd1ad 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantSchemaMigration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/Tenant/TenantSchemaMigration.hs @@ -28,7 +28,7 @@ dropConfigTables = do \DROP TABLE IF EXISTS config_submission_service_request_header;\ \DROP TABLE IF EXISTS config_submission_service;\ \DROP TABLE IF EXISTS config_submission;\ - \DROP TABLE IF EXISTS config_questionnaire;\ + \DROP TABLE IF EXISTS config_project;\ \DROP TABLE IF EXISTS config_knowledge_model_public_package_pattern;\ \DROP TABLE IF EXISTS config_knowledge_model;\ \DROP TABLE IF EXISTS config_registry;\ @@ -89,7 +89,7 @@ createConfigTables = do createTcRegistryTable createTcKnowledgeModelTable createTcKnowledgeModelPublicPackagePatternTable - createTcQuestionnaireTable + createTcProjectTable createTcSubmissionTable createTcFeaturesTable createTcMailTable @@ -301,10 +301,10 @@ createTcKnowledgeModelPublicPackagePatternTable = do let action conn = execute_ conn sql runDB action -createTcQuestionnaireTable = do - logInfo _CMP_MIGRATION "(Table/ConfigQuestionnaire) create tables" +createTcProjectTable = do + logInfo _CMP_MIGRATION "(Table/ConfigProject) create tables" let sql = - "CREATE TABLE config_questionnaire\ + "CREATE TABLE config_project\ \( \ \ tenant_uuid uuid NOT NULL, \ \ visibility_enabled boolean NOT NULL, \ @@ -322,8 +322,8 @@ createTcQuestionnaireTable = do \ feedback_repo TEXT NOT NULL, \ \ created_at timestamptz NOT NULL, \ \ updated_at timestamptz NOT NULL, \ - \ CONSTRAINT config_questionnaire_pk PRIMARY KEY (tenant_uuid), \ - \ CONSTRAINT config_questionnaire_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ + \ CONSTRAINT config_project_pk PRIMARY KEY (tenant_uuid), \ + \ CONSTRAINT config_project_tenant_uuid_fk FOREIGN KEY (tenant_uuid) REFERENCES tenant (uuid) ON DELETE CASCADE \ \);" let action conn = execute_ conn sql runDB action @@ -445,7 +445,7 @@ createTenantLimitBundleTable = do \ knowledge_models integer NOT NULL, \ \ knowledge_model_editors integer NOT NULL, \ \ document_templates integer NOT NULL, \ - \ questionnaires integer NOT NULL, \ + \ projects integer NOT NULL, \ \ documents integer NOT NULL, \ \ storage bigint NOT NULL, \ \ created_at timestamptz NOT NULL, \ diff --git a/wizard-server/src/Wizard/Database/Migration/Development/TypeHint/Data/TypeHints.hs b/wizard-server/src/Wizard/Database/Migration/Development/TypeHint/Data/TypeHints.hs index 708176792..b4b8590ba 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/TypeHint/Data/TypeHints.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/TypeHint/Data/TypeHints.hs @@ -12,10 +12,10 @@ import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage import Wizard.Api.Resource.TypeHint.TypeHintRequestDTO import Wizard.Api.Resource.TypeHint.TypeHintTestRequestDTO import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditors -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Integration.Resource.TypeHint.TypeHintIDTO import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditor -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project forestDatasetTypeHint :: TypeHintIDTO forestDatasetTypeHint = @@ -77,8 +77,8 @@ kmEditorIntegrationTypeHintRequest = KnowledgeModelEditorIntegrationTypeHintRequ kmEditorQuestionTypeHintRequest :: TypeHintRequestDTO kmEditorQuestionTypeHintRequest = KnowledgeModelEditorQuestionTypeHintRequest' kmEditorQuestionTypeHintRequest' -questionnaireTypeHintRequest :: TypeHintRequestDTO -questionnaireTypeHintRequest = QuestionnaireTypeHintRequest' questionnaireTypeHintRequest' +projectTypeHintRequest :: TypeHintRequestDTO +projectTypeHintRequest = ProjectTypeHintRequest' projectTypeHintRequest' kmEditorIntegrationTypeHintRequest' :: KnowledgeModelEditorIntegrationTypeHintRequest kmEditorIntegrationTypeHintRequest' = @@ -95,10 +95,10 @@ kmEditorQuestionTypeHintRequest' = , q = "dog" } -questionnaireTypeHintRequest' :: QuestionnaireTypeHintRequest -questionnaireTypeHintRequest' = - QuestionnaireTypeHintRequest - { questionnaireUuid = questionnaire15.uuid +projectTypeHintRequest' :: ProjectTypeHintRequest +projectTypeHintRequest' = + ProjectTypeHintRequest + { projectUuid = project15.uuid , questionUuid = question15.uuid , q = "dog" } diff --git a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/AlbertEinstein.hs b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/AlbertEinstein.hs index 17d7aee6c..a39320aa4 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/AlbertEinstein.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/AlbertEinstein.hs @@ -49,11 +49,11 @@ userAlbert = , "KM_PUBLISH_PERM" , "PM_READ_PERM" , "PM_WRITE_PERM" - , "QTN_PERM" - , "QTN_FILE_PERM" - , "QTN_ACTION_PERM" - , "QTN_IMPORTER_PERM" - , "QTN_TML_PERM" + , "PRJ_PERM" + , "PRJ_FILE_PERM" + , "PRJ_ACTION_PERM" + , "PRJ_IMPORTER_PERM" + , "PJR_TML_PERM" , "DOC_TML_READ_PERM" , "CFG_PERM" , "SUBM_PERM" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/CharlesDarwin.hs b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/CharlesDarwin.hs index c8b40b5fe..78d433425 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/CharlesDarwin.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/CharlesDarwin.hs @@ -18,7 +18,7 @@ userCharles = , affiliation = Nothing , sources = [_USER_SOURCE_INTERNAL] , uRole = _USER_ROLE_RESEARCHER - , permissions = ["PM_READ_PERM", "QTN_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] + , permissions = ["PM_READ_PERM", "PRJ_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] , active = True , -- cspell:disable passwordHash = "pbkdf1:sha256|17|awVwfF3h27PrxINtavVgFQ==|iUFbQnZFv+rBXBu1R2OkX+vEjPtohYk5lsyIeOBdEy4=" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/GalileoGalilei.hs b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/GalileoGalilei.hs index 085f8233f..29a5fcf80 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/GalileoGalilei.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/GalileoGalilei.hs @@ -18,7 +18,7 @@ userGalileo = , affiliation = Nothing , sources = [_USER_SOURCE_INTERNAL] , uRole = _USER_ROLE_RESEARCHER - , permissions = ["PM_READ_PERM", "QTN_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] + , permissions = ["PM_READ_PERM", "PRJ_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] , active = True , -- cspell:disable passwordHash = "pbkdf1:sha256|17|awVwfF3h27PrxINtavVgFQ==|iUFbQnZFv+rBXBu1R2OkX+vEjPtohYk5lsyIeOBdEy4=" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/IsaacNewton.hs b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/IsaacNewton.hs index 66c6a229d..48df9fede 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/IsaacNewton.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/IsaacNewton.hs @@ -25,7 +25,7 @@ userIsaac = , affiliation = Nothing , sources = [_USER_SOURCE_INTERNAL] , uRole = _USER_ROLE_RESEARCHER - , permissions = ["PM_READ_PERM", "QTN_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] + , permissions = ["PM_READ_PERM", "PRJ_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] , active = True , -- cspell:disable passwordHash = "pbkdf1:sha256|17|awVwfF3h27PrxINtavVgFQ==|iUFbQnZFv+rBXBu1R2OkX+vEjPtohYk5lsyIeOBdEy4=" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NicolausCopernicus.hs b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NicolausCopernicus.hs index b98953559..3c2ac9e98 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NicolausCopernicus.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NicolausCopernicus.hs @@ -18,7 +18,7 @@ userNicolaus = , affiliation = Nothing , sources = [_USER_SOURCE_INTERNAL] , uRole = _USER_ROLE_RESEARCHER - , permissions = ["PM_READ_PERM", "QTN_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] + , permissions = ["PM_READ_PERM", "PRJ_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] , active = True , -- cspell:disable passwordHash = "pbkdf1:sha256|17|awVwfF3h27PrxINtavVgFQ==|iUFbQnZFv+rBXBu1R2OkX+vEjPtohYk5lsyIeOBdEy4=" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NikolaTesla.hs b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NikolaTesla.hs index 6f90a556c..e96088100 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NikolaTesla.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/NikolaTesla.hs @@ -31,10 +31,10 @@ userNikola = , "KM_PUBLISH_PERM" , "PM_READ_PERM" , "PM_WRITE_PERM" - , "QTN_PERM" - , "QTN_ACTION_PERM" - , "QTN_IMPORTER_PERM" - , "QTN_TML_PERM" + , "PRJ_PERM" + , "PRJ_ACTION_PERM" + , "PRJ_IMPORTER_PERM" + , "PJR_TML_PERM" , "DOC_TML_READ_PERM" , "SUBM_PERM" , "DOC_TML_WRITE_PERM" diff --git a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/SystemUser.hs b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/SystemUser.hs index f1b3d5bd5..29e811b88 100644 --- a/wizard-server/src/Wizard/Database/Migration/Development/User/Data/SystemUser.hs +++ b/wizard-server/src/Wizard/Database/Migration/Development/User/Data/SystemUser.hs @@ -27,11 +27,11 @@ userSystem = , "KM_PUBLISH_PERM" , "PM_READ_PERM" , "PM_WRITE_PERM" - , "QTN_PERM" - , "QTN_FILE_PERM" - , "QTN_ACTION_PERM" - , "QTN_IMPORTER_PERM" - , "QTN_TML_PERM" + , "PRJ_PERM" + , "PRJ_FILE_PERM" + , "PRJ_ACTION_PERM" + , "PRJ_IMPORTER_PERM" + , "PJR_TML_PERM" , "DOC_TML_READ_PERM" , "CFG_PERM" , "SUBM_PERM" diff --git a/wizard-server/src/Wizard/Database/Migration/Production/Migration_0061_news/Migration.hs b/wizard-server/src/Wizard/Database/Migration/Production/Migration_0061_news/Migration.hs index 12449a88a..4de73250b 100644 --- a/wizard-server/src/Wizard/Database/Migration/Production/Migration_0061_news/Migration.hs +++ b/wizard-server/src/Wizard/Database/Migration/Production/Migration_0061_news/Migration.hs @@ -14,7 +14,162 @@ meta = MigrationMeta {mmNumber = 61, mmName = "Add user news", mmDescription = " migrate :: Pool Connection -> LoggingT IO (Maybe Error) migrate dbPool = do + addLastSeeNewsIdColumnToUser dbPool + renameQuestionnaireToProject dbPool + renameAuditLogsAndPersistentCommands dbPool + +addLastSeeNewsIdColumnToUser dbPool = do let sql = "ALTER TABLE user_entity ADD COLUMN last_seen_news_id varchar;" let action conn = execute_ conn sql liftIO $ withResource dbPool action return Nothing + +renameQuestionnaireToProject dbPool = do + let sql = + "ALTER TABLE questionnaire_action RENAME TO project_action; \ + \ALTER TABLE project_action RENAME CONSTRAINT questionnaire_action_pk TO project_action_pk; \ + \ALTER TABLE project_action RENAME CONSTRAINT questionnaire_action_tenant_uuid_fk TO project_action_tenant_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire RENAME TO project; \ + \ALTER TABLE project RENAME CONSTRAINT questionnaire_pk TO project_pk; \ + \ALTER TABLE project RENAME CONSTRAINT questionnaire_created_by_fk TO project_created_by_fk; \ + \ALTER TABLE project RENAME CONSTRAINT questionnaire_document_template_id_fk TO project_document_template_id_fk; \ + \ALTER TABLE project RENAME CONSTRAINT questionnaire_knowledge_model_package_id_fk TO project_knowledge_model_package_id_fk; \ + \ALTER TABLE project RENAME CONSTRAINT questionnaire_tenant_uuid_fk TO project_tenant_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire_importer RENAME TO project_importer; \ + \ALTER TABLE project_importer RENAME CONSTRAINT questionnaire_importer_pk TO project_importer_pk; \ + \ALTER TABLE project_importer RENAME CONSTRAINT questionnaire_importer_tenant_uuid_fk TO project_importer_tenant_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire_event RENAME TO project_event; \ + \ALTER TABLE project_event RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE project_event RENAME CONSTRAINT questionnaire_event_pk TO project_event_pk; \ + \ALTER TABLE project_event RENAME CONSTRAINT questionnaire_event_created_by_fk TO project_event_created_by_fk; \ + \ALTER TABLE project_event RENAME CONSTRAINT questionnaire_event_tenant_uuid_fk TO project_event_tenant_uuid_fk; \ + \ALTER TABLE project_event RENAME CONSTRAINT questionnaire_event_questionnaire_uuid_fk TO project_event_project_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire_migration RENAME TO project_migration; \ + \ALTER TABLE project_migration RENAME COLUMN old_questionnaire_uuid TO old_project_uuid; \ + \ALTER TABLE project_migration RENAME COLUMN new_questionnaire_uuid TO new_project_uuid; \ + \ALTER TABLE project_migration RENAME CONSTRAINT questionnaire_migration_pk TO project_migration_pk; \ + \ALTER TABLE project_migration RENAME CONSTRAINT questionnaire_migration_new_questionnaire_uuid_fk TO project_migration_new_project_uuid_fk; \ + \ALTER TABLE project_migration RENAME CONSTRAINT questionnaire_migration_old_questionnaire_uuid_fk TO project_migration_old_project_uuid_fk; \ + \ALTER TABLE project_migration RENAME CONSTRAINT questionnaire_migration_tenant_uuid_fk TO project_migration_tenant_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire_file RENAME TO project_file; \ + \ALTER TABLE project_file RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE project_file RENAME CONSTRAINT questionnaire_file_pk TO project_file_pk; \ + \ALTER TABLE project_file RENAME CONSTRAINT questionnaire_file_questionnaire_uuid_fk TO project_file_project_uuid_fk; \ + \ALTER TABLE project_file RENAME CONSTRAINT questionnaire_file_created_by_fk TO project_file_created_by_fk; \ + \ALTER TABLE project_file RENAME CONSTRAINT questionnaire_file_tenant_uuid_fk TO project_file_tenant_uuid_fk; \ + \ALTER TRIGGER trigger_on_after_questionnaire_file_delete ON project_file RENAME TO trigger_on_after_project_file_delete; \ + \ALTER FUNCTION create_persistent_command_from_questionnaire_file_delete() RENAME TO create_persistent_command_from_project_file_delete; \ + \ \ + \ALTER TABLE questionnaire_perm_user RENAME TO project_perm_user; \ + \ALTER TABLE project_perm_user RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE project_perm_user RENAME CONSTRAINT questionnaire_perm_user_pk TO project_perm_user_pk; \ + \ALTER TABLE project_perm_user RENAME CONSTRAINT questionnaire_perm_user_questionnaire_uuid_fk TO project_perm_user_project_uuid_fk; \ + \ALTER TABLE project_perm_user RENAME CONSTRAINT questionnaire_perm_user_tenant_uuid_fk TO project_perm_user_tenant_uuid_fk; \ + \ALTER TABLE project_perm_user RENAME CONSTRAINT questionnaire_perm_user_user_uuid_fk TO project_perm_user_user_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire_perm_group RENAME TO project_perm_group; \ + \ALTER TABLE project_perm_group RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE project_perm_group RENAME CONSTRAINT questionnaire_perm_group_pk TO project_perm_group_pk; \ + \ALTER TABLE project_perm_group RENAME CONSTRAINT questionnaire_perm_group_questionnaire_uuid_fk TO project_perm_group_project_uuid_fk; \ + \ALTER TABLE project_perm_group RENAME CONSTRAINT questionnaire_perm_group_tenant_uuid_fk TO project_perm_group_tenant_uuid_fk; \ + \ALTER TABLE project_perm_group RENAME CONSTRAINT questionnaire_perm_group_user_group_uuid_fk TO project_perm_group_user_group_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire_version RENAME TO project_version; \ + \ALTER TABLE project_version RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE project_version RENAME CONSTRAINT questionnaire_version_pk TO project_version_pk; \ + \ALTER TABLE project_version RENAME CONSTRAINT questionnaire_version_event_uuid_fk TO project_version_event_uuid_fk; \ + \ALTER TABLE project_version RENAME CONSTRAINT questionnaire_version_created_by_fk TO project_version_created_by_fk; \ + \ALTER TABLE project_version RENAME CONSTRAINT questionnaire_version_questionnaire_uuid_fk TO project_version_questionnaire_uuid_fk; \ + \ALTER TABLE project_version RENAME CONSTRAINT questionnaire_version_tenant_uuid_fk TO project_version_tenant_uuid_fk; \ + \ \ + \ALTER TABLE questionnaire_comment_thread RENAME TO project_comment_thread; \ + \ALTER TABLE project_comment_thread RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE project_comment_thread RENAME CONSTRAINT questionnaire_comment_thread_pk TO project_comment_thread_pk; \ + \ALTER TABLE project_comment_thread RENAME CONSTRAINT questionnaire_comment_thread_assigned_by TO project_comment_thread_assigned_by; \ + \ALTER TABLE project_comment_thread RENAME CONSTRAINT questionnaire_comment_thread_assigned_to TO project_comment_thread_assigned_to; \ + \ALTER TABLE project_comment_thread RENAME CONSTRAINT questionnaire_comment_thread_questionnaire_uuid TO project_comment_thread_questionnaire_uuid; \ + \ALTER TABLE project_comment_thread RENAME CONSTRAINT questionnaire_comment_thread_tenant_uuid TO project_comment_thread_tenant_uuid; \ + \ \ + \ALTER TABLE questionnaire_comment RENAME TO project_comment; \ + \ALTER TABLE project_comment RENAME CONSTRAINT questionnaire_comment_pk TO project_comment_pk; \ + \ALTER TABLE project_comment RENAME CONSTRAINT questionnaire_comment_comment_thread_uuid TO project_comment_comment_thread_uuid; \ + \ALTER TABLE project_comment RENAME CONSTRAINT questionnaire_comment_tenant_uuid TO project_comment_tenant_uuid; \ + \ \ + \ALTER TABLE config_questionnaire RENAME TO config_project; \ + \ALTER TABLE config_project RENAME CONSTRAINT config_questionnaire_pk TO config_project_pk; \ + \ALTER TABLE config_project RENAME CONSTRAINT config_questionnaire_tenant_uuid_fk TO config_project_tenant_uuid_fk; \ + \ \ + \ALTER TABLE document RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE document RENAME COLUMN questionnaire_event_uuid TO project_event_uuid; \ + \ALTER TABLE document RENAME COLUMN questionnaire_replies_hash TO project_replies_hash; \ + \ALTER TABLE document RENAME CONSTRAINT document_questionnaire_uuid_fk TO document_project_uuid_fk; \ + \ \ + \ALTER TABLE document_template_draft_data RENAME COLUMN questionnaire_uuid TO project_uuid; \ + \ALTER TABLE document_template_draft_data RENAME CONSTRAINT document_template_draft_data_questionnaire_uuid_fk TO document_template_draft_data_project_uuid_fk; \ + \ \ + \ALTER TABLE tenant_limit_bundle RENAME COLUMN questionnaires TO projects; \ + \ \ + \UPDATE config_project SET visibility_default_value = 'PrivateProjectVisibility' WHERE visibility_default_value = 'PrivateQuestionnaire'; \ + \UPDATE config_project SET visibility_default_value = 'VisibleViewProjectVisibility' WHERE visibility_default_value = 'VisibleViewQuestionnaire'; \ + \UPDATE config_project SET visibility_default_value = 'VisibleCommentProjectVisibility' WHERE visibility_default_value = 'VisibleCommentQuestionnaire'; \ + \UPDATE config_project SET visibility_default_value = 'VisibleEditProjectVisibility' WHERE visibility_default_value = 'VisibleEditQuestionnaire'; \ + \ \ + \UPDATE config_project SET sharing_default_value = 'RestrictedProjectSharing' WHERE sharing_default_value = 'RestrictedQuestionnaire'; \ + \UPDATE config_project SET sharing_default_value = 'AnyoneWithLinkViewProjectSharing' WHERE sharing_default_value = 'AnyoneWithLinkViewQuestionnaire'; \ + \UPDATE config_project SET sharing_default_value = 'AnyoneWithLinkCommentProjectSharing' WHERE sharing_default_value = 'AnyoneWithLinkCommentQuestionnaire'; \ + \UPDATE config_project SET sharing_default_value = 'AnyoneWithLinkEditProjectSharing' WHERE sharing_default_value = 'AnyoneWithLinkEditQuestionnaire'; \ + \ \ + \UPDATE config_project SET creation = 'CustomProjectCreation' WHERE creation = 'CustomQuestionnaireCreation'; \ + \UPDATE config_project SET creation = 'TemplateProjectCreation' WHERE creation = 'TemplateQuestionnaireCreation'; \ + \UPDATE config_project SET creation = 'TemplateAndCustomProjectCreation' WHERE creation = 'TemplateAndCustomQuestionnaireCreation'; \ + \ \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_PERM', 'PRJ_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_IMPORTER_PERM', 'PRJ_IMPORTER_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_TML_PERM', 'PRJ_TML_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_ACTION_PERM', 'PRJ_ACTION_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_FILE_PERM', 'PRJ_FILE_PERM')::varchar[]; \ + \ \ + \UPDATE project SET visibility = 'PrivateProjectVisibility' WHERE visibility = 'PrivateQuestionnaire'; \ + \UPDATE project SET visibility = 'VisibleViewProjectVisibility' WHERE visibility = 'VisibleViewQuestionnaire'; \ + \UPDATE project SET visibility = 'VisibleCommentProjectVisibility' WHERE visibility = 'VisibleCommentQuestionnaire'; \ + \UPDATE project SET visibility = 'VisibleEditProjectVisibility' WHERE visibility = 'VisibleEditQuestionnaire'; \ + \ \ + \UPDATE project SET sharing = 'RestrictedProjectSharing' WHERE sharing = 'RestrictedQuestionnaire'; \ + \UPDATE project SET sharing = 'AnyoneWithLinkViewProjectSharing' WHERE sharing = 'AnyoneWithLinkViewQuestionnaire'; \ + \UPDATE project SET sharing = 'AnyoneWithLinkCommentProjectSharing' WHERE sharing = 'AnyoneWithLinkCommentQuestionnaire'; \ + \UPDATE project SET sharing = 'AnyoneWithLinkEditProjectSharing' WHERE sharing = 'AnyoneWithLinkEditQuestionnaire'; \ + \ \ + \ALTER TYPE questionnaire_event_type RENAME TO project_event_type; \ + \ \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_PERM', 'PRJ_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_IMPORTER_PERM', 'PRJ_IMPORTER_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_TML_PERM', 'PRJ_TML_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_ACTION_PERM', 'PRJ_ACTION_PERM')::varchar[]; \ + \UPDATE user_entity set permissions = replace(permissions::varchar, 'QTN_FILE_PERM', 'PRJ_FILE_PERM')::varchar[];" + let action conn = execute_ conn sql + liftIO $ withResource dbPool action + return Nothing + +renameAuditLogsAndPersistentCommands dbPool = do + let sql = + "UPDATE persistent_command SET component = 'project', function = 'createProjects' WHERE component = 'questionnaire' AND function = 'createQuestionnaires'; \ + \UPDATE persistent_command SET component = 'project_file' WHERE component = 'questionnaire_file'; \ + \ \ + \UPDATE audit SET component = 'tenant_config' WHERE component = 'app_config'; \ + \UPDATE audit SET component = 'knowledge_model_editor' WHERE component = 'branch'; \ + \UPDATE audit SET component = 'knowledge_model_migration' WHERE component = 'knowledge_model.migration'; \ + \UPDATE audit SET component = 'knowledge_model_package' WHERE component = 'package'; \ + \UPDATE audit SET component = 'knowledge_model_bundle' WHERE component = 'package_bundle'; \ + \UPDATE audit SET component = 'project' WHERE component = 'questionnaire'; \ + \UPDATE audit SET component = 'project_importer' WHERE component = 'questionnaireImporter'; \ + \UPDATE audit SET component = 'project_migration' WHERE component = 'questionnaire.migration'; \ + \UPDATE audit SET component = 'document_template_bundle' WHERE component = 'template_bundle'; \ + \UPDATE audit SET action = 'createByAdmin' WHERE action = 'create_by_admin';" + let action conn = execute_ conn sql + liftIO $ withResource dbPool action + return Nothing diff --git a/wizard-server/src/Wizard/Integration/Http/GitHub/RequestMapper.hs b/wizard-server/src/Wizard/Integration/Http/GitHub/RequestMapper.hs index 66d11fada..0afa46fec 100644 --- a/wizard-server/src/Wizard/Integration/Http/GitHub/RequestMapper.hs +++ b/wizard-server/src/Wizard/Integration/Http/GitHub/RequestMapper.hs @@ -15,7 +15,7 @@ import Wizard.Model.Config.ServerConfig import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Util.Interpolation (interpolateString) -toGetIssuesRequest :: ServerConfigFeedback -> TenantConfigQuestionnaireFeedback -> HttpRequest +toGetIssuesRequest :: ServerConfigFeedback -> TenantConfigProjectFeedback -> HttpRequest toGetIssuesRequest serverConfig tenantConfig = let variables = M.fromList [("owner", tenantConfig.owner), ("repo", tenantConfig.repo)] in HttpRequest @@ -28,7 +28,7 @@ toGetIssuesRequest serverConfig tenantConfig = , multipart = Nothing } -toCreateIssueRequest :: ServerConfigFeedback -> TenantConfigQuestionnaireFeedback -> String -> U.UUID -> String -> String -> Maybe U.UUID -> HttpRequest +toCreateIssueRequest :: ServerConfigFeedback -> TenantConfigProjectFeedback -> String -> U.UUID -> String -> String -> Maybe U.UUID -> HttpRequest toCreateIssueRequest serverConfig tenantConfig pkgId questionUuid title content mCreatedBy = let variables = M.fromList [("owner", tenantConfig.owner), ("repo", tenantConfig.repo)] in HttpRequest diff --git a/wizard-server/src/Wizard/Integration/Http/GitHub/Runner.hs b/wizard-server/src/Wizard/Integration/Http/GitHub/Runner.hs index ef07494b7..a16d586b5 100644 --- a/wizard-server/src/Wizard/Integration/Http/GitHub/Runner.hs +++ b/wizard-server/src/Wizard/Integration/Http/GitHub/Runner.hs @@ -16,18 +16,18 @@ import Wizard.Service.Tenant.Config.ConfigService getIssues :: AppContextM [IssueIDTO] getIssues = do serverConfig <- asks serverConfig - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - runRequest (toGetIssuesRequest serverConfig.feedback tcQuestionnaire.feedback) toGetIssuesResponse + tcProject <- getCurrentTenantConfigProject + runRequest (toGetIssuesRequest serverConfig.feedback tcProject.feedback) toGetIssuesResponse createIssue :: String -> U.UUID -> String -> String -> AppContextM IssueIDTO createIssue pkgId questionUuid title content = do serverConfig <- asks serverConfig mCurrentUser <- asks currentUser - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire + tcProject <- getCurrentTenantConfigProject runRequest ( toCreateIssueRequest serverConfig.feedback - tcQuestionnaire.feedback + tcProject.feedback pkgId questionUuid title diff --git a/wizard-server/src/Wizard/Integration/Http/Registry/RequestMapper.hs b/wizard-server/src/Wizard/Integration/Http/Registry/RequestMapper.hs index 8db5e2b9b..29113838d 100644 --- a/wizard-server/src/Wizard/Integration/Http/Registry/RequestMapper.hs +++ b/wizard-server/src/Wizard/Integration/Http/Registry/RequestMapper.hs @@ -63,7 +63,7 @@ toRetrievePackagesRequest tenantConfig iStat = mTokenHeader xUserCountHeaderName xKnowledgeModelPackageCountHeaderName - xQtnCountHeaderName + xProjectCountHeaderName xKnowledgeModelEditorCountHeaderName xDocCountHeaderName xTmlCountHeaderName @@ -74,7 +74,7 @@ toRetrievePackagesRequest tenantConfig iStat = mTokenHeader = Just $ "Bearer " ++ tenantConfig.token xUserCountHeaderName = Just . show $ iStat.userCount xKnowledgeModelPackageCountHeaderName = Just . show $ iStat.pkgCount - xQtnCountHeaderName = Just . show $ iStat.qtnCount + xProjectCountHeaderName = Just . show $ iStat.prjCount xKnowledgeModelEditorCountHeaderName = Just . show $ iStat.knowledgeModelEditorCount xDocCountHeaderName = Just . show $ iStat.docCount xTmlCountHeaderName = Just . show $ iStat.tmlCount diff --git a/wizard-server/src/Wizard/Localization/Messages/Internal.hs b/wizard-server/src/Wizard/Localization/Messages/Internal.hs index c0b52a85a..0607d6773 100644 --- a/wizard-server/src/Wizard/Localization/Messages/Internal.hs +++ b/wizard-server/src/Wizard/Localization/Messages/Internal.hs @@ -16,9 +16,9 @@ _ERROR_SERVICE_MIGRATION_METAMODEL__FAILED_TO_MIGRATE_ENTITIES entityName = "Fai _ERROR_SERVICE_MIGRATION_METAMODEL__FAILED_CONVERT_TO_NEW_METAMODEL entityName = "Failed to convert entity ('" ++ entityName ++ "') to new metamodel" --- Questionnaire -_ERROR_SERVICE_QTN__INVITATION_EMAIL_NOT_SENT = - "The questionnaire invitation email could not be sent. Please contact administrator." +-- Project +_ERROR_SERVICE_PROJECT__INVITATION_EMAIL_NOT_SENT = + "The project invitation email could not be sent. Please contact administrator." -- Token _ERROR_SERVICE_TOKEN__UNABLE_TO_GET_TOKEN = "Unable to get token" diff --git a/wizard-server/src/Wizard/Localization/Messages/Public.hs b/wizard-server/src/Wizard/Localization/Messages/Public.hs index 01ea15d5f..d341d7966 100644 --- a/wizard-server/src/Wizard/Localization/Messages/Public.hs +++ b/wizard-server/src/Wizard/Localization/Messages/Public.hs @@ -20,8 +20,8 @@ _ERROR_VALIDATION__DOC_TML_FILE_OR_ASSET_UNIQUENESS = _ERROR_VALIDATION__KM_MIGRATION_UNIQUENESS = LocaleRecord "error.validation.km_migration_uniqueness" "Migration of Knowledge Model already exists" [] -_ERROR_VALIDATION__QTN_MIGRATION_UNIQUENESS = - LocaleRecord "error.validation.qtn_migration_uniqueness" "Migration of Questionnaire already exists" [] +_ERROR_VALIDATION__PROJECT_MIGRATION_UNIQUENESS = + LocaleRecord "error.validation.project_migration_uniqueness" "Project Migration already exists" [] _ERROR_VALIDATION__USER_EMAIL_UNIQUENESS email = LocaleRecord "error.validation.user_email_uniqueness" "User (email: '%s') already exists" [email] @@ -64,12 +64,12 @@ _ERROR_VALIDATION__PKG_UNSUPPORTED_METAMODEL_VERSION pkgMetamodelVersion appPkgM _ERROR_VALIDATION__DOC_TML_UNSUPPORTED_STATE tmlId phase = LocaleRecord "error.validation.doc_tml_unsupported_state" "You can not move '%s' into the following phase: %s" [tmlId, phase] --- Questionnaire File -_ERROR_VALIDATION__QUESTIONNAIRE_FILE_SIZE_EXCEEDS_LIMIT fileSize maxFileSize = - LocaleRecord "error.validation.questionnaire_file_size_exceeds_limit" "File exceeds the maximum allowed size (file: %s, maximum: %s)" [show fileSize, show maxFileSize] +-- Project File +_ERROR_VALIDATION__PROJECT_FILE_SIZE_EXCEEDS_LIMIT fileSize maxFileSize = + LocaleRecord "error.validation.project_file_size_exceeds_limit" "File exceeds the maximum allowed size (file: %s, maximum: %s)" [show fileSize, show maxFileSize] -_ERROR_VALIDATION__QUESTIONNAIRE_FILE_QUESTION_ABSENCE_OR_WRONG_TYPE = - LocaleRecord "error.validation.questionnaire_file_question_absence_or_wrong_type" "The question either doesn't exist or is not a File Question" [] +_ERROR_VALIDATION__PROJECT_FILE_QUESTION_ABSENCE_OR_WRONG_TYPE = + LocaleRecord "error.validation.project_file_question_absence_or_wrong_type" "The question either doesn't exist or is not a File Question" [] -- -------------------------------------- -- SERVICE @@ -77,8 +77,8 @@ _ERROR_VALIDATION__QUESTIONNAIRE_FILE_QUESTION_ABSENCE_OR_WRONG_TYPE = _ERROR_SERVICE_DOCUMENT__TEMPLATE_OR_FORMAT_NOT_SET_UP = LocaleRecord "error.service.template.template_or_format_not_set_up" "DocumentTemplate or format is not set up" [] -_ERROR_SERVICE_DOCUMENT__QUESTIONNAIRE_OR_FORMAT_NOT_SET_UP = - LocaleRecord "error.service.template.questionnaire_or_format_not_set_up" "Questionnaire or format is not set up" [] +_ERROR_SERVICE_DOCUMENT__PROJECT_OR_FORMAT_NOT_SET_UP = + LocaleRecord "error.service.template.project_or_format_not_set_up" "Project or format is not set up" [] -- Auth _ERROR_SERVICE_AUTH__SERVICE_NOT_DEFINED authId = @@ -88,11 +88,11 @@ _ERROR_SERVICE_AUTH__SERVICE_NOT_DEFINED authId = _ERROR_SERVICE_KNOWLEDGE_MODEL_EDITOR__KM_MIGRATION_EXISTS = LocaleRecord "error.service.knowledge_model_editor.km_migration_exists" "You can't publish the KM editor when there is ongoing KM migration" [] -_ERROR_SERVICE_KNOWLEDGE_MODEL_EDITOR__COLLABORATION__FORCE_DISCONNECT qtnUuid = +_ERROR_SERVICE_KNOWLEDGE_MODEL_EDITOR__COLLABORATION__FORCE_DISCONNECT projectUuid = LocaleRecord "error.service.knowledge_model_editor.collaboration.force_disconnect" "Knowledge Model Editor ('%s') dramatically changed its state. Therefore, users has to be disconnected" - [qtnUuid] + [projectUuid] -- Locale Bundle _ERROR_SERVICE_LB__PULL_NON_EXISTING_LOCALE lclId = @@ -152,33 +152,33 @@ _ERROR_SERVICE_PB__PULL_NON_EXISTING_PKG pkgId = "Desired knowledge model ('%s') wasn't found in Registry" [pkgId] --- Questionnaire -_ERROR_SERVICE_QTN__QTN_CANT_BE_DELETED_BECAUSE_IT_IS_USED_IN_MIGRATION = +-- Project +_ERROR_SERVICE_PROJECT__PROJECT_CANT_BE_DELETED_BECAUSE_IT_IS_USED_IN_MIGRATION = LocaleRecord - "error.service.qtn.qtn_cant_be_deleted_because_it_is_used_in_migration" - "Questionnaire can't be deleted because it's used in some questionnaire migration" + "error.service.project.project_cant_be_deleted_because_it_is_used_in_migration" + "Project can't be deleted because it's used in some project migration" [] -_ERROR_SERVICE_QTN_COLLABORATION__FORCE_DISCONNECT qtnUuid = +_ERROR_SERVICE_PROJECT_COLLABORATION__FORCE_DISCONNECT projectUuid = LocaleRecord - "error.service.qtn.collaboration.force_disconnect" - "Questionnaire ('%s') dramatically changed its state. Therefore, users has to be disconnected" - [qtnUuid] + "error.service.project.collaboration.force_disconnect" + "Project ('%s') dramatically changed its state. Therefore, users has to be disconnected" + [projectUuid] -_ERROR_SERVICE_QTN_VERSION__NON_EXISTENT_EVENT_UUID eventUuid = +_ERROR_SERVICE_PROJECT_VERSION__NON_EXISTENT_EVENT_UUID eventUuid = LocaleRecord - "error.service.qtn.version.non_existent_event_uuid" + "error.service.project.version.non_existent_event_uuid" "You can't create version for non-existent event (eventUuid: '%s')" [eventUuid] -_ERROR_SERVICE_QTN_VERSION__VERSION_UNIQUENESS eventUuid = +_ERROR_SERVICE_PROJECT_VERSION__VERSION_UNIQUENESS eventUuid = LocaleRecord - "error.service.qtn.version.version_uniqueness" + "error.service.project.version.version_uniqueness" "There is already a version for the event (eventUuid: '%s')" [eventUuid] -_ERROR_SERVICE_QTN__UNABLE_TO_GENERATE_DOCUMENT_PREVIEW workerLog = - LocaleRecord "error.service.qtn.unable_to_generate_document_preview" "%s" [fromMaybe "no log provided" workerLog] +_ERROR_SERVICE_PROJECT__UNABLE_TO_GENERATE_DOCUMENT_PREVIEW workerLog = + LocaleRecord "error.service.project.unable_to_generate_document_preview" "%s" [fromMaybe "no log provided" workerLog] -- DocumentTemplate Bundle _ERROR_SERVICE_TB__PULL_NON_EXISTING_TML tmlId = diff --git a/wizard-server/src/Wizard/Model/Cache/ServerCache.hs b/wizard-server/src/Wizard/Model/Cache/ServerCache.hs index 874580529..e12768d8d 100644 --- a/wizard-server/src/Wizard/Model/Cache/ServerCache.hs +++ b/wizard-server/src/Wizard/Model/Cache/ServerCache.hs @@ -8,7 +8,7 @@ import WizardLib.Public.Model.User.UserToken data ServerCache = ServerCache { knowledgeModelEditorWebsocket :: C.Cache Int WebsocketRecord - , questionnaireWebsocket :: C.Cache Int WebsocketRecord + , projectWebsocket :: C.Cache Int WebsocketRecord , user :: C.Cache Int User , userToken :: C.Cache Int UserToken } diff --git a/wizard-server/src/Wizard/Model/Common/Lens.hs b/wizard-server/src/Wizard/Model/Common/Lens.hs index eef6d3cb1..6b21bc952 100644 --- a/wizard-server/src/Wizard/Model/Common/Lens.hs +++ b/wizard-server/src/Wizard/Model/Common/Lens.hs @@ -2,6 +2,6 @@ module Wizard.Model.Common.Lens where import qualified Data.UUID as U -class HasQuestionnaireUuid' entity where - getQuestionnaireUuid :: entity -> U.UUID - setQuestionnaireUuid :: entity -> U.UUID -> entity +class HasProjectUuid' entity where + getProjectUuid :: entity -> U.UUID + setProjectUuid :: entity -> U.UUID -> entity diff --git a/wizard-server/src/Wizard/Model/Config/ServerConfig.hs b/wizard-server/src/Wizard/Model/Config/ServerConfig.hs index 19d583248..2c5ecfdd4 100644 --- a/wizard-server/src/Wizard/Model/Config/ServerConfig.hs +++ b/wizard-server/src/Wizard/Model/Config/ServerConfig.hs @@ -18,7 +18,7 @@ data ServerConfig = ServerConfig , document :: ServerConfigDocument , feedback :: ServerConfigFeedback , knowledgeModelEditor :: ServerConfigKnowledgeModelEditor - , questionnaire :: ServerConfigQuestionnaire + , project :: ServerConfigProject , temporaryFile :: ServerConfigTemporaryFile , userToken :: ServerConfigUserToken , analyticalMails :: ServerConfigAnalyticalMails @@ -80,7 +80,7 @@ data ServerConfigKnowledgeModelEditor = ServerConfigKnowledgeModelEditor } deriving (Generic, Show) -data ServerConfigQuestionnaire = ServerConfigQuestionnaire +data ServerConfigProject = ServerConfigProject { clean :: ServerConfigCronWorker , squash :: ServerConfigCronWorker , assigneeNotification :: ServerConfigCronWorker @@ -102,7 +102,7 @@ data ServerConfigSignalBridge = ServerConfigSignalBridge { enabled :: Bool , updatePermsArn :: String , updateUserGroupArn :: String - , setQuestionnaireArn :: String + , setProjectArn :: String , addFileArn :: String , logOutAllArn :: String } diff --git a/wizard-server/src/Wizard/Model/Config/ServerConfigDM.hs b/wizard-server/src/Wizard/Model/Config/ServerConfigDM.hs index f98fec2a0..67b6d57e5 100644 --- a/wizard-server/src/Wizard/Model/Config/ServerConfigDM.hs +++ b/wizard-server/src/Wizard/Model/Config/ServerConfigDM.hs @@ -21,7 +21,7 @@ defaultConfig = , document = defaultDocument , feedback = defaultFeedback , knowledgeModelEditor = defaultKnowledgeModelEditor - , questionnaire = defaultQuestionnaire + , project = defaultProject , temporaryFile = defaultTemporaryFile , userToken = defaultUserToken , analyticalMails = defaultAnalyticalMails @@ -56,11 +56,11 @@ defaultRoles = , "KM_PUBLISH_PERM" , "PM_READ_PERM" , "PM_WRITE_PERM" - , "QTN_PERM" - , "QTN_ACTION_PERM" - , "QTN_FILE_PERM" - , "QTN_IMPORTER_PERM" - , "QTN_TML_PERM" + , "PRJ_PERM" + , "PRJ_ACTION_PERM" + , "PRJ_FILE_PERM" + , "PRJ_IMPORTER_PERM" + , "PJR_TML_PERM" , "DOC_TML_READ_PERM" , "CFG_PERM" , "SUBM_PERM" @@ -74,15 +74,15 @@ defaultRoles = , "KM_PUBLISH_PERM" , "PM_READ_PERM" , "PM_WRITE_PERM" - , "QTN_PERM" - , "QTN_ACTION_PERM" - , "QTN_IMPORTER_PERM" - , "QTN_TML_PERM" + , "PRJ_PERM" + , "PRJ_ACTION_PERM" + , "PRJ_IMPORTER_PERM" + , "PJR_TML_PERM" , "DOC_TML_READ_PERM" , "SUBM_PERM" , "DOC_TML_WRITE_PERM" ] - , researcher = ["PM_READ_PERM", "QTN_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] + , researcher = ["PM_READ_PERM", "PRJ_PERM", "DOC_TML_READ_PERM", "SUBM_PERM"] } defaultRegistrySyncJob :: ServerConfigCronWorker @@ -135,24 +135,24 @@ defaultKnowledgeModelEditorSquash :: ServerConfigCronWorker defaultKnowledgeModelEditorSquash = ServerConfigCronWorker {enabled = True, cron = squashKnowledgeModelEditorEventsWorker.cronDefault} -defaultQuestionnaire :: ServerConfigQuestionnaire -defaultQuestionnaire = - ServerConfigQuestionnaire - { clean = defaultQuestionnaireClean - , squash = defaultQuestionnaireSquash - , assigneeNotification = defaultQuestionnaireAssigneeNotification +defaultProject :: ServerConfigProject +defaultProject = + ServerConfigProject + { clean = defaultProjectClean + , squash = defaultProjectSquash + , assigneeNotification = defaultProjectAssigneeNotification } -defaultQuestionnaireClean :: ServerConfigCronWorker -defaultQuestionnaireClean = - ServerConfigCronWorker {enabled = True, cron = cleanQuestionnaireWorker.cronDefault} +defaultProjectClean :: ServerConfigCronWorker +defaultProjectClean = + ServerConfigCronWorker {enabled = True, cron = cleanProjectWorker.cronDefault} -defaultQuestionnaireSquash :: ServerConfigCronWorker -defaultQuestionnaireSquash = - ServerConfigCronWorker {enabled = True, cron = squashQuestionnaireEventsWorker.cronDefault} +defaultProjectSquash :: ServerConfigCronWorker +defaultProjectSquash = + ServerConfigCronWorker {enabled = True, cron = squashProjectEventsWorker.cronDefault} -defaultQuestionnaireAssigneeNotification :: ServerConfigCronWorker -defaultQuestionnaireAssigneeNotification = +defaultProjectAssigneeNotification :: ServerConfigCronWorker +defaultProjectAssigneeNotification = ServerConfigCronWorker {enabled = True, cron = assigneeNotificationWorker.cronDefault} defaultTemporaryFile :: ServerConfigTemporaryFile @@ -179,7 +179,7 @@ defaultSignalBridge = { enabled = False , updatePermsArn = "" , updateUserGroupArn = "" - , setQuestionnaireArn = "" + , setProjectArn = "" , addFileArn = "" , logOutAllArn = "" } diff --git a/wizard-server/src/Wizard/Model/Config/ServerConfigIM.hs b/wizard-server/src/Wizard/Model/Config/ServerConfigIM.hs index 389e79672..a6deb8905 100644 --- a/wizard-server/src/Wizard/Model/Config/ServerConfigIM.hs +++ b/wizard-server/src/Wizard/Model/Config/ServerConfigIM.hs @@ -18,7 +18,7 @@ instance FromEnv ServerConfig where document <- applyEnv serverConfig.document feedback <- applyEnv serverConfig.feedback knowledgeModelEditor <- applyEnv serverConfig.knowledgeModelEditor - questionnaire <- applyEnv serverConfig.questionnaire + project <- applyEnv serverConfig.project temporaryFile <- applyEnv serverConfig.temporaryFile userToken <- applyEnv serverConfig.userToken analyticalMails <- applyEnv serverConfig.analyticalMails @@ -98,16 +98,16 @@ instance FromEnv ServerConfigKnowledgeModelEditor where , \c -> applyStringEnvVariable "KNOWLEDGE_MODEL_EDITOR_SQUASH_CRON" c.squash.cron (\x -> c {squash = c.squash {cron = x}} :: ServerConfigKnowledgeModelEditor) ] -instance FromEnv ServerConfigQuestionnaire where +instance FromEnv ServerConfigProject where applyEnv serverConfig = applyEnvVariables serverConfig - [ \c -> applyEnvVariable "QUESTIONNAIRE_CLEAN_ENABLED" c.clean.enabled (\x -> c {clean = c.clean {enabled = x}} :: ServerConfigQuestionnaire) - , \c -> applyStringEnvVariable "QUESTIONNAIRE_CLEAN_CRON" c.clean.cron (\x -> c {clean = c.clean {cron = x}} :: ServerConfigQuestionnaire) - , \c -> applyEnvVariable "QUESTIONNAIRE_SQUASH_ENABLED" c.squash.enabled (\x -> c {squash = c.squash {enabled = x}} :: ServerConfigQuestionnaire) - , \c -> applyStringEnvVariable "QUESTIONNAIRE_SQUASH_CRON" c.squash.cron (\x -> c {squash = c.squash {cron = x}} :: ServerConfigQuestionnaire) - , \c -> applyEnvVariable "QUESTIONNAIRE_ASSIGNEE_NOTIFICATION_ENABLED" c.assigneeNotification.enabled (\x -> c {assigneeNotification = c.assigneeNotification {enabled = x}} :: ServerConfigQuestionnaire) - , \c -> applyStringEnvVariable "QUESTIONNAIRE_ASSIGNEE_NOTIFICATION_CRON" c.assigneeNotification.cron (\x -> c {assigneeNotification = c.assigneeNotification {cron = x}} :: ServerConfigQuestionnaire) + [ \c -> applyEnvVariable "PROJECT_CLEAN_ENABLED" c.clean.enabled (\x -> c {clean = c.clean {enabled = x}} :: ServerConfigProject) + , \c -> applyStringEnvVariable "PROJECT_CLEAN_CRON" c.clean.cron (\x -> c {clean = c.clean {cron = x}} :: ServerConfigProject) + , \c -> applyEnvVariable "PROJECT_SQUASH_ENABLED" c.squash.enabled (\x -> c {squash = c.squash {enabled = x}} :: ServerConfigProject) + , \c -> applyStringEnvVariable "PROJECT_SQUASH_CRON" c.squash.cron (\x -> c {squash = c.squash {cron = x}} :: ServerConfigProject) + , \c -> applyEnvVariable "PROJECT_ASSIGNEE_NOTIFICATION_ENABLED" c.assigneeNotification.enabled (\x -> c {assigneeNotification = c.assigneeNotification {enabled = x}} :: ServerConfigProject) + , \c -> applyStringEnvVariable "PROJECT_ASSIGNEE_NOTIFICATION_CRON" c.assigneeNotification.cron (\x -> c {assigneeNotification = c.assigneeNotification {cron = x}} :: ServerConfigProject) ] instance FromEnv ServerConfigTemporaryFile where @@ -135,7 +135,7 @@ instance FromEnv ServerConfigSignalBridge where [ \c -> applyEnvVariable "SIGNAL_BRIDGE_ENABLED" c.enabled (\x -> c {enabled = x} :: ServerConfigSignalBridge) , \c -> applyStringEnvVariable "SIGNAL_BRIDGE_UPDATE_PERMS_ARN" c.updatePermsArn (\x -> c {updatePermsArn = x} :: ServerConfigSignalBridge) , \c -> applyStringEnvVariable "SIGNAL_BRIDGE_UPDATE_USER_GROUP_ARN" c.updateUserGroupArn (\x -> c {updateUserGroupArn = x} :: ServerConfigSignalBridge) - , \c -> applyStringEnvVariable "SIGNAL_BRIDGE_SET_QUESTIONNAIRE_ARN" c.setQuestionnaireArn (\x -> c {setQuestionnaireArn = x} :: ServerConfigSignalBridge) + , \c -> applyStringEnvVariable "SIGNAL_BRIDGE_SET_PROJECT_ARN" c.setProjectArn (\x -> c {setProjectArn = x} :: ServerConfigSignalBridge) , \c -> applyStringEnvVariable "SIGNAL_BRIDGE_ADD_FILE_ARN" c.addFileArn (\x -> c {addFileArn = x} :: ServerConfigSignalBridge) , \c -> applyStringEnvVariable "SIGNAL_BRIDGE_LOG_OUT_ALL_ARN" c.logOutAllArn (\x -> c {logOutAllArn = x} :: ServerConfigSignalBridge) ] diff --git a/wizard-server/src/Wizard/Model/Config/ServerConfigJM.hs b/wizard-server/src/Wizard/Model/Config/ServerConfigJM.hs index 7fe3e9d89..37cd93c94 100644 --- a/wizard-server/src/Wizard/Model/Config/ServerConfigJM.hs +++ b/wizard-server/src/Wizard/Model/Config/ServerConfigJM.hs @@ -28,7 +28,7 @@ instance FromJSON ServerConfig where cache <- o .:? "cache" .!= defaultCache document <- o .:? "document" .!= defaultDocument feedback <- o .:? "feedback" .!= defaultFeedback - questionnaire <- o .:? "questionnaire" .!= defaultQuestionnaire + project <- o .:? "project" .!= defaultProject temporaryFile <- o .:? "temporaryFile" .!= defaultTemporaryFile userToken <- o .:? "userToken" .!= defaultUserToken analyticalMails <- o .:? "analyticalMails" .!= defaultAnalyticalMails @@ -104,12 +104,12 @@ instance FromJSON ServerConfigFeedback where return ServerConfigFeedback {..} parseJSON _ = mzero -instance FromJSON ServerConfigQuestionnaire where +instance FromJSON ServerConfigProject where parseJSON (Object o) = do - clean <- o .:? "clean" .!= defaultQuestionnaire.clean - squash <- o .:? "squash" .!= defaultQuestionnaire.squash - assigneeNotification <- o .:? "assigneeNotification" .!= defaultQuestionnaire.assigneeNotification - return ServerConfigQuestionnaire {..} + clean <- o .:? "clean" .!= defaultProject.clean + squash <- o .:? "squash" .!= defaultProject.squash + assigneeNotification <- o .:? "assigneeNotification" .!= defaultProject.assigneeNotification + return ServerConfigProject {..} parseJSON _ = mzero instance FromJSON ServerConfigTemporaryFile where @@ -130,7 +130,7 @@ instance FromJSON ServerConfigSignalBridge where enabled <- o .:? "enabled" .!= defaultSignalBridge.enabled updatePermsArn <- o .:? "updatePermsArn" .!= defaultSignalBridge.updatePermsArn updateUserGroupArn <- o .:? "updateUserGroupArn" .!= defaultSignalBridge.updateUserGroupArn - setQuestionnaireArn <- o .:? "setQuestionnaireArn" .!= defaultSignalBridge.setQuestionnaireArn + setProjectArn <- o .:? "setProjectArn" .!= defaultSignalBridge.setProjectArn addFileArn <- o .:? "addFileArn" .!= defaultSignalBridge.addFileArn logOutAllArn <- o .:? "logOutAllArn" .!= defaultSignalBridge.logOutAllArn return ServerConfigSignalBridge {..} diff --git a/wizard-server/src/Wizard/Model/Document/Document.hs b/wizard-server/src/Wizard/Model/Document/Document.hs index 80d6a7ca7..4533ae703 100644 --- a/wizard-server/src/Wizard/Model/Document/Document.hs +++ b/wizard-server/src/Wizard/Model/Document/Document.hs @@ -22,9 +22,9 @@ data Document = Document , name :: String , state :: DocumentState , durability :: DocumentDurability - , questionnaireUuid :: Maybe U.UUID - , questionnaireEventUuid :: Maybe U.UUID - , questionnaireRepliesHash :: Int + , projectUuid :: Maybe U.UUID + , projectEventUuid :: Maybe U.UUID + , projectRepliesHash :: Int , documentTemplateId :: String , formatUuid :: U.UUID , createdBy :: Maybe U.UUID diff --git a/wizard-server/src/Wizard/Model/Document/DocumentContext.hs b/wizard-server/src/Wizard/Model/Document/DocumentContext.hs index 7e8176874..a3d760967 100644 --- a/wizard-server/src/Wizard/Model/Document/DocumentContext.hs +++ b/wizard-server/src/Wizard/Model/Document/DocumentContext.hs @@ -8,9 +8,9 @@ import GHC.Generics import Shared.Common.Model.Common.SemVer2Tuple import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Wizard.Api.Resource.User.UserDTO -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireVersionList +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.Version.ProjectVersionList import Wizard.Model.Registry.RegistryOrganization import Wizard.Model.Report.Report import Wizard.Model.Tenant.Config.TenantConfig @@ -19,7 +19,7 @@ import WizardLib.Public.Api.Resource.User.Group.UserGroupDetailDTO data DocumentContext = DocumentContext { config :: DocumentContextConfig , document :: DocumentContextDocument - , questionnaire :: DocumentContextQuestionnaire + , project :: DocumentContextQuestionnaire , knowledgeModel :: KnowledgeModel , report :: Report , package :: DocumentContextPackage @@ -57,9 +57,9 @@ data DocumentContextQuestionnaire = DocumentContextQuestionnaire , phaseUuid :: Maybe U.UUID , labels :: M.Map String [U.UUID] , versionUuid :: Maybe U.UUID - , versions :: [QuestionnaireVersionList] + , versions :: [ProjectVersionList] , projectTags :: [String] - , files :: [QuestionnaireFileSimple] + , files :: [ProjectFileSimple] , createdBy :: Maybe UserDTO , createdAt :: UTCTime , updatedAt :: UTCTime diff --git a/wizard-server/src/Wizard/Model/Document/DocumentContextJM.hs b/wizard-server/src/Wizard/Model/Document/DocumentContextJM.hs index e8354a6a5..f40f61bdc 100644 --- a/wizard-server/src/Wizard/Model/Document/DocumentContextJM.hs +++ b/wizard-server/src/Wizard/Model/Document/DocumentContextJM.hs @@ -6,10 +6,10 @@ import Shared.Common.Api.Resource.Common.SemVer2TupleJM () import Shared.Common.Util.Aeson import Shared.KnowledgeModel.Api.Resource.KnowledgeModel.KnowledgeModelJM () import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleJM () -import Wizard.Api.Resource.Questionnaire.File.QuestionnaireFileSimpleJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadListJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireReplyJM () -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionListJM () +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadListJM () +import Wizard.Api.Resource.Project.File.ProjectFileSimpleJM () +import Wizard.Api.Resource.Project.ProjectReplyJM () +import Wizard.Api.Resource.Project.Version.ProjectVersionListJM () import Wizard.Api.Resource.Report.ReportJM () import Wizard.Api.Resource.Tenant.Config.TenantConfigJM () import Wizard.Api.Resource.User.UserJM () diff --git a/wizard-server/src/Wizard/Model/Document/DocumentList.hs b/wizard-server/src/Wizard/Model/Document/DocumentList.hs index a99903ed0..a059dfc24 100644 --- a/wizard-server/src/Wizard/Model/Document/DocumentList.hs +++ b/wizard-server/src/Wizard/Model/Document/DocumentList.hs @@ -12,10 +12,10 @@ data DocumentList = DocumentList { uuid :: U.UUID , name :: String , state :: DocumentState - , questionnaireUuid :: U.UUID - , questionnaireName :: String - , questionnaireEventUuid :: Maybe U.UUID - , questionnaireVersion :: Maybe String + , projectUuid :: U.UUID + , projectName :: String + , projectEventUuid :: Maybe U.UUID + , projectVersion :: Maybe String , documentTemplateId :: String , documentTemplateName :: String , documentTemplateFormats :: [DocumentTemplateFormatSimple] diff --git a/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftData.hs b/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftData.hs index 26675cf05..2b39124aa 100644 --- a/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftData.hs +++ b/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftData.hs @@ -6,7 +6,7 @@ import GHC.Generics data DocumentTemplateDraftData = DocumentTemplateDraftData { documentTemplateId :: String - , questionnaireUuid :: Maybe U.UUID + , projectUuid :: Maybe U.UUID , formatUuid :: Maybe U.UUID , tenantUuid :: U.UUID , createdAt :: UTCTime @@ -18,7 +18,7 @@ data DocumentTemplateDraftData = DocumentTemplateDraftData instance Eq DocumentTemplateDraftData where a == b = a.documentTemplateId == b.documentTemplateId - && a.questionnaireUuid == b.questionnaireUuid + && a.projectUuid == b.projectUuid && a.knowledgeModelEditorUuid == b.knowledgeModelEditorUuid && a.formatUuid == b.formatUuid && a.tenantUuid == b.tenantUuid diff --git a/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftDetail.hs b/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftDetail.hs index fdaf85d33..72fbea305 100644 --- a/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftDetail.hs +++ b/wizard-server/src/Wizard/Model/DocumentTemplate/DocumentTemplateDraftDetail.hs @@ -7,7 +7,7 @@ import GHC.Generics import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackagePattern import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorSuggestion -import Wizard.Model.Questionnaire.QuestionnaireSuggestion +import Wizard.Model.Project.ProjectSuggestion data DocumentTemplateDraftDetail = DocumentTemplateDraftDetail { tId :: String @@ -19,8 +19,8 @@ data DocumentTemplateDraftDetail = DocumentTemplateDraftDetail , license :: String , allowedPackages :: [KnowledgeModelPackagePattern] , formats :: [DocumentTemplateFormat] - , questionnaireUuid :: Maybe U.UUID - , questionnaire :: Maybe QuestionnaireSuggestion + , projectUuid :: Maybe U.UUID + , project :: Maybe ProjectSuggestion , knowledgeModelEditorUuid :: Maybe U.UUID , knowledgeModelEditor :: Maybe KnowledgeModelEditorSuggestion , formatUuid :: Maybe U.UUID diff --git a/wizard-server/src/Wizard/Model/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs b/wizard-server/src/Wizard/Model/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs index 6f70cffec..5659cd6c4 100644 --- a/wizard-server/src/Wizard/Model/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs +++ b/wizard-server/src/Wizard/Model/KnowledgeModel/Editor/KnowledgeModelEditorReply.hs @@ -4,7 +4,7 @@ import Data.Time import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import WizardLib.Public.Model.User.UserSuggestion data KnowledgeModelEditorReply = KnowledgeModelEditorReply diff --git a/wizard-server/src/Wizard/Model/PersistentCommand/Project/File/ProjectFileDeleteFromS3Command.hs b/wizard-server/src/Wizard/Model/PersistentCommand/Project/File/ProjectFileDeleteFromS3Command.hs new file mode 100644 index 000000000..58b984989 --- /dev/null +++ b/wizard-server/src/Wizard/Model/PersistentCommand/Project/File/ProjectFileDeleteFromS3Command.hs @@ -0,0 +1,19 @@ +module Wizard.Model.PersistentCommand.Project.File.ProjectFileDeleteFromS3Command where + +import Data.Aeson +import qualified Data.UUID as U +import GHC.Generics + +import Shared.Common.Util.Aeson + +data ProjectFileDeleteFromS3Command = ProjectFileDeleteFromS3Command + { projectUuid :: U.UUID + , fileUuid :: U.UUID + } + deriving (Show, Eq, Generic) + +instance FromJSON ProjectFileDeleteFromS3Command where + parseJSON = genericParseJSON jsonOptions + +instance ToJSON ProjectFileDeleteFromS3Command where + toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Model/PersistentCommand/Questionnaire/File/QuestionnaireFileDeleteFromS3Command.hs b/wizard-server/src/Wizard/Model/PersistentCommand/Questionnaire/File/QuestionnaireFileDeleteFromS3Command.hs deleted file mode 100644 index 2d848952b..000000000 --- a/wizard-server/src/Wizard/Model/PersistentCommand/Questionnaire/File/QuestionnaireFileDeleteFromS3Command.hs +++ /dev/null @@ -1,19 +0,0 @@ -module Wizard.Model.PersistentCommand.Questionnaire.File.QuestionnaireFileDeleteFromS3Command where - -import Data.Aeson -import qualified Data.UUID as U -import GHC.Generics - -import Shared.Common.Util.Aeson - -data QuestionnaireFileDeleteFromS3Command = QuestionnaireFileDeleteFromS3Command - { questionnaireUuid :: U.UUID - , fileUuid :: U.UUID - } - deriving (Show, Eq, Generic) - -instance FromJSON QuestionnaireFileDeleteFromS3Command where - parseJSON = genericParseJSON jsonOptions - -instance ToJSON QuestionnaireFileDeleteFromS3Command where - toJSON = genericToJSON jsonOptions diff --git a/wizard-server/src/Wizard/Model/Project/Acl/ProjectAclHelpers.hs b/wizard-server/src/Wizard/Model/Project/Acl/ProjectAclHelpers.hs new file mode 100644 index 000000000..350f3c2fb --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/Acl/ProjectAclHelpers.hs @@ -0,0 +1,63 @@ +module Wizard.Model.Project.Acl.ProjectAclHelpers where + +import qualified Data.UUID as U + +import Wizard.Model.Acl.Acl +import Wizard.Model.Project.Acl.ProjectPerm + +getUserUuidsForViewerPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserUuidsForViewerPerm = getUserUuidsForPerm _VIEW_PERM + +getUserUuidsForCommenterPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserUuidsForCommenterPerm = getUserUuidsForPerm _COMMENT_PERM + +getUserUuidsForEditorPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserUuidsForEditorPerm = getUserUuidsForPerm _EDIT_PERM + +getUserUuidsForOwnerPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserUuidsForOwnerPerm = getUserUuidsForPerm _ADMIN_PERM + +getUserUuidsForPerm :: ProjectPermC projectPerm => String -> [projectPerm] -> [U.UUID] +getUserUuidsForPerm desiredPerm = foldl go [] + where + go :: ProjectPermC projectPerm => [U.UUID] -> projectPerm -> [U.UUID] + go acc projectPerm = + case projectPerm.memberType of + UserProjectPermType -> + if desiredPerm `elem` projectPerm.perms + then acc ++ [projectPerm.memberUuid] + else acc + _ -> acc + +getUserGroupUuidsForViewerPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserGroupUuidsForViewerPerm = getUserGroupUuidsForPerm _VIEW_PERM + +getUserGroupUuidsForCommenterPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserGroupUuidsForCommenterPerm = getUserGroupUuidsForPerm _COMMENT_PERM + +getUserGroupUuidsForEditorPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserGroupUuidsForEditorPerm = getUserGroupUuidsForPerm _EDIT_PERM + +getUserGroupUuidsForOwnerPerm :: ProjectPermC projectPerm => [projectPerm] -> [U.UUID] +getUserGroupUuidsForOwnerPerm = getUserGroupUuidsForPerm _ADMIN_PERM + +getUserGroupUuidsForPerm :: ProjectPermC projectPerm => String -> [projectPerm] -> [U.UUID] +getUserGroupUuidsForPerm desiredPerm = foldl go [] + where + go :: ProjectPermC projectPerm => [U.UUID] -> projectPerm -> [U.UUID] + go acc projectPerm = + case projectPerm.memberType of + UserGroupProjectPermType -> + if desiredPerm `elem` projectPerm.perms + then acc ++ [projectPerm.memberUuid] + else acc + _ -> acc + +removeUserPermission :: ProjectPermC projectPerm => U.UUID -> [projectPerm] -> [projectPerm] +removeUserPermission userUuidToDelete = filter go + where + go :: ProjectPermC projectPerm => projectPerm -> Bool + go projectPerm = + case projectPerm.memberType of + UserProjectPermType -> projectPerm.memberUuid /= userUuidToDelete + _ -> True diff --git a/wizard-server/src/Wizard/Model/Project/Acl/ProjectPerm.hs b/wizard-server/src/Wizard/Model/Project/Acl/ProjectPerm.hs new file mode 100644 index 000000000..861f71a67 --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/Acl/ProjectPerm.hs @@ -0,0 +1,38 @@ +module Wizard.Model.Project.Acl.ProjectPerm where + +import qualified Data.UUID as U +import GHC.Generics +import GHC.Records + +import Wizard.Model.Acl.Acl + +data ProjectPermType + = UserProjectPermType + | UserGroupProjectPermType + deriving (Show, Eq, Generic, Read) + +data ProjectPerm = ProjectPerm + { projectUuid :: U.UUID + , memberType :: ProjectPermType + , memberUuid :: U.UUID + , perms :: [String] + , tenantUuid :: U.UUID + } + deriving (Generic, Eq, Show) + +class + ( HasField "perms" projectPerm [String] + , HasField "memberUuid" projectPerm U.UUID + , HasField "memberType" projectPerm ProjectPermType + ) => + ProjectPermC projectPerm + +instance ProjectPermC ProjectPerm + +ownerPermissions = [_VIEW_PERM, _COMMENT_PERM, _EDIT_PERM, _ADMIN_PERM] + +editorPermissions = [_VIEW_PERM, _COMMENT_PERM, _EDIT_PERM] + +commentatorPermissions = [_VIEW_PERM, _COMMENT_PERM] + +viewerPermissions = [_VIEW_PERM] diff --git a/wizard-server/src/Wizard/Model/QuestionnaireAction/QuestionnaireAction.hs b/wizard-server/src/Wizard/Model/Project/Action/ProjectAction.hs similarity index 81% rename from wizard-server/src/Wizard/Model/QuestionnaireAction/QuestionnaireAction.hs rename to wizard-server/src/Wizard/Model/Project/Action/ProjectAction.hs index eb0db91ae..793200703 100644 --- a/wizard-server/src/Wizard/Model/QuestionnaireAction/QuestionnaireAction.hs +++ b/wizard-server/src/Wizard/Model/Project/Action/ProjectAction.hs @@ -1,4 +1,4 @@ -module Wizard.Model.QuestionnaireAction.QuestionnaireAction where +module Wizard.Model.Project.Action.ProjectAction where import Data.Aeson import Data.Time @@ -7,8 +7,8 @@ import GHC.Generics import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackagePattern -data QuestionnaireAction = QuestionnaireAction - { qaId :: String +data ProjectAction = ProjectAction + { paId :: String , name :: String , organizationId :: String , actionId :: String diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireComment.hs b/wizard-server/src/Wizard/Model/Project/Comment/ProjectComment.hs similarity index 70% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireComment.hs rename to wizard-server/src/Wizard/Model/Project/Comment/ProjectComment.hs index caac58be8..ba7cff6e0 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireComment.hs +++ b/wizard-server/src/Wizard/Model/Project/Comment/ProjectComment.hs @@ -1,16 +1,16 @@ -module Wizard.Model.Questionnaire.QuestionnaireComment where +module Wizard.Model.Project.Comment.ProjectComment where import Data.Time import qualified Data.UUID as U import GHC.Generics -data QuestionnaireCommentThread = QuestionnaireCommentThread +data ProjectCommentThread = ProjectCommentThread { uuid :: U.UUID , path :: String , resolved :: Bool - , comments :: [QuestionnaireComment] + , comments :: [ProjectComment] , private :: Bool - , questionnaireUuid :: U.UUID + , projectUuid :: U.UUID , assignedTo :: Maybe U.UUID , assignedBy :: Maybe U.UUID , notificationRequired :: Bool @@ -21,7 +21,7 @@ data QuestionnaireCommentThread = QuestionnaireCommentThread } deriving (Show, Eq, Generic) -data QuestionnaireComment = QuestionnaireComment +data ProjectComment = ProjectComment { uuid :: U.UUID , text :: String , threadUuid :: U.UUID diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentList.hs b/wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentList.hs similarity index 66% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentList.hs rename to wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentList.hs index 59ee10235..6f739db9d 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentList.hs +++ b/wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentList.hs @@ -1,4 +1,4 @@ -module Wizard.Model.Questionnaire.QuestionnaireCommentList where +module Wizard.Model.Project.Comment.ProjectCommentList where import Data.Time import qualified Data.UUID as U @@ -6,11 +6,11 @@ import GHC.Generics import WizardLib.Public.Model.User.UserSuggestion -data QuestionnaireCommentThreadList = QuestionnaireCommentThreadList +data ProjectCommentThreadList = ProjectCommentThreadList { uuid :: U.UUID , path :: String , resolved :: Bool - , comments :: [QuestionnaireCommentList] + , comments :: [ProjectCommentList] , private :: Bool , assignedTo :: Maybe UserSuggestion , createdBy :: Maybe UserSuggestion @@ -19,7 +19,7 @@ data QuestionnaireCommentThreadList = QuestionnaireCommentThreadList } deriving (Show, Eq, Generic) -data QuestionnaireCommentList = QuestionnaireCommentList +data ProjectCommentList = ProjectCommentList { uuid :: U.UUID , text :: String , createdBy :: Maybe UserSuggestion @@ -28,5 +28,5 @@ data QuestionnaireCommentList = QuestionnaireCommentList } deriving (Show, Eq, Generic) -instance Ord QuestionnaireCommentList where +instance Ord ProjectCommentList where compare a b = compare a.uuid b.uuid diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentThreadAssigned.hs b/wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentThreadAssigned.hs similarity index 60% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentThreadAssigned.hs rename to wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentThreadAssigned.hs index e49edae0d..7166b8553 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentThreadAssigned.hs +++ b/wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentThreadAssigned.hs @@ -1,4 +1,4 @@ -module Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned where +module Wizard.Model.Project.Comment.ProjectCommentThreadAssigned where import Data.Time import qualified Data.UUID as U @@ -6,9 +6,9 @@ import GHC.Generics import WizardLib.Public.Model.User.UserSuggestion -data QuestionnaireCommentThreadAssigned = QuestionnaireCommentThreadAssigned - { questionnaireUuid :: U.UUID - , questionnaireName :: String +data ProjectCommentThreadAssigned = ProjectCommentThreadAssigned + { projectUuid :: U.UUID + , projectName :: String , commentThreadUuid :: U.UUID , path :: String , resolved :: Bool diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentThreadNotification.hs b/wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentThreadNotification.hs similarity index 61% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentThreadNotification.hs rename to wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentThreadNotification.hs index 8098fd412..248b09696 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireCommentThreadNotification.hs +++ b/wizard-server/src/Wizard/Model/Project/Comment/ProjectCommentThreadNotification.hs @@ -1,13 +1,13 @@ -module Wizard.Model.Questionnaire.QuestionnaireCommentThreadNotification where +module Wizard.Model.Project.Comment.ProjectCommentThreadNotification where import qualified Data.UUID as U import GHC.Generics import WizardLib.Public.Model.User.UserSimple -data QuestionnaireCommentThreadNotification = QuestionnaireCommentThreadNotification - { questionnaireUuid :: U.UUID - , questionnaireName :: String +data ProjectCommentThreadNotification = ProjectCommentThreadNotification + { projectUuid :: U.UUID + , projectName :: String , tenantUuid :: U.UUID , commentThreadUuid :: U.UUID , path :: String @@ -26,5 +26,5 @@ data QuestionnaireCommentThreadNotification = QuestionnaireCommentThreadNotifica } deriving (Show, Eq, Generic) -instance Ord QuestionnaireCommentThreadNotification where - compare a b = compare a.questionnaireUuid b.questionnaireUuid +instance Ord ProjectCommentThreadNotification where + compare a b = compare a.projectUuid b.projectUuid diff --git a/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetail.hs b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetail.hs new file mode 100644 index 000000000..3ed0254dc --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetail.hs @@ -0,0 +1,23 @@ +module Wizard.Model.Project.Detail.ProjectDetail where + +import qualified Data.UUID as U +import GHC.Generics + +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Project + +data ProjectDetail = ProjectDetail + { uuid :: U.UUID + , name :: String + , visibility :: ProjectVisibility + , sharing :: ProjectSharing + , knowledgeModelPackageId :: String + , selectedQuestionTagUuids :: [U.UUID] + , isTemplate :: Bool + , migrationUuid :: Maybe U.UUID + , permissions :: [ProjectPermDTO] + , projectActionsAvailable :: Int + , projectImportersAvailable :: Int + , fileCount :: Int + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailPreview.hs b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailPreview.hs similarity index 53% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailPreview.hs rename to wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailPreview.hs index a0387dccb..ea5e8d3a3 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailPreview.hs +++ b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailPreview.hs @@ -1,21 +1,21 @@ -module Wizard.Model.Questionnaire.QuestionnaireDetailPreview where +module Wizard.Model.Project.Detail.ProjectDetailPreview where import qualified Data.UUID as U import GHC.Generics import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateFormatSimple -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Project -data QuestionnaireDetailPreview = QuestionnaireDetailPreview +data ProjectDetailPreview = ProjectDetailPreview { uuid :: U.UUID , name :: String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing + , visibility :: ProjectVisibility + , sharing :: ProjectSharing , knowledgeModelPackageId :: String , isTemplate :: Bool , migrationUuid :: Maybe U.UUID - , permissions :: [QuestionnairePermDTO] + , permissions :: [ProjectPermDTO] , documentTemplateId :: Maybe String , format :: Maybe DocumentTemplateFormatSimple , fileCount :: Int diff --git a/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailQuestionnaire.hs b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailQuestionnaire.hs new file mode 100644 index 000000000..10751c3cc --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailQuestionnaire.hs @@ -0,0 +1,24 @@ +module Wizard.Model.Project.Detail.ProjectDetailQuestionnaire where + +import qualified Data.UUID as U +import GHC.Generics + +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Project.Project + +data ProjectDetailQuestionnaire = ProjectDetailQuestionnaire + { uuid :: U.UUID + , name :: String + , visibility :: ProjectVisibility + , sharing :: ProjectSharing + , knowledgeModelPackageId :: String + , selectedQuestionTagUuids :: [U.UUID] + , isTemplate :: Bool + , migrationUuid :: Maybe U.UUID + , permissions :: [ProjectPermDTO] + , files :: [ProjectFileSimple] + , projectActionsAvailable :: Int + , projectImportersAvailable :: Int + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailSettings.hs b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailSettings.hs similarity index 73% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailSettings.hs rename to wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailSettings.hs index 9a82d2f8a..8286ae18a 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailSettings.hs +++ b/wizard-server/src/Wizard/Model/Project/Detail/ProjectDetailSettings.hs @@ -1,4 +1,4 @@ -module Wizard.Model.Questionnaire.QuestionnaireDetailSettings where +module Wizard.Model.Project.Detail.ProjectDetailSettings where import qualified Data.UUID as U import GHC.Generics @@ -7,19 +7,19 @@ import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateDTO import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO import Wizard.Model.DocumentTemplate.DocumentTemplateState -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project -data QuestionnaireDetailSettings = QuestionnaireDetailSettings +data ProjectDetailSettings = ProjectDetailSettings { uuid :: U.UUID , name :: String , description :: Maybe String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing + , visibility :: ProjectVisibility + , sharing :: ProjectSharing , isTemplate :: Bool , migrationUuid :: Maybe U.UUID - , permissions :: [QuestionnairePermDTO] + , permissions :: [ProjectPermDTO] , projectTags :: [String] , knowledgeModelPackageId :: String , knowledgeModelPackage :: KnowledgeModelPackageSimpleDTO diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEvent.hs b/wizard-server/src/Wizard/Model/Project/Event/ProjectEvent.hs similarity index 78% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEvent.hs rename to wizard-server/src/Wizard/Model/Project/Event/ProjectEvent.hs index 0136449f8..446797d92 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEvent.hs +++ b/wizard-server/src/Wizard/Model/Project/Event/ProjectEvent.hs @@ -1,12 +1,12 @@ -module Wizard.Model.Questionnaire.QuestionnaireEvent where +module Wizard.Model.Project.Event.ProjectEvent where import Data.Time import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply -data QuestionnaireEvent +data ProjectEvent = SetReplyEvent' SetReplyEvent | ClearReplyEvent' ClearReplyEvent | SetPhaseEvent' SetPhaseEvent @@ -17,7 +17,7 @@ data SetReplyEvent = SetReplyEvent { uuid :: U.UUID , path :: String , value :: ReplyValue - , questionnaireUuid :: U.UUID + , projectUuid :: U.UUID , tenantUuid :: U.UUID , createdBy :: Maybe U.UUID , createdAt :: UTCTime @@ -29,14 +29,14 @@ instance Eq SetReplyEvent where a.uuid == b.uuid && a.path == b.path && a.value == b.value - && a.questionnaireUuid == b.questionnaireUuid + && a.projectUuid == b.projectUuid && a.tenantUuid == b.tenantUuid && a.createdBy == b.createdBy data ClearReplyEvent = ClearReplyEvent { uuid :: U.UUID , path :: String - , questionnaireUuid :: U.UUID + , projectUuid :: U.UUID , tenantUuid :: U.UUID , createdBy :: Maybe U.UUID , createdAt :: UTCTime @@ -47,14 +47,14 @@ instance Eq ClearReplyEvent where a == b = a.uuid == b.uuid && a.path == b.path - && a.questionnaireUuid == b.questionnaireUuid + && a.projectUuid == b.projectUuid && a.tenantUuid == b.tenantUuid && a.createdBy == b.createdBy data SetPhaseEvent = SetPhaseEvent { uuid :: U.UUID , phaseUuid :: Maybe U.UUID - , questionnaireUuid :: U.UUID + , projectUuid :: U.UUID , tenantUuid :: U.UUID , createdBy :: Maybe U.UUID , createdAt :: UTCTime @@ -65,7 +65,7 @@ instance Eq SetPhaseEvent where a == b = a.uuid == b.uuid && a.phaseUuid == b.phaseUuid - && a.questionnaireUuid == b.questionnaireUuid + && a.projectUuid == b.projectUuid && a.tenantUuid == b.tenantUuid && a.createdBy == b.createdBy @@ -73,7 +73,7 @@ data SetLabelsEvent = SetLabelsEvent { uuid :: U.UUID , path :: String , value :: [U.UUID] - , questionnaireUuid :: U.UUID + , projectUuid :: U.UUID , tenantUuid :: U.UUID , createdBy :: Maybe U.UUID , createdAt :: UTCTime @@ -85,6 +85,6 @@ instance Eq SetLabelsEvent where a.uuid == b.uuid && a.path == b.path && a.value == b.value - && a.questionnaireUuid == b.questionnaireUuid + && a.projectUuid == b.projectUuid && a.tenantUuid == b.tenantUuid && a.createdBy == b.createdBy diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventLenses.hs b/wizard-server/src/Wizard/Model/Project/Event/ProjectEventLenses.hs similarity index 63% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventLenses.hs rename to wizard-server/src/Wizard/Model/Project/Event/ProjectEventLenses.hs index e8d2ab8ea..b911cf767 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventLenses.hs +++ b/wizard-server/src/Wizard/Model/Project/Event/ProjectEventLenses.hs @@ -1,10 +1,10 @@ -module Wizard.Model.Questionnaire.QuestionnaireEventLenses where +module Wizard.Model.Project.Event.ProjectEventLenses where import Shared.Common.Model.Common.Lens import Wizard.Model.Common.Lens -import Wizard.Model.Questionnaire.QuestionnaireEvent +import Wizard.Model.Project.Event.ProjectEvent -instance HasUuid' QuestionnaireEvent where +instance HasUuid' ProjectEvent where getUuid (SetReplyEvent' entity) = entity.uuid getUuid (ClearReplyEvent' entity) = entity.uuid getUuid (SetPhaseEvent' entity) = entity.uuid @@ -14,17 +14,17 @@ instance HasUuid' QuestionnaireEvent where setUuid (SetPhaseEvent' entity) newValue = SetPhaseEvent' $ entity {uuid = newValue} setUuid (SetLabelsEvent' entity) newValue = SetLabelsEvent' $ entity {uuid = newValue} -instance HasQuestionnaireUuid' QuestionnaireEvent where - getQuestionnaireUuid (SetReplyEvent' entity) = entity.questionnaireUuid - getQuestionnaireUuid (ClearReplyEvent' entity) = entity.questionnaireUuid - getQuestionnaireUuid (SetPhaseEvent' entity) = entity.questionnaireUuid - getQuestionnaireUuid (SetLabelsEvent' entity) = entity.questionnaireUuid - setQuestionnaireUuid (SetReplyEvent' entity) newValue = SetReplyEvent' $ entity {questionnaireUuid = newValue} - setQuestionnaireUuid (ClearReplyEvent' entity) newValue = ClearReplyEvent' $ entity {questionnaireUuid = newValue} - setQuestionnaireUuid (SetPhaseEvent' entity) newValue = SetPhaseEvent' $ entity {questionnaireUuid = newValue} - setQuestionnaireUuid (SetLabelsEvent' entity) newValue = SetLabelsEvent' $ entity {questionnaireUuid = newValue} +instance HasProjectUuid' ProjectEvent where + getProjectUuid (SetReplyEvent' entity) = entity.projectUuid + getProjectUuid (ClearReplyEvent' entity) = entity.projectUuid + getProjectUuid (SetPhaseEvent' entity) = entity.projectUuid + getProjectUuid (SetLabelsEvent' entity) = entity.projectUuid + setProjectUuid (SetReplyEvent' entity) newValue = SetReplyEvent' $ entity {projectUuid = newValue} + setProjectUuid (ClearReplyEvent' entity) newValue = ClearReplyEvent' $ entity {projectUuid = newValue} + setProjectUuid (SetPhaseEvent' entity) newValue = SetPhaseEvent' $ entity {projectUuid = newValue} + setProjectUuid (SetLabelsEvent' entity) newValue = SetLabelsEvent' $ entity {projectUuid = newValue} -instance HasCreatedAt' QuestionnaireEvent where +instance HasCreatedAt' ProjectEvent where getCreatedAt (SetReplyEvent' entity) = entity.createdAt getCreatedAt (ClearReplyEvent' entity) = entity.createdAt getCreatedAt (SetPhaseEvent' entity) = entity.createdAt @@ -34,7 +34,7 @@ instance HasCreatedAt' QuestionnaireEvent where setCreatedAt (SetPhaseEvent' entity) newValue = SetPhaseEvent' $ entity {createdAt = newValue} setCreatedAt (SetLabelsEvent' entity) newValue = SetLabelsEvent' $ entity {createdAt = newValue} -instance HasCreatedBy' QuestionnaireEvent where +instance HasCreatedBy' ProjectEvent where getCreatedBy (SetReplyEvent' entity) = entity.createdBy getCreatedBy (ClearReplyEvent' entity) = entity.createdBy getCreatedBy (SetPhaseEvent' entity) = entity.createdBy diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventList.hs b/wizard-server/src/Wizard/Model/Project/Event/ProjectEventList.hs similarity index 92% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventList.hs rename to wizard-server/src/Wizard/Model/Project/Event/ProjectEventList.hs index 28be6ea65..1b7cedb8e 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventList.hs +++ b/wizard-server/src/Wizard/Model/Project/Event/ProjectEventList.hs @@ -1,13 +1,13 @@ -module Wizard.Model.Questionnaire.QuestionnaireEventList where +module Wizard.Model.Project.Event.ProjectEventList where import Data.Time import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import WizardLib.Public.Model.User.UserSuggestion -data QuestionnaireEventList +data ProjectEventList = SetReplyEventList' SetReplyEventList | ClearReplyEventList' ClearReplyEventList | SetPhaseEventList' SetPhaseEventList diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventListLenses.hs b/wizard-server/src/Wizard/Model/Project/Event/ProjectEventListLenses.hs similarity index 85% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventListLenses.hs rename to wizard-server/src/Wizard/Model/Project/Event/ProjectEventListLenses.hs index 1ca6956ef..671bfac25 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireEventListLenses.hs +++ b/wizard-server/src/Wizard/Model/Project/Event/ProjectEventListLenses.hs @@ -1,9 +1,9 @@ -module Wizard.Model.Questionnaire.QuestionnaireEventListLenses where +module Wizard.Model.Project.Event.ProjectEventListLenses where import Shared.Common.Model.Common.Lens -import Wizard.Model.Questionnaire.QuestionnaireEventList +import Wizard.Model.Project.Event.ProjectEventList -instance HasUuid' QuestionnaireEventList where +instance HasUuid' ProjectEventList where getUuid (SetReplyEventList' entity) = entity.uuid getUuid (ClearReplyEventList' entity) = entity.uuid getUuid (SetPhaseEventList' entity) = entity.uuid @@ -13,7 +13,7 @@ instance HasUuid' QuestionnaireEventList where setUuid (SetPhaseEventList' entity) newValue = SetPhaseEventList' $ entity {uuid = newValue} setUuid (SetLabelsEventList' entity) newValue = SetLabelsEventList' $ entity {uuid = newValue} -instance HasCreatedAt' QuestionnaireEventList where +instance HasCreatedAt' ProjectEventList where getCreatedAt (SetReplyEventList' entity) = entity.createdAt getCreatedAt (ClearReplyEventList' entity) = entity.createdAt getCreatedAt (SetPhaseEventList' entity) = entity.createdAt diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFile.hs b/wizard-server/src/Wizard/Model/Project/File/ProjectFile.hs similarity index 68% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFile.hs rename to wizard-server/src/Wizard/Model/Project/File/ProjectFile.hs index ae4bf1f86..7de1a595e 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFile.hs +++ b/wizard-server/src/Wizard/Model/Project/File/ProjectFile.hs @@ -1,16 +1,16 @@ -module Wizard.Model.Questionnaire.QuestionnaireFile where +module Wizard.Model.Project.File.ProjectFile where import Data.Time import qualified Data.UUID as U import GHC.Generics import GHC.Int -data QuestionnaireFile = QuestionnaireFile +data ProjectFile = ProjectFile { uuid :: U.UUID , fileName :: String , contentType :: String , fileSize :: Int64 - , questionnaireUuid :: U.UUID + , projectUuid :: U.UUID , createdBy :: Maybe U.UUID , tenantUuid :: U.UUID , createdAt :: UTCTime diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFileList.hs b/wizard-server/src/Wizard/Model/Project/File/ProjectFileList.hs similarity index 60% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFileList.hs rename to wizard-server/src/Wizard/Model/Project/File/ProjectFileList.hs index 2ccb428a2..d08622273 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFileList.hs +++ b/wizard-server/src/Wizard/Model/Project/File/ProjectFileList.hs @@ -1,19 +1,19 @@ -module Wizard.Model.Questionnaire.QuestionnaireFileList where +module Wizard.Model.Project.File.ProjectFileList where import Data.Time import qualified Data.UUID as U import GHC.Generics import GHC.Int -import Wizard.Model.Questionnaire.QuestionnaireSimple +import Wizard.Model.Project.ProjectSimple import WizardLib.Public.Model.User.UserSuggestion -data QuestionnaireFileList = QuestionnaireFileList +data ProjectFileList = ProjectFileList { uuid :: U.UUID , fileName :: String , contentType :: String , fileSize :: Int64 - , questionnaire :: QuestionnaireSimple + , project :: ProjectSimple , createdBy :: Maybe UserSuggestion , createdAt :: UTCTime } diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFileSimple.hs b/wizard-server/src/Wizard/Model/Project/File/ProjectFileSimple.hs similarity index 61% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFileSimple.hs rename to wizard-server/src/Wizard/Model/Project/File/ProjectFileSimple.hs index e0a92d741..1e7495977 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireFileSimple.hs +++ b/wizard-server/src/Wizard/Model/Project/File/ProjectFileSimple.hs @@ -1,10 +1,10 @@ -module Wizard.Model.Questionnaire.QuestionnaireFileSimple where +module Wizard.Model.Project.File.ProjectFileSimple where import qualified Data.UUID as U import GHC.Generics import GHC.Int -data QuestionnaireFileSimple = QuestionnaireFileSimple +data ProjectFileSimple = ProjectFileSimple { uuid :: U.UUID , fileName :: String , contentType :: String diff --git a/wizard-server/src/Wizard/Model/QuestionnaireImporter/QuestionnaireImporter.hs b/wizard-server/src/Wizard/Model/Project/Importer/ProjectImporter.hs similarity index 79% rename from wizard-server/src/Wizard/Model/QuestionnaireImporter/QuestionnaireImporter.hs rename to wizard-server/src/Wizard/Model/Project/Importer/ProjectImporter.hs index fe02ab4b8..8366a9e40 100644 --- a/wizard-server/src/Wizard/Model/QuestionnaireImporter/QuestionnaireImporter.hs +++ b/wizard-server/src/Wizard/Model/Project/Importer/ProjectImporter.hs @@ -1,4 +1,4 @@ -module Wizard.Model.QuestionnaireImporter.QuestionnaireImporter where +module Wizard.Model.Project.Importer.ProjectImporter where import Data.Time import qualified Data.UUID as U @@ -6,8 +6,8 @@ import GHC.Generics import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackagePattern -data QuestionnaireImporter = QuestionnaireImporter - { qiId :: String +data ProjectImporter = ProjectImporter + { piId :: String , name :: String , organizationId :: String , importerId :: String diff --git a/wizard-server/src/Wizard/Model/Project/Migration/ProjectMigration.hs b/wizard-server/src/Wizard/Model/Project/Migration/ProjectMigration.hs new file mode 100644 index 000000000..4213c2363 --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/Migration/ProjectMigration.hs @@ -0,0 +1,12 @@ +module Wizard.Model.Project.Migration.ProjectMigration where + +import qualified Data.UUID as U +import GHC.Generics + +data ProjectMigration = ProjectMigration + { oldProjectUuid :: U.UUID + , newProjectUuid :: U.UUID + , resolvedQuestionUuids :: [U.UUID] + , tenantUuid :: U.UUID + } + deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/Questionnaire.hs b/wizard-server/src/Wizard/Model/Project/Project.hs similarity index 66% rename from wizard-server/src/Wizard/Model/Questionnaire/Questionnaire.hs rename to wizard-server/src/Wizard/Model/Project/Project.hs index 823a3faaa..dc7a4d602 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/Questionnaire.hs +++ b/wizard-server/src/Wizard/Model/Project/Project.hs @@ -1,38 +1,38 @@ -module Wizard.Model.Questionnaire.Questionnaire where +module Wizard.Model.Project.Project where import Data.Time import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectPerm -data QuestionnaireVisibility - = PrivateQuestionnaire - | VisibleViewQuestionnaire - | VisibleCommentQuestionnaire - | VisibleEditQuestionnaire +data ProjectVisibility + = PrivateProjectVisibility + | VisibleViewProjectVisibility + | VisibleCommentProjectVisibility + | VisibleEditProjectVisibility deriving (Show, Eq, Generic, Read) -data QuestionnaireSharing - = RestrictedQuestionnaire - | AnyoneWithLinkViewQuestionnaire - | AnyoneWithLinkCommentQuestionnaire - | AnyoneWithLinkEditQuestionnaire +data ProjectSharing + = RestrictedProjectSharing + | AnyoneWithLinkViewProjectSharing + | AnyoneWithLinkCommentProjectSharing + | AnyoneWithLinkEditProjectSharing deriving (Show, Eq, Generic, Read) -data Questionnaire = Questionnaire +data Project = Project { uuid :: U.UUID , name :: String , description :: Maybe String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing + , visibility :: ProjectVisibility + , sharing :: ProjectSharing , knowledgeModelPackageId :: String , selectedQuestionTagUuids :: [U.UUID] , projectTags :: [String] , documentTemplateId :: Maybe String , formatUuid :: Maybe U.UUID , creatorUuid :: Maybe U.UUID - , permissions :: [QuestionnairePerm] + , permissions :: [ProjectPerm] , isTemplate :: Bool , squashed :: Bool , tenantUuid :: U.UUID @@ -41,7 +41,7 @@ data Questionnaire = Questionnaire } deriving (Generic, Show) -instance Eq Questionnaire where +instance Eq Project where a == b = a.uuid == b.uuid && a.name == b.name diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireContent.hs b/wizard-server/src/Wizard/Model/Project/ProjectContent.hs similarity index 58% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireContent.hs rename to wizard-server/src/Wizard/Model/Project/ProjectContent.hs index d0f5d483e..57144f331 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireContent.hs +++ b/wizard-server/src/Wizard/Model/Project/ProjectContent.hs @@ -1,12 +1,12 @@ -module Wizard.Model.Questionnaire.QuestionnaireContent where +module Wizard.Model.Project.ProjectContent where import qualified Data.Map.Strict as M import qualified Data.UUID as U import GHC.Generics -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply -data QuestionnaireContent = QuestionnaireContent +data ProjectContent = ProjectContent { phaseUuid :: Maybe U.UUID , replies :: M.Map String Reply , labels :: M.Map String [U.UUID] diff --git a/wizard-server/src/Wizard/Model/Project/ProjectContentDM.hs b/wizard-server/src/Wizard/Model/Project/ProjectContentDM.hs new file mode 100644 index 000000000..ff6986ca4 --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/ProjectContentDM.hs @@ -0,0 +1,13 @@ +module Wizard.Model.Project.ProjectContentDM where + +import qualified Data.Map.Strict as M + +import Wizard.Model.Project.ProjectContent + +defaultProjectContent :: ProjectContent +defaultProjectContent = + ProjectContent + { phaseUuid = Nothing + , replies = M.empty + , labels = M.empty + } diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireList.hs b/wizard-server/src/Wizard/Model/Project/ProjectList.hs similarity index 61% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireList.hs rename to wizard-server/src/Wizard/Model/Project/ProjectList.hs index 47173c119..ac851228a 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireList.hs +++ b/wizard-server/src/Wizard/Model/Project/ProjectList.hs @@ -1,30 +1,30 @@ -module Wizard.Model.Questionnaire.QuestionnaireList where +module Wizard.Model.Project.ProjectList where import Data.Time import qualified Data.UUID as U import GHC.Generics import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackageSimple -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireState +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectState -data QuestionnaireList = QuestionnaireList +data ProjectList = ProjectList { uuid :: U.UUID , name :: String , description :: Maybe String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing - , state :: QuestionnaireState + , visibility :: ProjectVisibility + , sharing :: ProjectSharing + , state :: ProjectState , knowledgeModelPackage :: KnowledgeModelPackageSimple - , permissions :: [QuestionnairePermDTO] + , permissions :: [ProjectPermDTO] , isTemplate :: Bool , createdAt :: UTCTime , updatedAt :: UTCTime } deriving (Generic, Show) -instance Eq QuestionnaireList where +instance Eq ProjectList where a == b = a.uuid == b.uuid && a.name == b.name diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireReply.hs b/wizard-server/src/Wizard/Model/Project/ProjectReply.hs similarity index 95% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireReply.hs rename to wizard-server/src/Wizard/Model/Project/ProjectReply.hs index ce5bd7dac..80077e317 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireReply.hs +++ b/wizard-server/src/Wizard/Model/Project/ProjectReply.hs @@ -1,4 +1,4 @@ -module Wizard.Model.Questionnaire.QuestionnaireReply where +module Wizard.Model.Project.ProjectReply where import Data.Aeson import Data.Hashable diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSimple.hs b/wizard-server/src/Wizard/Model/Project/ProjectSimple.hs similarity index 54% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSimple.hs rename to wizard-server/src/Wizard/Model/Project/ProjectSimple.hs index 533284c8d..20eabbd04 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSimple.hs +++ b/wizard-server/src/Wizard/Model/Project/ProjectSimple.hs @@ -1,9 +1,9 @@ -module Wizard.Model.Questionnaire.QuestionnaireSimple where +module Wizard.Model.Project.ProjectSimple where import qualified Data.UUID as U import GHC.Generics -data QuestionnaireSimple = QuestionnaireSimple +data ProjectSimple = ProjectSimple { uuid :: U.UUID , name :: String } diff --git a/wizard-server/src/Wizard/Model/Project/ProjectSimpleWithPerm.hs b/wizard-server/src/Wizard/Model/Project/ProjectSimpleWithPerm.hs new file mode 100644 index 000000000..29ee0c6a3 --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/ProjectSimpleWithPerm.hs @@ -0,0 +1,16 @@ +module Wizard.Model.Project.ProjectSimpleWithPerm where + +import qualified Data.UUID as U +import GHC.Generics + +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Project + +data ProjectSimpleWithPerm = ProjectSimpleWithPerm + { uuid :: U.UUID + , visibility :: ProjectVisibility + , sharing :: ProjectSharing + , tenantUuid :: U.UUID + , permissions :: [ProjectPerm] + } + deriving (Generic, Eq, Show) diff --git a/wizard-server/src/Wizard/Model/Project/ProjectState.hs b/wizard-server/src/Wizard/Model/Project/ProjectState.hs new file mode 100644 index 000000000..fc8bd36d5 --- /dev/null +++ b/wizard-server/src/Wizard/Model/Project/ProjectState.hs @@ -0,0 +1,9 @@ +module Wizard.Model.Project.ProjectState where + +import GHC.Generics + +data ProjectState + = DefaultProjectState + | MigratingProjectState + | OutdatedProjectState + deriving (Show, Eq, Generic, Read) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSuggestion.hs b/wizard-server/src/Wizard/Model/Project/ProjectSuggestion.hs similarity index 57% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSuggestion.hs rename to wizard-server/src/Wizard/Model/Project/ProjectSuggestion.hs index 9bc850bd7..b328a822e 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSuggestion.hs +++ b/wizard-server/src/Wizard/Model/Project/ProjectSuggestion.hs @@ -1,9 +1,9 @@ -module Wizard.Model.Questionnaire.QuestionnaireSuggestion where +module Wizard.Model.Project.ProjectSuggestion where import qualified Data.UUID as U import GHC.Generics -data QuestionnaireSuggestion = QuestionnaireSuggestion +data ProjectSuggestion = ProjectSuggestion { uuid :: U.UUID , name :: String , description :: Maybe String diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireUtil.hs b/wizard-server/src/Wizard/Model/Project/ProjectUtil.hs similarity index 88% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireUtil.hs rename to wizard-server/src/Wizard/Model/Project/ProjectUtil.hs index 237f6d176..374a0d43b 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireUtil.hs +++ b/wizard-server/src/Wizard/Model/Project/ProjectUtil.hs @@ -1,4 +1,4 @@ -module Wizard.Model.Questionnaire.QuestionnaireUtil where +module Wizard.Model.Project.ProjectUtil where import qualified Data.List as L import Data.Maybe (fromJust) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireVersion.hs b/wizard-server/src/Wizard/Model/Project/Version/ProjectVersion.hs similarity index 71% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireVersion.hs rename to wizard-server/src/Wizard/Model/Project/Version/ProjectVersion.hs index 6e0063436..ba34fd0aa 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireVersion.hs +++ b/wizard-server/src/Wizard/Model/Project/Version/ProjectVersion.hs @@ -1,4 +1,4 @@ -module Wizard.Model.Questionnaire.QuestionnaireVersion where +module Wizard.Model.Project.Version.ProjectVersion where import Data.Aeson () import Data.Hashable @@ -8,12 +8,12 @@ import GHC.Generics import Wizard.Util.Hashable () -data QuestionnaireVersion = QuestionnaireVersion +data ProjectVersion = ProjectVersion { uuid :: U.UUID , name :: String , description :: Maybe String , eventUuid :: U.UUID - , questionnaireUuid :: U.UUID + , projectUuid :: U.UUID , tenantUuid :: U.UUID , createdBy :: Maybe U.UUID , createdAt :: UTCTime @@ -21,7 +21,7 @@ data QuestionnaireVersion = QuestionnaireVersion } deriving (Show, Generic) -instance Eq QuestionnaireVersion where +instance Eq ProjectVersion where a == b = a.uuid == b.uuid && a.name == b.name @@ -29,4 +29,4 @@ instance Eq QuestionnaireVersion where && a.eventUuid == b.eventUuid && a.createdBy == b.createdBy -instance Hashable QuestionnaireVersion +instance Hashable ProjectVersion diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireVersionList.hs b/wizard-server/src/Wizard/Model/Project/Version/ProjectVersionList.hs similarity index 75% rename from wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireVersionList.hs rename to wizard-server/src/Wizard/Model/Project/Version/ProjectVersionList.hs index 8a5680ed7..6f76481d8 100644 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireVersionList.hs +++ b/wizard-server/src/Wizard/Model/Project/Version/ProjectVersionList.hs @@ -1,4 +1,4 @@ -module Wizard.Model.Questionnaire.QuestionnaireVersionList where +module Wizard.Model.Project.Version.ProjectVersionList where import Data.Time import qualified Data.UUID as U @@ -6,7 +6,7 @@ import GHC.Generics import WizardLib.Public.Model.User.UserSuggestion -data QuestionnaireVersionList = QuestionnaireVersionList +data ProjectVersionList = ProjectVersionList { uuid :: U.UUID , name :: String , description :: Maybe String @@ -17,7 +17,7 @@ data QuestionnaireVersionList = QuestionnaireVersionList } deriving (Show, Generic) -instance Eq QuestionnaireVersionList where +instance Eq ProjectVersionList where a == b = a.uuid == b.uuid && a.name == b.name diff --git a/wizard-server/src/Wizard/Model/Questionnaire/MigratorState.hs b/wizard-server/src/Wizard/Model/Questionnaire/MigratorState.hs deleted file mode 100644 index 741d8d75f..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/MigratorState.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Model.Questionnaire.MigratorState where - -import qualified Data.UUID as U -import GHC.Generics - -data MigratorState = MigratorState - { oldQuestionnaireUuid :: U.UUID - , newQuestionnaireUuid :: U.UUID - , resolvedQuestionUuids :: [U.UUID] - , tenantUuid :: U.UUID - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireAclHelpers.hs b/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireAclHelpers.hs deleted file mode 100644 index c5ab8c2f2..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireAclHelpers.hs +++ /dev/null @@ -1,63 +0,0 @@ -module Wizard.Model.Questionnaire.QuestionnaireAclHelpers where - -import qualified Data.UUID as U - -import Wizard.Model.Acl.Acl -import Wizard.Model.Questionnaire.QuestionnairePerm - -getUserUuidsForViewerPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserUuidsForViewerPerm = getUserUuidsForPerm _VIEW_PERM - -getUserUuidsForCommenterPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserUuidsForCommenterPerm = getUserUuidsForPerm _COMMENT_PERM - -getUserUuidsForEditorPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserUuidsForEditorPerm = getUserUuidsForPerm _EDIT_PERM - -getUserUuidsForOwnerPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserUuidsForOwnerPerm = getUserUuidsForPerm _ADMIN_PERM - -getUserUuidsForPerm :: QuestionnairePermC questionnairePerm => String -> [questionnairePerm] -> [U.UUID] -getUserUuidsForPerm desiredPerm = foldl go [] - where - go :: QuestionnairePermC questionnairePerm => [U.UUID] -> questionnairePerm -> [U.UUID] - go acc qtnPerm = - case qtnPerm.memberType of - UserQuestionnairePermType -> - if desiredPerm `elem` qtnPerm.perms - then acc ++ [qtnPerm.memberUuid] - else acc - _ -> acc - -getUserGroupUuidsForViewerPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserGroupUuidsForViewerPerm = getUserGroupUuidsForPerm _VIEW_PERM - -getUserGroupUuidsForCommenterPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserGroupUuidsForCommenterPerm = getUserGroupUuidsForPerm _COMMENT_PERM - -getUserGroupUuidsForEditorPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserGroupUuidsForEditorPerm = getUserGroupUuidsForPerm _EDIT_PERM - -getUserGroupUuidsForOwnerPerm :: QuestionnairePermC questionnairePerm => [questionnairePerm] -> [U.UUID] -getUserGroupUuidsForOwnerPerm = getUserGroupUuidsForPerm _ADMIN_PERM - -getUserGroupUuidsForPerm :: QuestionnairePermC questionnairePerm => String -> [questionnairePerm] -> [U.UUID] -getUserGroupUuidsForPerm desiredPerm = foldl go [] - where - go :: QuestionnairePermC questionnairePerm => [U.UUID] -> questionnairePerm -> [U.UUID] - go acc qtnPerm = - case qtnPerm.memberType of - UserGroupQuestionnairePermType -> - if desiredPerm `elem` qtnPerm.perms - then acc ++ [qtnPerm.memberUuid] - else acc - _ -> acc - -removeUserPermission :: QuestionnairePermC questionnairePerm => U.UUID -> [questionnairePerm] -> [questionnairePerm] -removeUserPermission userUuidToDelete = filter go - where - go :: QuestionnairePermC questionnairePerm => questionnairePerm -> Bool - go qtnPerm = - case qtnPerm.memberType of - UserQuestionnairePermType -> qtnPerm.memberUuid /= userUuidToDelete - _ -> True diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireContentDM.hs b/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireContentDM.hs deleted file mode 100644 index 17b94167a..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireContentDM.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Model.Questionnaire.QuestionnaireContentDM where - -import qualified Data.Map.Strict as M - -import Wizard.Model.Questionnaire.QuestionnaireContent - -defaultQuestionnaireContent :: QuestionnaireContent -defaultQuestionnaireContent = - QuestionnaireContent - { phaseUuid = Nothing - , replies = M.empty - , labels = M.empty - } diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetail.hs b/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetail.hs deleted file mode 100644 index 7a0f230e9..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetail.hs +++ /dev/null @@ -1,23 +0,0 @@ -module Wizard.Model.Questionnaire.QuestionnaireDetail where - -import qualified Data.UUID as U -import GHC.Generics - -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire - -data QuestionnaireDetail = QuestionnaireDetail - { uuid :: U.UUID - , name :: String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing - , knowledgeModelPackageId :: String - , selectedQuestionTagUuids :: [U.UUID] - , isTemplate :: Bool - , migrationUuid :: Maybe U.UUID - , permissions :: [QuestionnairePermDTO] - , questionnaireActionsAvailable :: Int - , questionnaireImportersAvailable :: Int - , fileCount :: Int - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailQuestionnaire.hs b/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailQuestionnaire.hs deleted file mode 100644 index d3a9fe0f7..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireDetailQuestionnaire.hs +++ /dev/null @@ -1,24 +0,0 @@ -module Wizard.Model.Questionnaire.QuestionnaireDetailQuestionnaire where - -import qualified Data.UUID as U -import GHC.Generics - -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireFileSimple - -data QuestionnaireDetailQuestionnaire = QuestionnaireDetailQuestionnaire - { uuid :: U.UUID - , name :: String - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing - , knowledgeModelPackageId :: String - , selectedQuestionTagUuids :: [U.UUID] - , isTemplate :: Bool - , migrationUuid :: Maybe U.UUID - , permissions :: [QuestionnairePermDTO] - , files :: [QuestionnaireFileSimple] - , questionnaireActionsAvailable :: Int - , questionnaireImportersAvailable :: Int - } - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnairePerm.hs b/wizard-server/src/Wizard/Model/Questionnaire/QuestionnairePerm.hs deleted file mode 100644 index 49b3c6eb1..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnairePerm.hs +++ /dev/null @@ -1,38 +0,0 @@ -module Wizard.Model.Questionnaire.QuestionnairePerm where - -import qualified Data.UUID as U -import GHC.Generics -import GHC.Records - -import Wizard.Model.Acl.Acl - -data QuestionnairePermType - = UserQuestionnairePermType - | UserGroupQuestionnairePermType - deriving (Show, Eq, Generic, Read) - -data QuestionnairePerm = QuestionnairePerm - { questionnaireUuid :: U.UUID - , memberType :: QuestionnairePermType - , memberUuid :: U.UUID - , perms :: [String] - , tenantUuid :: U.UUID - } - deriving (Generic, Eq, Show) - -class - ( HasField "perms" questionnairePerm [String] - , HasField "memberUuid" questionnairePerm U.UUID - , HasField "memberType" questionnairePerm QuestionnairePermType - ) => - QuestionnairePermC questionnairePerm - -instance QuestionnairePermC QuestionnairePerm - -ownerPermissions = [_VIEW_PERM, _COMMENT_PERM, _EDIT_PERM, _ADMIN_PERM] - -editorPermissions = [_VIEW_PERM, _COMMENT_PERM, _EDIT_PERM] - -commentatorPermissions = [_VIEW_PERM, _COMMENT_PERM] - -viewerPermissions = [_VIEW_PERM] diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSimpleWithPerm.hs b/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSimpleWithPerm.hs deleted file mode 100644 index 90ece4922..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireSimpleWithPerm.hs +++ /dev/null @@ -1,16 +0,0 @@ -module Wizard.Model.Questionnaire.QuestionnaireSimpleWithPerm where - -import qualified Data.UUID as U -import GHC.Generics - -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnairePerm - -data QuestionnaireSimpleWithPerm = QuestionnaireSimpleWithPerm - { uuid :: U.UUID - , visibility :: QuestionnaireVisibility - , sharing :: QuestionnaireSharing - , tenantUuid :: U.UUID - , permissions :: [QuestionnairePerm] - } - deriving (Generic, Eq, Show) diff --git a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireState.hs b/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireState.hs deleted file mode 100644 index 532816b73..000000000 --- a/wizard-server/src/Wizard/Model/Questionnaire/QuestionnaireState.hs +++ /dev/null @@ -1,9 +0,0 @@ -module Wizard.Model.Questionnaire.QuestionnaireState where - -import GHC.Generics - -data QuestionnaireState - = QSDefault - | QSMigrating - | QSOutdated - deriving (Show, Eq, Generic) diff --git a/wizard-server/src/Wizard/Model/Statistics/InstanceStatistics.hs b/wizard-server/src/Wizard/Model/Statistics/InstanceStatistics.hs index a26beaf41..249b76ee5 100644 --- a/wizard-server/src/Wizard/Model/Statistics/InstanceStatistics.hs +++ b/wizard-server/src/Wizard/Model/Statistics/InstanceStatistics.hs @@ -5,7 +5,7 @@ import GHC.Generics data InstanceStatistics = InstanceStatistics { userCount :: Int , pkgCount :: Int - , qtnCount :: Int + , prjCount :: Int , knowledgeModelEditorCount :: Int , docCount :: Int , tmlCount :: Int diff --git a/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfig.hs b/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfig.hs index 64872a4bd..8e228510d 100644 --- a/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfig.hs +++ b/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfig.hs @@ -9,7 +9,7 @@ import GHC.Generics import Shared.Common.Model.Config.SimpleFeature import Shared.OpenId.Model.OpenId.OpenIdClientParameter import Shared.OpenId.Model.OpenId.OpenIdClientStyle -import Wizard.Model.Questionnaire.Questionnaire hiding (uuid) +import Wizard.Model.Project.Project hiding (uuid) import WizardLib.Public.Model.Tenant.Config.TenantConfig data TenantConfig = TenantConfig @@ -21,7 +21,7 @@ data TenantConfig = TenantConfig , lookAndFeel :: TenantConfigLookAndFeel , registry :: TenantConfigRegistry , knowledgeModel :: TenantConfigKnowledgeModel - , questionnaire :: TenantConfigQuestionnaire + , project :: TenantConfigProject , submission :: TenantConfigSubmission , features :: TenantConfigFeatures , owl :: TenantConfigOwl @@ -40,7 +40,7 @@ instance Eq TenantConfig where && dashboardAndLoginScreen a == dashboardAndLoginScreen b && lookAndFeel a == lookAndFeel b && registry a == registry b - && questionnaire a == questionnaire b + && project a == project b && submission a == submission b && features a == features b && owl a == owl b @@ -230,54 +230,54 @@ instance Eq TenantConfigKnowledgeModelPublicPackagePattern where && a.minVersion == b.minVersion && a.maxVersion == b.maxVersion -data TenantConfigQuestionnaire = TenantConfigQuestionnaire +data TenantConfigProject = TenantConfigProject { tenantUuid :: U.UUID - , questionnaireVisibility :: TenantConfigQuestionnaireVisibility - , questionnaireSharing :: TenantConfigQuestionnaireSharing - , questionnaireCreation :: QuestionnaireCreation - , projectTagging :: TenantConfigQuestionnaireProjectTagging + , projectVisibility :: TenantConfigProjectVisibility + , projectSharing :: TenantConfigProjectSharing + , projectCreation :: ProjectCreation + , projectTagging :: TenantConfigProjectProjectTagging , summaryReport :: SimpleFeature - , feedback :: TenantConfigQuestionnaireFeedback + , feedback :: TenantConfigProjectFeedback , createdAt :: UTCTime , updatedAt :: UTCTime } deriving (Generic, Show) -instance Eq TenantConfigQuestionnaire where +instance Eq TenantConfigProject where a == b = - a.questionnaireVisibility == b.questionnaireVisibility - && a.questionnaireSharing == b.questionnaireSharing - && a.questionnaireCreation == b.questionnaireCreation + a.projectVisibility == b.projectVisibility + && a.projectSharing == b.projectSharing + && a.projectCreation == b.projectCreation && a.projectTagging == b.projectTagging && a.summaryReport == b.summaryReport && a.feedback == b.feedback -data TenantConfigQuestionnaireVisibility = TenantConfigQuestionnaireVisibility +data TenantConfigProjectVisibility = TenantConfigProjectVisibility { enabled :: Bool - , defaultValue :: QuestionnaireVisibility + , defaultValue :: ProjectVisibility } deriving (Generic, Eq, Show) -data TenantConfigQuestionnaireSharing = TenantConfigQuestionnaireSharing +data TenantConfigProjectSharing = TenantConfigProjectSharing { enabled :: Bool - , defaultValue :: QuestionnaireSharing + , defaultValue :: ProjectSharing , anonymousEnabled :: Bool } deriving (Generic, Eq, Show) -data QuestionnaireCreation - = CustomQuestionnaireCreation - | TemplateQuestionnaireCreation - | TemplateAndCustomQuestionnaireCreation +data ProjectCreation + = CustomProjectCreation + | TemplateProjectCreation + | TemplateAndCustomProjectCreation deriving (Generic, Eq, Show, Read) -data TenantConfigQuestionnaireProjectTagging = TenantConfigQuestionnaireProjectTagging +data TenantConfigProjectProjectTagging = TenantConfigProjectProjectTagging { enabled :: Bool , tags :: [String] } deriving (Generic, Eq, Show) -data TenantConfigQuestionnaireFeedback = TenantConfigQuestionnaireFeedback +data TenantConfigProjectFeedback = TenantConfigProjectFeedback { enabled :: Bool , token :: String , owner :: String diff --git a/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigDM.hs b/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigDM.hs index 6a9d73a0e..7e3d59621 100644 --- a/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigDM.hs +++ b/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigDM.hs @@ -4,7 +4,7 @@ import qualified Data.UUID as U import Shared.Common.Model.Config.SimpleFeature import Shared.Common.Util.Date -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Model.User.User @@ -98,45 +98,45 @@ defaultKnowledgeModelPublic = , knowledgeModelPackages = [] } -defaultQuestionnaire :: TenantConfigQuestionnaire -defaultQuestionnaire = - TenantConfigQuestionnaire +defaultProject :: TenantConfigProject +defaultProject = + TenantConfigProject { tenantUuid = U.nil - , questionnaireVisibility = defaultQuestionnaireVisibility - , questionnaireSharing = defaultQuestionnaireSharing - , questionnaireCreation = TemplateAndCustomQuestionnaireCreation - , projectTagging = defaultQuestionnaireProjectTagging + , projectVisibility = defaultProjectVisibility + , projectSharing = defaultProjectSharing + , projectCreation = TemplateAndCustomProjectCreation + , projectTagging = defaultProjectProjectTagging , summaryReport = SimpleFeature True , feedback = defaultFeedback , createdAt = dt' 2018 1 20 , updatedAt = dt' 2018 1 20 } -defaultQuestionnaireVisibility :: TenantConfigQuestionnaireVisibility -defaultQuestionnaireVisibility = - TenantConfigQuestionnaireVisibility +defaultProjectVisibility :: TenantConfigProjectVisibility +defaultProjectVisibility = + TenantConfigProjectVisibility { enabled = True - , defaultValue = PrivateQuestionnaire + , defaultValue = PrivateProjectVisibility } -defaultQuestionnaireSharing :: TenantConfigQuestionnaireSharing -defaultQuestionnaireSharing = - TenantConfigQuestionnaireSharing +defaultProjectSharing :: TenantConfigProjectSharing +defaultProjectSharing = + TenantConfigProjectSharing { enabled = True - , defaultValue = RestrictedQuestionnaire + , defaultValue = RestrictedProjectSharing , anonymousEnabled = True } -defaultQuestionnaireProjectTagging :: TenantConfigQuestionnaireProjectTagging -defaultQuestionnaireProjectTagging = - TenantConfigQuestionnaireProjectTagging +defaultProjectProjectTagging :: TenantConfigProjectProjectTagging +defaultProjectProjectTagging = + TenantConfigProjectProjectTagging { enabled = True , tags = [] } -defaultFeedback :: TenantConfigQuestionnaireFeedback +defaultFeedback :: TenantConfigProjectFeedback defaultFeedback = - TenantConfigQuestionnaireFeedback + TenantConfigProjectFeedback { enabled = False , token = "" , owner = "" diff --git a/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigEM.hs b/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigEM.hs index 63a2db30c..4ec31d37f 100644 --- a/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigEM.hs +++ b/wizard-server/src/Wizard/Model/Tenant/Config/TenantConfigEM.hs @@ -47,10 +47,10 @@ instance SensitiveData TenantConfigKnowledgeModel where process key entity = entity {integrationConfig = encryptAES256WithB64 key entity.integrationConfig} -instance SensitiveData TenantConfigQuestionnaire where +instance SensitiveData TenantConfigProject where process key entity = entity {feedback = process key entity.feedback} -instance SensitiveData TenantConfigQuestionnaireFeedback where +instance SensitiveData TenantConfigProjectFeedback where process key entity = entity {token = encryptAES256WithB64 key entity.token} instance SensitiveData TenantConfigFeatures diff --git a/wizard-server/src/Wizard/Model/Tenant/Limit/TenantLimitBundle.hs b/wizard-server/src/Wizard/Model/Tenant/Limit/TenantLimitBundle.hs index 1f6688acd..90ed50689 100644 --- a/wizard-server/src/Wizard/Model/Tenant/Limit/TenantLimitBundle.hs +++ b/wizard-server/src/Wizard/Model/Tenant/Limit/TenantLimitBundle.hs @@ -13,7 +13,7 @@ data TenantLimitBundle = TenantLimitBundle , knowledgeModelEditors :: Int , documentTemplates :: Int , documentTemplateDrafts :: Int - , questionnaires :: Int + , projects :: Int , documents :: Int , locales :: Int , storage :: Int64 diff --git a/wizard-server/src/Wizard/S3/Project/ProjectFileS3.hs b/wizard-server/src/Wizard/S3/Project/ProjectFileS3.hs new file mode 100644 index 000000000..edf057e84 --- /dev/null +++ b/wizard-server/src/Wizard/S3/Project/ProjectFileS3.hs @@ -0,0 +1,43 @@ +module Wizard.S3.Project.ProjectFileS3 where + +import qualified Data.ByteString.Char8 as BS +import qualified Data.Conduit as C +import qualified Data.UUID as U +import Network.Minio + +import Shared.Common.S3.Common +import Shared.Common.Util.String (f') +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () + +folderName = "project-files" + +retrieveFile :: U.UUID -> U.UUID -> AppContextM BS.ByteString +retrieveFile projectUuid fileUuid = createGetObjectFn (f' "%s/%s/%s" [folderName, U.toString projectUuid, U.toString fileUuid]) + +retrieveFileConduitAction :: U.UUID -> U.UUID -> AppContextM (Minio (C.ConduitM () BS.ByteString Minio ())) +retrieveFileConduitAction projectUuid fileUuid = createGetObjectConduitActionFn (f' "%s/%s/%s" [folderName, U.toString projectUuid, U.toString fileUuid]) + +putFile :: U.UUID -> U.UUID -> String -> BS.ByteString -> AppContextM String +putFile projectUuid fileUuid contentType = createPutObjectFn (f' "%s/%s/%s" [folderName, U.toString projectUuid, U.toString fileUuid]) (Just contentType) Nothing + +putFileConduit :: U.UUID -> U.UUID -> String -> String -> Minio (C.ConduitM () BS.ByteString Minio ()) -> AppContextM String +putFileConduit projectUuid fileUuid contentType contentDisposition = createPutObjectConduitFn (f' "%s/%s/%s" [folderName, U.toString projectUuid, U.toString fileUuid]) (Just contentType) (Just contentDisposition) + +presignGetFileUrl :: U.UUID -> U.UUID -> Int -> AppContextM String +presignGetFileUrl projectUuid fileUuid = createPresignedGetObjectUrl (f' "%s/%s/%s" [folderName, U.toString projectUuid, U.toString fileUuid]) + +removeFiles :: U.UUID -> AppContextM () +removeFiles projectUuid = createRemoveObjectFn (f' "%s/%s" [folderName, U.toString projectUuid]) + +removeFile :: U.UUID -> U.UUID -> AppContextM () +removeFile projectUuid fileUuid = createRemoveObjectFn (f' "%s/%s/%s" [folderName, U.toString projectUuid, U.toString fileUuid]) + +makeBucket :: AppContextM () +makeBucket = createMakeBucketFn + +purgeBucket :: AppContextM () +purgeBucket = createPurgeBucketFn + +removeBucket :: AppContextM () +removeBucket = createRemoveBucketFn diff --git a/wizard-server/src/Wizard/S3/Questionnaire/QuestionnaireFileS3.hs b/wizard-server/src/Wizard/S3/Questionnaire/QuestionnaireFileS3.hs deleted file mode 100644 index 42c8ba0cf..000000000 --- a/wizard-server/src/Wizard/S3/Questionnaire/QuestionnaireFileS3.hs +++ /dev/null @@ -1,43 +0,0 @@ -module Wizard.S3.Questionnaire.QuestionnaireFileS3 where - -import qualified Data.ByteString.Char8 as BS -import qualified Data.Conduit as C -import qualified Data.UUID as U -import Network.Minio - -import Shared.Common.S3.Common -import Shared.Common.Util.String (f') -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () - -folderName = "questionnaire-files" - -retrieveFile :: U.UUID -> U.UUID -> AppContextM BS.ByteString -retrieveFile questionnaireUuid fileUuid = createGetObjectFn (f' "%s/%s/%s" [folderName, U.toString questionnaireUuid, U.toString fileUuid]) - -retrieveFileConduitAction :: U.UUID -> U.UUID -> AppContextM (Minio (C.ConduitM () BS.ByteString Minio ())) -retrieveFileConduitAction questionnaireUuid fileUuid = createGetObjectConduitActionFn (f' "%s/%s/%s" [folderName, U.toString questionnaireUuid, U.toString fileUuid]) - -putFile :: U.UUID -> U.UUID -> String -> BS.ByteString -> AppContextM String -putFile questionnaireUuid fileUuid contentType = createPutObjectFn (f' "%s/%s/%s" [folderName, U.toString questionnaireUuid, U.toString fileUuid]) (Just contentType) Nothing - -putFileConduit :: U.UUID -> U.UUID -> String -> String -> Minio (C.ConduitM () BS.ByteString Minio ()) -> AppContextM String -putFileConduit questionnaireUuid fileUuid contentType contentDisposition = createPutObjectConduitFn (f' "%s/%s/%s" [folderName, U.toString questionnaireUuid, U.toString fileUuid]) (Just contentType) (Just contentDisposition) - -presignGetFileUrl :: U.UUID -> U.UUID -> Int -> AppContextM String -presignGetFileUrl questionnaireUuid fileUuid = createPresignedGetObjectUrl (f' "%s/%s/%s" [folderName, U.toString questionnaireUuid, U.toString fileUuid]) - -removeFiles :: U.UUID -> AppContextM () -removeFiles questionnaireUuid = createRemoveObjectFn (f' "%s/%s" [folderName, U.toString questionnaireUuid]) - -removeFile :: U.UUID -> U.UUID -> AppContextM () -removeFile questionnaireUuid fileUuid = createRemoveObjectFn (f' "%s/%s/%s" [folderName, U.toString questionnaireUuid, U.toString fileUuid]) - -makeBucket :: AppContextM () -makeBucket = createMakeBucketFn - -purgeBucket :: AppContextM () -purgeBucket = createPurgeBucketFn - -removeBucket :: AppContextM () -removeBucket = createRemoveBucketFn diff --git a/wizard-server/src/Wizard/Service/Config/Client/ClientConfigMapper.hs b/wizard-server/src/Wizard/Service/Config/Client/ClientConfigMapper.hs index 485c51a12..842d94176 100644 --- a/wizard-server/src/Wizard/Service/Config/Client/ClientConfigMapper.hs +++ b/wizard-server/src/Wizard/Service/Config/Client/ClientConfigMapper.hs @@ -11,8 +11,8 @@ import Wizard.Model.Tenant.Tenant import Wizard.Model.User.UserProfile import WizardLib.Public.Model.Tenant.Config.TenantConfig -toClientConfigDTO :: ServerConfig -> TenantConfigOrganization -> TenantConfigAuthentication -> TenantConfigPrivacyAndSupport -> TenantConfigDashboardAndLoginScreen -> TenantConfigLookAndFeel -> TenantConfigRegistry -> TenantConfigQuestionnaire -> TenantConfigSubmission -> TenantConfigFeatures -> TenantConfigOwl -> Maybe UserProfile -> [String] -> Tenant -> ClientConfigDTO -toClientConfigDTO serverConfig tcOrganization tcAuthentication tcPrivacyAndSupport tcDashboardAndLoginScreen tcLookAndFeel tcRegistry tcQuestionnaire tcSubmission tcFeatures tcOwl mUserProfile tours tenant = +toClientConfigDTO :: ServerConfig -> TenantConfigOrganization -> TenantConfigAuthentication -> TenantConfigPrivacyAndSupport -> TenantConfigDashboardAndLoginScreen -> TenantConfigLookAndFeel -> TenantConfigRegistry -> TenantConfigProject -> TenantConfigSubmission -> TenantConfigFeatures -> TenantConfigOwl -> Maybe UserProfile -> [String] -> Tenant -> ClientConfigDTO +toClientConfigDTO serverConfig tcOrganization tcAuthentication tcPrivacyAndSupport tcDashboardAndLoginScreen tcLookAndFeel tcRegistry tcProject tcSubmission tcFeatures tcOwl mUserProfile tours tenant = ClientConfigDTO { user = mUserProfile , tours = tours @@ -22,7 +22,7 @@ toClientConfigDTO serverConfig tcOrganization tcAuthentication tcPrivacyAndSuppo , dashboardAndLoginScreen = tcDashboardAndLoginScreen , lookAndFeel = tcLookAndFeel , registry = toClientConfigRegistryDTO serverConfig.registry tcRegistry - , questionnaire = toClientConfigQuestionnaireDTO tcQuestionnaire + , project = toClientConfigProjectDTO tcProject , submission = SimpleFeature $ tcSubmission.enabled , cloud = toClientConfigCloudDTO serverConfig.cloud tenant , owl = tcOwl @@ -87,12 +87,12 @@ toClientConfigRegistryDTO serverConfig tenantConfig = , url = serverConfig.clientUrl } -toClientConfigQuestionnaireDTO :: TenantConfigQuestionnaire -> ClientConfigQuestionnaireDTO -toClientConfigQuestionnaireDTO tenantConfig = - ClientConfigQuestionnaireDTO - { questionnaireVisibility = tenantConfig.questionnaireVisibility - , questionnaireSharing = tenantConfig.questionnaireSharing - , questionnaireCreation = tenantConfig.questionnaireCreation +toClientConfigProjectDTO :: TenantConfigProject -> ClientConfigProjectDTO +toClientConfigProjectDTO tenantConfig = + ClientConfigProjectDTO + { projectVisibility = tenantConfig.projectVisibility + , projectSharing = tenantConfig.projectSharing + , projectCreation = tenantConfig.projectCreation , projectTagging = SimpleFeature $ tenantConfig.projectTagging.enabled , summaryReport = tenantConfig.summaryReport , feedback = SimpleFeature $ tenantConfig.feedback.enabled diff --git a/wizard-server/src/Wizard/Service/Config/Client/ClientConfigService.hs b/wizard-server/src/Wizard/Service/Config/Client/ClientConfigService.hs index 60900997a..eaacb8ea9 100644 --- a/wizard-server/src/Wizard/Service/Config/Client/ClientConfigService.hs +++ b/wizard-server/src/Wizard/Service/Config/Client/ClientConfigService.hs @@ -14,7 +14,7 @@ import Wizard.Database.DAO.Tenant.Config.TenantConfigDashboardAndLoginScreenDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOwlDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigPrivacyAndSupportDAO -import Wizard.Database.DAO.Tenant.Config.TenantConfigQuestionnaireDAO +import Wizard.Database.DAO.Tenant.Config.TenantConfigProjectDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Database.DAO.Tenant.TenantDAO import Wizard.Database.DAO.User.UserGroupMembershipDAO @@ -51,7 +51,7 @@ getClientConfig mServerUrl mClientUrl = do return $ HousekeepingInProgressClientConfigDTO {message = "We’re currently upgrading the data to the latest version to enhance your experience"} ReadyForUseTenantState -> do throwErrorIfTenantIsDisabled mServerUrl tenant - (tcOrganization, tcAuthentication, tcPrivacyAndSupport, tcDashboardAndLoginScreen, tcLookAndFeel, tcRegistry, tcQuestionnaire, tcSubmission, tcFeatures, tcOwl) <- + (tcOrganization, tcAuthentication, tcPrivacyAndSupport, tcDashboardAndLoginScreen, tcLookAndFeel, tcRegistry, tcProject, tcSubmission, tcFeatures, tcOwl) <- case (serverConfig.cloud.enabled, mClientUrl) of (True, Just _) -> do tcOrganization <- findTenantConfigOrganizationByUuid tenant.uuid @@ -60,11 +60,11 @@ getClientConfig mServerUrl mClientUrl = do tcDashboardAndLoginScreen <- findTenantConfigDashboardAndLoginScreenByUuid tenant.uuid tcLookAndFeel <- findTenantConfigLookAndFeelByUuid tenant.uuid tcRegistry <- getTenantConfigRegistryByUuid tenant.uuid - tcQuestionnaire <- findTenantConfigQuestionnaireByUuid tenant.uuid + tcProject <- findTenantConfigProjectByUuid tenant.uuid tcSubmission <- findTenantConfigSubmissionByUuid tenant.uuid tcFeatures <- findTenantConfigFeaturesByUuid tenant.uuid tcOwl <- findTenantConfigOwlByUuid tenant.uuid - return (tcOrganization, tcAuthentication, tcPrivacyAndSupport, tcDashboardAndLoginScreen, tcLookAndFeel, tcRegistry, tcQuestionnaire, tcSubmission, tcFeatures, tcOwl) + return (tcOrganization, tcAuthentication, tcPrivacyAndSupport, tcDashboardAndLoginScreen, tcLookAndFeel, tcRegistry, tcProject, tcSubmission, tcFeatures, tcOwl) _ -> do tcOrganization <- findTenantConfigOrganization tcAuthentication <- getCurrentTenantConfigAuthentication @@ -72,11 +72,11 @@ getClientConfig mServerUrl mClientUrl = do tcDashboardAndLoginScreen <- findTenantConfigDashboardAndLoginScreen tcLookAndFeel <- findTenantConfigLookAndFeel tcRegistry <- getCurrentTenantConfigRegistry - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire + tcProject <- getCurrentTenantConfigProject tcSubmission <- findTenantConfigSubmission tcFeatures <- findTenantConfigFeatures tcOwl <- findTenantConfigOwl - return (tcOrganization, tcAuthentication, tcPrivacyAndSupport, tcDashboardAndLoginScreen, tcLookAndFeel, tcRegistry, tcQuestionnaire, tcSubmission, tcFeatures, tcOwl) + return (tcOrganization, tcAuthentication, tcPrivacyAndSupport, tcDashboardAndLoginScreen, tcLookAndFeel, tcRegistry, tcProject, tcSubmission, tcFeatures, tcOwl) mUserProfile <- case mCurrentUser of Just currentUser -> do @@ -87,7 +87,7 @@ getClientConfig mServerUrl mClientUrl = do case mCurrentUser of Just currentUser -> findUserToursByUserUuid currentUser.uuid _ -> return [] - return $ toClientConfigDTO serverConfig tcOrganization tcAuthentication tcPrivacyAndSupport tcDashboardAndLoginScreen tcLookAndFeel tcRegistry tcQuestionnaire tcSubmission tcFeatures tcOwl mUserProfile tours tenant + return $ toClientConfigDTO serverConfig tcOrganization tcAuthentication tcPrivacyAndSupport tcDashboardAndLoginScreen tcLookAndFeel tcRegistry tcProject tcSubmission tcFeatures tcOwl mUserProfile tours tenant throwErrorIfTenantIsDisabled :: Maybe String -> Tenant -> AppContextM () throwErrorIfTenantIsDisabled mServerUrl tenant = unless tenant.enabled (throwError . NotExistsError $ _ERROR_VALIDATION__TENANT_OR_ACTIVE_PLAN_ABSENCE (fromMaybe "not-provided" mServerUrl)) diff --git a/wizard-server/src/Wizard/Service/Dev/DevOperationDefinitions.hs b/wizard-server/src/Wizard/Service/Dev/DevOperationDefinitions.hs index df33b6860..fcdc1776f 100644 --- a/wizard-server/src/Wizard/Service/Dev/DevOperationDefinitions.hs +++ b/wizard-server/src/Wizard/Service/Dev/DevOperationDefinitions.hs @@ -20,9 +20,9 @@ import Wizard.Service.KnowledgeModel.Editor.Event.EditorEventService import Wizard.Service.KnowledgeModel.Metamodel.MigrationService import Wizard.Service.Owl.OwlService import Wizard.Service.PersistentCommand.PersistentCommandService -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentService -import Wizard.Service.Questionnaire.Event.QuestionnaireEventService -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.Comment.ProjectCommentService +import Wizard.Service.Project.Event.ProjectEventService +import Wizard.Service.Project.ProjectService import Wizard.Service.Registry.RegistryService import Wizard.Service.UserToken.ApiKey.ApiKeyService import WizardLib.Public.Service.TemporaryFile.TemporaryFileService @@ -39,8 +39,8 @@ sections = , metamodelMigrator , owl , persistentCommand + , project , registry - , questionnaire , temporaryFile , user ] @@ -387,145 +387,145 @@ persistentCommand_run = } -- --------------------------------------------------------------------------------------------------------------------- --- REGISTRY +-- PROJECT -- --------------------------------------------------------------------------------------------------------------------- -registry :: DevSection AppContextM -registry = +project :: DevSection AppContextM +project = DevSection - { name = "Registry" + { name = "Project" , description = Nothing - , operations = [registry_syncWithRegistry, registry_pushKnowledgeModelBundle, registry_pushDocumentTemplateBundle, registry_pushLocaleBundle] + , operations = + [ project_cleanProjects + , project_squashAllEvents + , project_squashEventsForProject + , project_sendNotificationToNewAssignees + ] } -- --------------------------------------------------------------------------------------------------------------------- -registry_syncWithRegistry :: DevOperation AppContextM -registry_syncWithRegistry = +project_cleanProjects :: DevOperation AppContextM +project_cleanProjects = DevOperation - { name = "Sync with registry" + { name = "Clean Projects" , description = Nothing , parameters = [] , function = \reqDto -> do - synchronizeData + cleanProjects return "Done" } -- --------------------------------------------------------------------------------------------------------------------- -registry_pushKnowledgeModelBundle :: DevOperation AppContextM -registry_pushKnowledgeModelBundle = +project_squashAllEvents :: DevOperation AppContextM +project_squashAllEvents = DevOperation - { name = "Push Knowledge model Bundle" + { name = "Squash All Events" , description = Nothing - , parameters = - [ DevOperationParameter - { name = "id" - , aType = StringDevOperationParameterType - } - ] + , parameters = [] , function = \reqDto -> do - pushKnowledgeModelBundle (head reqDto.parameters) + squashProjectEvents return "Done" } -- --------------------------------------------------------------------------------------------------------------------- -registry_pushDocumentTemplateBundle :: DevOperation AppContextM -registry_pushDocumentTemplateBundle = +project_squashEventsForProject :: DevOperation AppContextM +project_squashEventsForProject = DevOperation - { name = "Push Document Template Bundle" + { name = "Squash Events for Project" , description = Nothing , parameters = [ DevOperationParameter - { name = "id" + { name = "projectUuid" , aType = StringDevOperationParameterType } ] , function = \reqDto -> do - pushDocumentTemplateBundle (head reqDto.parameters) + squashProjectEventsForProject (u' . head $ reqDto.parameters) return "Done" } -- --------------------------------------------------------------------------------------------------------------------- -registry_pushLocaleBundle :: DevOperation AppContextM -registry_pushLocaleBundle = +project_sendNotificationToNewAssignees :: DevOperation AppContextM +project_sendNotificationToNewAssignees = DevOperation - { name = "Push Locale Bundle" + { name = "Send Notification to New Assignees" , description = Nothing - , parameters = - [ DevOperationParameter - { name = "id" - , aType = StringDevOperationParameterType - } - ] + , parameters = [] , function = \reqDto -> do - pushLocaleBundle (head reqDto.parameters) + sendNotificationToNewAssignees return "Done" } -- --------------------------------------------------------------------------------------------------------------------- --- QUESTIONNAIRE +-- REGISTRY -- --------------------------------------------------------------------------------------------------------------------- -questionnaire :: DevSection AppContextM -questionnaire = +registry :: DevSection AppContextM +registry = DevSection - { name = "Questionnaire" + { name = "Registry" , description = Nothing - , operations = - [ questionnaire_cleanQuestionnaires - , questionnaire_squashAllEvents - , questionnaire_squashEventsForQuestionnaire - , questionnaire_sendNotificationToNewAssignees - ] + , operations = [registry_syncWithRegistry, registry_pushKnowledgeModelBundle, registry_pushDocumentTemplateBundle, registry_pushLocaleBundle] } -- --------------------------------------------------------------------------------------------------------------------- -questionnaire_cleanQuestionnaires :: DevOperation AppContextM -questionnaire_cleanQuestionnaires = +registry_syncWithRegistry :: DevOperation AppContextM +registry_syncWithRegistry = DevOperation - { name = "Clean Questionnaires" + { name = "Sync with registry" , description = Nothing , parameters = [] , function = \reqDto -> do - cleanQuestionnaires + synchronizeData return "Done" } -- --------------------------------------------------------------------------------------------------------------------- -questionnaire_squashAllEvents :: DevOperation AppContextM -questionnaire_squashAllEvents = +registry_pushKnowledgeModelBundle :: DevOperation AppContextM +registry_pushKnowledgeModelBundle = DevOperation - { name = "Squash All Events" + { name = "Push Knowledge model Bundle" , description = Nothing - , parameters = [] + , parameters = + [ DevOperationParameter + { name = "id" + , aType = StringDevOperationParameterType + } + ] , function = \reqDto -> do - squashQuestionnaireEvents + pushKnowledgeModelBundle (head reqDto.parameters) return "Done" } -- --------------------------------------------------------------------------------------------------------------------- -questionnaire_squashEventsForQuestionnaire :: DevOperation AppContextM -questionnaire_squashEventsForQuestionnaire = +registry_pushDocumentTemplateBundle :: DevOperation AppContextM +registry_pushDocumentTemplateBundle = DevOperation - { name = "Squash Events for Questionnaire" + { name = "Push Document Template Bundle" , description = Nothing , parameters = [ DevOperationParameter - { name = "questionnaireUuid" + { name = "id" , aType = StringDevOperationParameterType } ] , function = \reqDto -> do - squashQuestionnaireEventsForQuestionnaire (u' . head $ reqDto.parameters) + pushDocumentTemplateBundle (head reqDto.parameters) return "Done" } -- --------------------------------------------------------------------------------------------------------------------- -questionnaire_sendNotificationToNewAssignees :: DevOperation AppContextM -questionnaire_sendNotificationToNewAssignees = +registry_pushLocaleBundle :: DevOperation AppContextM +registry_pushLocaleBundle = DevOperation - { name = "Send Notification to New Assignees" + { name = "Push Locale Bundle" , description = Nothing - , parameters = [] + , parameters = + [ DevOperationParameter + { name = "id" + , aType = StringDevOperationParameterType + } + ] , function = \reqDto -> do - sendNotificationToNewAssignees + pushLocaleBundle (head reqDto.parameters) return "Done" } diff --git a/wizard-server/src/Wizard/Service/Document/Context/DocumentContextMapper.hs b/wizard-server/src/Wizard/Service/Document/Context/DocumentContextMapper.hs index 638193a60..53abad31f 100644 --- a/wizard-server/src/Wizard/Service/Document/Context/DocumentContextMapper.hs +++ b/wizard-server/src/Wizard/Service/Document/Context/DocumentContextMapper.hs @@ -9,11 +9,11 @@ import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleDTO import Wizard.Model.Document.Document import Wizard.Model.Document.DocumentContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList import Wizard.Model.Report.Report import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Model.User.User @@ -23,13 +23,13 @@ import qualified Wizard.Service.User.UserMapper as USR_Mapper toDocumentContext :: Document -> String - -> Questionnaire + -> Project -> Maybe U.UUID -> M.Map String Reply -> M.Map String [U.UUID] - -> Maybe QuestionnaireVersion - -> [QuestionnaireVersionList] - -> [QuestionnaireFileSimple] + -> Maybe ProjectVersion + -> [ProjectVersionList] + -> [ProjectFileSimple] -> KnowledgeModel -> Report -> KnowledgeModelPackage @@ -39,7 +39,7 @@ toDocumentContext -> [DocumentContextUserPerm] -> [DocumentContextUserGroupPerm] -> DocumentContext -toDocumentContext doc appClientUrl qtn phaseUuid replies labels mQtnVersion qtnVersionDtos qtnFiles km report pkg org mQtnCreatedBy mDocCreatedBy users groups = +toDocumentContext doc appClientUrl project phaseUuid replies labels mProjectVersion projectVersionDtos projectFiles km report pkg org mProjectCreatedBy mDocCreatedBy users groups = DocumentContext { config = DocumentContextConfig {clientUrl = appClientUrl} , document = @@ -51,21 +51,21 @@ toDocumentContext doc appClientUrl qtn phaseUuid replies labels mQtnVersion qtnV , createdBy = USR_Mapper.toDTO <$> mDocCreatedBy , createdAt = doc.createdAt } - , questionnaire = + , project = DocumentContextQuestionnaire - { uuid = qtn.uuid - , name = qtn.name - , description = qtn.description + { uuid = project.uuid + , name = project.name + , description = project.description , replies = replies , phaseUuid = phaseUuid , labels = labels - , versionUuid = fmap (.uuid) mQtnVersion - , versions = qtnVersionDtos - , projectTags = qtn.projectTags - , files = qtnFiles - , createdBy = USR_Mapper.toDTO <$> mQtnCreatedBy - , createdAt = qtn.createdAt - , updatedAt = qtn.updatedAt + , versionUuid = fmap (.uuid) mProjectVersion + , versions = projectVersionDtos + , projectTags = project.projectTags + , files = projectFiles + , createdBy = USR_Mapper.toDTO <$> mProjectCreatedBy + , createdAt = project.createdAt + , updatedAt = project.updatedAt } , knowledgeModel = km , report = report diff --git a/wizard-server/src/Wizard/Service/Document/Context/DocumentContextService.hs b/wizard-server/src/Wizard/Service/Document/Context/DocumentContextService.hs index 8a2423be2..f712262a5 100644 --- a/wizard-server/src/Wizard/Service/Document/Context/DocumentContextService.hs +++ b/wizard-server/src/Wizard/Service/Document/Context/DocumentContextService.hs @@ -13,24 +13,24 @@ import Shared.Common.Model.Common.Lens import Shared.Common.Util.List import Shared.KnowledgeModel.Model.KnowledgeModel.Event.KnowledgeModelEvent import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectFileDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Database.DAO.User.UserDAO import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document import Wizard.Model.Document.DocumentContext import Wizard.Model.Document.DocumentContextJM () -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireEventListLenses () -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireVersion +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Event.ProjectEventListLenses () +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.Version.ProjectVersion import Wizard.Service.Document.Context.DocumentContextMapper import Wizard.Service.KnowledgeModel.KnowledgeModelService -import Wizard.Service.Questionnaire.Compiler.CompilerService +import Wizard.Service.Project.Compiler.ProjectCompilerService import Wizard.Service.Report.ReportGenerator import Wizard.Service.Tenant.TenantHelper import qualified Wizard.Service.User.UserMapper as USR_Mapper @@ -38,10 +38,10 @@ import WizardLib.Public.Database.DAO.User.UserGroupDAO import WizardLib.Public.Model.User.UserGroup import qualified WizardLib.Public.Service.User.Group.UserGroupMapper as UGR_Mapper -createDocumentContext :: Document -> KnowledgeModelPackage -> [KnowledgeModelEvent] -> Questionnaire -> Maybe (M.Map String Reply) -> AppContextM DocumentContext -createDocumentContext doc pkg kmEditorEvents qtn mReplies = do - km <- compileKnowledgeModelWithCaching' kmEditorEvents (Just qtn.knowledgeModelPackageId) qtn.selectedQuestionTagUuids (not . null $ kmEditorEvents) - mQtnCreatedBy <- forM qtn.creatorUuid findUserByUuid +createDocumentContext :: Document -> KnowledgeModelPackage -> [KnowledgeModelEvent] -> Project -> Maybe (M.Map String Reply) -> AppContextM DocumentContext +createDocumentContext doc pkg kmEditorEvents project mReplies = do + km <- compileKnowledgeModelWithCaching' kmEditorEvents (Just project.knowledgeModelPackageId) project.selectedQuestionTagUuids (not . null $ kmEditorEvents) + mProjectCreatedBy <- forM project.creatorUuid findUserByUuid mDocCreatedBy <- forM doc.createdBy findUserByUuid tcOrganization <- findTenantConfigOrganization clientUrl <- getClientUrl @@ -50,40 +50,40 @@ createDocumentContext doc pkg kmEditorEvents qtn mReplies = do case mReplies of Just replies -> return (Nothing, replies, M.empty) _ -> do - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtn.uuid - let filteredQtnEvents = - case doc.questionnaireEventUuid of - Just eventUuid -> takeWhileInclusive (\e -> getUuid e /= eventUuid) qtnEvents - Nothing -> qtnEvents - let qtnCtn = compileQuestionnaire filteredQtnEvents - return (qtnCtn.phaseUuid, qtnCtn.replies, qtnCtn.labels) + projectEvents <- findProjectEventListsByProjectUuid project.uuid + let filteredProjectEvents = + case doc.projectEventUuid of + Just eventUuid -> takeWhileInclusive (\e -> getUuid e /= eventUuid) projectEvents + Nothing -> projectEvents + let projectContent = compileProjectEvents filteredProjectEvents + return (projectContent.phaseUuid, projectContent.replies, projectContent.labels) report <- generateReport phaseUuid km replies - mQtnVersion <- - case doc.questionnaireEventUuid of - (Just eventUuid) -> findQuestionnaireVersionByEventUuid' qtn.uuid eventUuid + mProjectVersion <- + case doc.projectEventUuid of + (Just eventUuid) -> findProjectVersionByEventUuid' project.uuid eventUuid _ -> return Nothing - qtnVersionsList <- findQuestionnaireVersionListByQuestionnaireUuidAndCreatedAt qtn.uuid (fmap (.createdAt) mQtnVersion) - qtnFiles <- - case doc.questionnaireUuid of - Just questionnaireUuid -> findQuestionnaireFilesSimpleByQuestionnaire questionnaireUuid + projectVersionsList <- findProjectVersionListByProjectUuidAndCreatedAt project.uuid (fmap (.createdAt) mProjectVersion) + projectFiles <- + case doc.projectUuid of + Just projectUuid -> findProjectFilesSimpleByProject projectUuid Nothing -> return [] - (users, groups) <- heSettingsToPerms qtn + (users, groups) <- heSettingsToPerms project return $ toDocumentContext doc clientUrl - qtn + project phaseUuid replies labels - mQtnVersion - qtnVersionsList - qtnFiles + mProjectVersion + projectVersionsList + projectFiles km report pkg tcOrganization - mQtnCreatedBy + mProjectCreatedBy mDocCreatedBy users groups @@ -91,28 +91,28 @@ createDocumentContext doc pkg kmEditorEvents qtn mReplies = do -- -------------------------------- -- PRIVATE -- -------------------------------- -findQuestionnaireVersionUuid :: U.UUID -> [QuestionnaireVersion] -> Maybe U.UUID -findQuestionnaireVersionUuid _ [] = Nothing -findQuestionnaireVersionUuid desiredEventUuid (version : rest) +findProjectVersionUuid :: U.UUID -> [ProjectVersion] -> Maybe U.UUID +findProjectVersionUuid _ [] = Nothing +findProjectVersionUuid desiredEventUuid (version : rest) | desiredEventUuid == version.eventUuid = Just $ version.uuid - | otherwise = findQuestionnaireVersionUuid desiredEventUuid rest + | otherwise = findProjectVersionUuid desiredEventUuid rest -heSettingsToPerms :: Questionnaire -> AppContextM ([DocumentContextUserPerm], [DocumentContextUserGroupPerm]) -heSettingsToPerms qtn = do - perms <- traverse heToDocumentContextPerm qtn.permissions +heSettingsToPerms :: Project -> AppContextM ([DocumentContextUserPerm], [DocumentContextUserGroupPerm]) +heSettingsToPerms project = do + perms <- traverse heToDocumentContextPerm project.permissions return $ partitionEithers perms -heToDocumentContextPerm :: QuestionnairePerm -> AppContextM (Either DocumentContextUserPerm DocumentContextUserGroupPerm) +heToDocumentContextPerm :: ProjectPerm -> AppContextM (Either DocumentContextUserPerm DocumentContextUserGroupPerm) heToDocumentContextPerm perm = case perm.memberType of - UserQuestionnairePermType -> do + UserProjectPermType -> do user <- findUserByUuid perm.memberUuid return . Left $ DocumentContextUserPerm { user = USR_Mapper.toDTO user , perms = perm.perms } - UserGroupQuestionnairePermType -> do + UserGroupProjectPermType -> do userGroup <- findUserGroupByUuid perm.memberUuid members <- findUsersByUserGroupUuid userGroup.uuid return . Right $ diff --git a/wizard-server/src/Wizard/Service/Document/DocumentAcl.hs b/wizard-server/src/Wizard/Service/Document/DocumentAcl.hs index 0bfcf12c9..8f9e6a01c 100644 --- a/wizard-server/src/Wizard/Service/Document/DocumentAcl.hs +++ b/wizard-server/src/Wizard/Service/Document/DocumentAcl.hs @@ -5,28 +5,28 @@ import qualified Data.UUID as U import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Model.Context.AppContext import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.QuestionnaireAcl +import Wizard.Model.Project.Project +import Wizard.Service.Project.ProjectAcl checkViewPermissionToDoc :: Maybe U.UUID -> AppContextM () -checkViewPermissionToDoc mQtnUuid = do - case mQtnUuid of - Just qtnUuid -> do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions +checkViewPermissionToDoc mProjectUuid = do + case mProjectUuid of + Just projectUuid -> do + project <- findProjectByUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions Nothing -> throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Read Document" -checkViewPermissionToDoc' :: Questionnaire -> AppContextM () -checkViewPermissionToDoc' qtn = checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions +checkViewPermissionToDoc' :: Project -> AppContextM () +checkViewPermissionToDoc' project = checkViewPermissionToProject project.visibility project.sharing project.permissions checkEditPermissionToDoc :: Maybe U.UUID -> AppContextM () -checkEditPermissionToDoc mQtnUuid = do - case mQtnUuid of - Just qtnUuid -> do +checkEditPermissionToDoc mProjectUuid = do + case mProjectUuid of + Just projectUuid -> do _ <- getCurrentUser - qtn <- findQuestionnaireByUuid qtnUuid - checkEditPermissionToQtn qtn.visibility qtn.sharing qtn.permissions + project <- findProjectByUuid projectUuid + checkEditPermissionToProject project.visibility project.sharing project.permissions Nothing -> throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Edit Document" diff --git a/wizard-server/src/Wizard/Service/Document/DocumentMapper.hs b/wizard-server/src/Wizard/Service/Document/DocumentMapper.hs index dbc94a2fe..a198eaabf 100644 --- a/wizard-server/src/Wizard/Service/Document/DocumentMapper.hs +++ b/wizard-server/src/Wizard/Service/Document/DocumentMapper.hs @@ -23,10 +23,10 @@ import Wizard.Model.Document.DocumentContext import Wizard.Model.Document.DocumentContextJM () import Wizard.Model.Document.DocumentList import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditor -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireEventListLenses () -import Wizard.Model.Questionnaire.QuestionnaireSimple +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.Event.ProjectEventListLenses () +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectSimple import Wizard.Model.Submission.SubmissionList toDTO :: DocumentList -> [SubmissionList] -> DocumentDTO @@ -35,9 +35,9 @@ toDTO doc submissions = { uuid = doc.uuid , name = doc.name , state = doc.state - , questionnaire = Just QuestionnaireSimple {uuid = doc.questionnaireUuid, name = doc.questionnaireName} - , questionnaireEventUuid = doc.questionnaireEventUuid - , questionnaireVersion = doc.questionnaireVersion + , project = Just ProjectSimple {uuid = doc.projectUuid, name = doc.projectName} + , projectEventUuid = doc.projectEventUuid + , projectVersion = doc.projectVersion , documentTemplateId = doc.documentTemplateId , documentTemplateName = doc.documentTemplateName , format = L.find (\f -> f.uuid == doc.formatUuid) $ doc.documentTemplateFormats @@ -51,15 +51,15 @@ toDTO doc submissions = , createdAt = doc.createdAt } -toDTOWithDocTemplate :: Document -> Questionnaire -> Maybe String -> [SubmissionList] -> DocumentTemplate -> DocumentTemplateFormatSimple -> DocumentDTO -toDTOWithDocTemplate doc qtn mQtnVersion submissions tml format = +toDTOWithDocTemplate :: Document -> Project -> Maybe String -> [SubmissionList] -> DocumentTemplate -> DocumentTemplateFormatSimple -> DocumentDTO +toDTOWithDocTemplate doc project mProjectVersion submissions tml format = DocumentDTO { uuid = doc.uuid , name = doc.name , state = doc.state - , questionnaire = Just $ QuestionnaireSimple {uuid = qtn.uuid, name = qtn.name} - , questionnaireEventUuid = doc.questionnaireEventUuid - , questionnaireVersion = mQtnVersion + , project = Just $ ProjectSimple {uuid = project.uuid, name = project.name} + , projectEventUuid = doc.projectEventUuid + , projectVersion = mProjectVersion , documentTemplateId = tml.tId , documentTemplateName = tml.name , format = Just format @@ -73,19 +73,19 @@ toDTOWithDocTemplate doc qtn mQtnVersion submissions tml format = , createdAt = doc.createdAt } -fromCreateDTO :: DocumentCreateDTO -> U.UUID -> Int -> [QuestionnaireEventList] -> Maybe UserDTO -> U.UUID -> UTCTime -> Document -fromCreateDTO dto docUuid repliesHash qtnEvents mCurrentUser tenantUuid now = +fromCreateDTO :: DocumentCreateDTO -> U.UUID -> Int -> [ProjectEventList] -> Maybe UserDTO -> U.UUID -> UTCTime -> Document +fromCreateDTO dto docUuid repliesHash projectEvents mCurrentUser tenantUuid now = Document { uuid = docUuid , name = trim dto.name , state = QueuedDocumentState , durability = PersistentDocumentDurability - , questionnaireUuid = Just dto.questionnaireUuid - , questionnaireEventUuid = - case dto.questionnaireEventUuid of - Just questionnaireEventUuid -> Just questionnaireEventUuid - Nothing -> fmap getUuid (lastSafe qtnEvents) - , questionnaireRepliesHash = repliesHash + , projectUuid = Just dto.projectUuid + , projectEventUuid = + case dto.projectEventUuid of + Just projectEventUuid -> Just projectEventUuid + Nothing -> fmap getUuid (lastSafe projectEvents) + , projectRepliesHash = repliesHash , documentTemplateId = dto.documentTemplateId , formatUuid = dto.formatUuid , createdBy = fmap (.uuid) mCurrentUser @@ -99,19 +99,19 @@ fromCreateDTO dto docUuid repliesHash qtnEvents mCurrentUser tenantUuid now = , createdAt = now } -fromTemporallyCreateDTO :: U.UUID -> Questionnaire -> Maybe U.UUID -> String -> U.UUID -> Int -> Maybe UserDTO -> U.UUID -> UTCTime -> Bool -> Document -fromTemporallyCreateDTO docUuid qtn questionnaireEventUuid documentTemplateId formatUuid repliesHash mCurrentUser tenantUuid now fromKnowledgeModelEditor = +fromTemporallyCreateDTO :: U.UUID -> Project -> Maybe U.UUID -> String -> U.UUID -> Int -> Maybe UserDTO -> U.UUID -> UTCTime -> Bool -> Document +fromTemporallyCreateDTO docUuid project projectEventUuid documentTemplateId formatUuid repliesHash mCurrentUser tenantUuid now fromKnowledgeModelEditor = Document { uuid = docUuid - , name = trim qtn.name + , name = trim project.name , state = QueuedDocumentState , durability = TemporallyDocumentDurability - , questionnaireUuid = + , projectUuid = if fromKnowledgeModelEditor then Nothing - else Just qtn.uuid - , questionnaireEventUuid = questionnaireEventUuid - , questionnaireRepliesHash = repliesHash + else Just project.uuid + , projectEventUuid = projectEventUuid + , projectRepliesHash = repliesHash , documentTemplateId = documentTemplateId , formatUuid = formatUuid , createdBy = fmap (.uuid) mCurrentUser @@ -146,14 +146,14 @@ toTemporaryPackage tenantUuid createdAt = , createdAt = createdAt } -toTemporaryQuestionnaire :: KnowledgeModelEditor -> KnowledgeModelPackage -> Maybe UserDTO -> Questionnaire -toTemporaryQuestionnaire kmEditor package mCurrentUser = - Questionnaire +toTemporaryProject :: KnowledgeModelEditor -> KnowledgeModelPackage -> Maybe UserDTO -> Project +toTemporaryProject kmEditor package mCurrentUser = + Project { uuid = kmEditor.uuid , name = kmEditor.name , description = Just kmEditor.description - , visibility = PrivateQuestionnaire - , sharing = RestrictedQuestionnaire + , visibility = PrivateProjectVisibility + , sharing = RestrictedProjectSharing , knowledgeModelPackageId = fromMaybe package.pId kmEditor.previousPackageId , selectedQuestionTagUuids = [] , projectTags = [] diff --git a/wizard-server/src/Wizard/Service/Document/DocumentService.hs b/wizard-server/src/Wizard/Service/Document/DocumentService.hs index defd41792..46963803d 100644 --- a/wizard-server/src/Wizard/Service/Document/DocumentService.hs +++ b/wizard-server/src/Wizard/Service/Document/DocumentService.hs @@ -32,9 +32,9 @@ import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDataDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorEventDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorReplyDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Localization.Messages.Public import Wizard.Model.Context.AclContext @@ -42,11 +42,11 @@ import Wizard.Model.Context.AppContext import Wizard.Model.Context.AppContextHelpers import Wizard.Model.Document.Document import Wizard.Model.DocumentTemplate.DocumentTemplateDraftData -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireEventListLenses () -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireVersion +import Wizard.Model.Project.Event.ProjectEventListLenses () +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.Version.ProjectVersion import Wizard.Model.Tenant.Config.TenantConfig import Wizard.S3.Document.DocumentS3 import Wizard.Service.Document.Context.DocumentContextService @@ -57,66 +57,66 @@ import Wizard.Service.DocumentTemplate.DocumentTemplateService import Wizard.Service.DocumentTemplate.DocumentTemplateValidation import qualified Wizard.Service.KnowledgeModel.Editor.EditorMapper as EditorMapper import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService -import Wizard.Service.Questionnaire.Compiler.CompilerService -import Wizard.Service.Questionnaire.QuestionnaireAcl +import Wizard.Service.Project.Compiler.ProjectCompilerService +import Wizard.Service.Project.ProjectAcl import Wizard.Service.Tenant.Limit.LimitService import WizardLib.Public.Api.Resource.TemporaryFile.TemporaryFileDTO import qualified WizardLib.Public.Service.TemporaryFile.TemporaryFileMapper as TemporaryFileMapper import WizardLib.Public.Service.TemporaryFile.TemporaryFileService getDocumentsPageDto :: Maybe U.UUID -> Maybe String -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page DocumentDTO) -getDocumentsPageDto mQuestionnaireUuid mDocumentTemplateId mQuery pageable sort = do +getDocumentsPageDto mProjectUuid mDocumentTemplateId mQuery pageable sort = do checkPermission _DOC_PERM - docPage <- findDocumentsPage mQuestionnaireUuid Nothing mDocumentTemplateId mQuery pageable sort + docPage <- findDocumentsPage mProjectUuid Nothing mDocumentTemplateId mQuery pageable sort traverse enhanceDocument docPage -getDocumentsForQtn :: U.UUID -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page DocumentDTO) -getDocumentsForQtn qtnUuid mQuery pageable sort = do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToDoc' qtn - docPage <- findDocumentsPage (Just qtnUuid) (Just qtn.name) Nothing mQuery pageable sort +getDocumentsForProject :: U.UUID -> Maybe String -> Pageable -> [Sort] -> AppContextM (Page DocumentDTO) +getDocumentsForProject projectUuid mQuery pageable sort = do + project <- findProjectByUuid projectUuid + checkViewPermissionToDoc' project + docPage <- findDocumentsPage (Just projectUuid) (Just project.name) Nothing mQuery pageable sort traverse enhanceDocument docPage createDocument :: DocumentCreateDTO -> AppContextM DocumentDTO createDocument reqDto = runInTransaction $ do - checkEditPermissionToDoc (Just reqDto.questionnaireUuid) + checkEditPermissionToDoc (Just reqDto.projectUuid) checkDocumentLimit checkStorageSize 0 - qtn <- findQuestionnaireByUuid reqDto.questionnaireUuid - tml <- getDocumentTemplateByUuidAndPackageId reqDto.documentTemplateId (Just qtn.knowledgeModelPackageId) + project <- findProjectByUuid reqDto.projectUuid + tml <- getDocumentTemplateByUuidAndPackageId reqDto.documentTemplateId (Just project.knowledgeModelPackageId) format <- findDocumentTemplateFormatByDocumentTemplateIdAndUuid reqDto.documentTemplateId reqDto.formatUuid validateMetamodelVersion tml uuid <- liftIO generateUuid mCurrentUser <- asks currentUser now <- liftIO getCurrentTime - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtn.uuid - let filteredQtnEvents = - case reqDto.questionnaireEventUuid of - Just eventUuid -> takeWhileInclusive (\e -> getUuid e /= eventUuid) qtnEvents - Nothing -> qtnEvents - let qtnCtn = compileQuestionnaire filteredQtnEvents + projectEvents <- findProjectEventListsByProjectUuid project.uuid + let filteredProjectEvents = + case reqDto.projectEventUuid of + Just eventUuid -> takeWhileInclusive (\e -> getUuid e /= eventUuid) projectEvents + Nothing -> projectEvents + let projectContent = compileProjectEvents filteredProjectEvents tcOrganization <- findTenantConfigOrganization - qtnVersions <- findQuestionnaireVersionsByQuestionnaireUuid qtn.uuid - let docContextHash = computeHash [] qtn qtnVersions qtnCtn.phaseUuid qtnCtn.replies tcOrganization mCurrentUser - let doc = fromCreateDTO reqDto uuid docContextHash filteredQtnEvents mCurrentUser qtn.tenantUuid now + projectVersions <- findProjectVersionsByProjectUuid project.uuid + let docContextHash = computeHash [] project projectVersions projectContent.phaseUuid projectContent.replies tcOrganization mCurrentUser + let doc = fromCreateDTO reqDto uuid docContextHash filteredProjectEvents mCurrentUser project.tenantUuid now insertDocument doc - pkg <- getPackageById qtn.knowledgeModelPackageId - publishToPersistentCommandQueue doc pkg [] qtn Nothing - return $ toDTOWithDocTemplate doc qtn Nothing [] tml format + pkg <- getPackageById project.knowledgeModelPackageId + publishToPersistentCommandQueue doc pkg [] project Nothing + return $ toDTOWithDocTemplate doc project Nothing [] tml format deleteDocument :: U.UUID -> AppContextM () deleteDocument docUuid = runInTransaction $ do doc <- findDocumentByUuid docUuid - checkEditPermissionToDoc doc.questionnaireUuid + checkEditPermissionToDoc doc.projectUuid void $ deleteDocumentByUuid docUuid downloadDocument :: U.UUID -> AppContextM TemporaryFileDTO downloadDocument docUuid = do runInTransaction $ do doc <- findDocumentByUuid docUuid - checkViewPermissionToDoc doc.questionnaireUuid + checkViewPermissionToDoc doc.projectUuid content <- retrieveDocumentContent docUuid let fileName = fromMaybe "export" doc.fileName let contentType = fromMaybe "text/plain" doc.contentType @@ -124,37 +124,37 @@ downloadDocument docUuid = do url <- createTemporaryFile fileName "application/octet-stream" mCurrentUserUuid (BSL.fromStrict content) return $ TemporaryFileMapper.toDTO url contentType -createDocumentPreviewForQtn :: U.UUID -> AppContextM (Document, TemporaryFileDTO) -createDocumentPreviewForQtn qtnUuid = +createDocumentPreviewForProject :: U.UUID -> AppContextM (Document, TemporaryFileDTO) +createDocumentPreviewForProject projectUuid = runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - case (qtn.documentTemplateId, qtn.formatUuid) of + project <- findProjectByUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + case (project.documentTemplateId, project.formatUuid) of (Just tmlId, Just formatUuid) -> do - tml <- getDocumentTemplateByUuidAndPackageId tmlId (Just qtn.knowledgeModelPackageId) - pkg <- getPackageById qtn.knowledgeModelPackageId - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtnUuid - let questionnaireEventUuid = fmap getUuid (lastSafe qtnEvents) - let qtnCtn = compileQuestionnaire qtnEvents - qtnVersions <- findQuestionnaireVersionsByQuestionnaireUuid qtn.uuid - createDocumentPreview tml pkg [] qtn qtnVersions questionnaireEventUuid qtnCtn.phaseUuid qtnCtn.replies formatUuid False + tml <- getDocumentTemplateByUuidAndPackageId tmlId (Just project.knowledgeModelPackageId) + pkg <- getPackageById project.knowledgeModelPackageId + projectEvents <- findProjectEventListsByProjectUuid projectUuid + let projectEventUuid = fmap getUuid (lastSafe projectEvents) + let projectContent = compileProjectEvents projectEvents + projectVersions <- findProjectVersionsByProjectUuid project.uuid + createDocumentPreview tml pkg [] project projectVersions projectEventUuid projectContent.phaseUuid projectContent.replies formatUuid False _ -> throwError $ UserError _ERROR_SERVICE_DOCUMENT__TEMPLATE_OR_FORMAT_NOT_SET_UP createDocumentPreviewForDocTmlDraft :: String -> AppContextM (Document, TemporaryFileDTO) createDocumentPreviewForDocTmlDraft tmlId = runInTransaction $ do draftData <- findDraftDataById tmlId - case (draftData.questionnaireUuid, draftData.knowledgeModelEditorUuid, draftData.formatUuid) of - (Just qtnUuid, _, Just formatUuid) -> do + case (draftData.projectUuid, draftData.knowledgeModelEditorUuid, draftData.formatUuid) of + (Just projectUuid, _, Just formatUuid) -> do draft <- findDraftById tmlId - qtn <- findQuestionnaireByUuid qtnUuid - pkg <- getPackageById qtn.knowledgeModelPackageId - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtn.uuid - let questionnaireEventUuid = fmap getUuid (lastSafe qtnEvents) - let qtnCtn = compileQuestionnaire qtnEvents - qtnVersions <- findQuestionnaireVersionsByQuestionnaireUuid qtn.uuid - createDocumentPreview draft pkg [] qtn qtnVersions questionnaireEventUuid qtnCtn.phaseUuid qtnCtn.replies formatUuid False + project <- findProjectByUuid projectUuid + pkg <- getPackageById project.knowledgeModelPackageId + checkViewPermissionToProject project.visibility project.sharing project.permissions + projectEvents <- findProjectEventListsByProjectUuid project.uuid + let projectEventUuid = fmap getUuid (lastSafe projectEvents) + let projectContent = compileProjectEvents projectEvents + projectVersions <- findProjectVersionsByProjectUuid project.uuid + createDocumentPreview draft pkg [] project projectVersions projectEventUuid projectContent.phaseUuid projectContent.replies formatUuid False (_, Just kmEditorUuid, Just formatUuid) -> do draft <- findDraftById tmlId let pkg = toTemporaryPackage draft.tenantUuid draft.createdAt @@ -165,21 +165,21 @@ createDocumentPreviewForDocTmlDraft tmlId = let replies = EditorMapper.toReplies kmEditorReplies checkPermission _KM_PERM mCurrentUser <- asks currentUser - let qtn = toTemporaryQuestionnaire editor pkg mCurrentUser - let questionnaireEventUuid = Nothing - createDocumentPreview draft pkg kmEvents qtn [] questionnaireEventUuid Nothing replies formatUuid True - _ -> throwError $ UserError _ERROR_SERVICE_DOCUMENT__QUESTIONNAIRE_OR_FORMAT_NOT_SET_UP + let project = toTemporaryProject editor pkg mCurrentUser + let projectEventUuid = Nothing + createDocumentPreview draft pkg kmEvents project [] projectEventUuid Nothing replies formatUuid True + _ -> throwError $ UserError _ERROR_SERVICE_DOCUMENT__PROJECT_OR_FORMAT_NOT_SET_UP -createDocumentPreview :: DocumentTemplate -> KnowledgeModelPackage -> [KnowledgeModelEvent] -> Questionnaire -> [QuestionnaireVersion] -> Maybe U.UUID -> Maybe U.UUID -> M.Map String Reply -> U.UUID -> Bool -> AppContextM (Document, TemporaryFileDTO) -createDocumentPreview tml pkg kmEditorEvents qtn qtnVersions questionnaireEventUuid phaseUuid replies formatUuid fromKnowledgeModelEditor = do +createDocumentPreview :: DocumentTemplate -> KnowledgeModelPackage -> [KnowledgeModelEvent] -> Project -> [ProjectVersion] -> Maybe U.UUID -> Maybe U.UUID -> M.Map String Reply -> U.UUID -> Bool -> AppContextM (Document, TemporaryFileDTO) +createDocumentPreview tml pkg kmEditorEvents project projectVersions projectEventUuid phaseUuid replies formatUuid fromKnowledgeModelEditor = do tcOrganization <- findTenantConfigOrganization mCurrentUser <- asks currentUser - let repliesHash = computeHash kmEditorEvents qtn qtnVersions phaseUuid replies tcOrganization mCurrentUser + let repliesHash = computeHash kmEditorEvents project projectVersions phaseUuid replies tcOrganization mCurrentUser logDebugI _CMP_SERVICE ("Replies hash: " ++ show repliesHash) docs <- if fromKnowledgeModelEditor - then findDocumentsForCurrentTenantFiltered [("questionnaire_replies_hash", show repliesHash), ("durability", "TemporallyDocumentDurability")] - else findDocumentsForCurrentTenantFiltered [("questionnaire_uuid", U.toString qtn.uuid), ("questionnaire_replies_hash", show repliesHash), ("durability", "TemporallyDocumentDurability")] + then findDocumentsForCurrentTenantFiltered [("project_replies_hash", show repliesHash), ("durability", "TemporallyDocumentDurability")] + else findDocumentsForCurrentTenantFiltered [("project_uuid", U.toString project.uuid), ("project_replies_hash", show repliesHash), ("durability", "TemporallyDocumentDurability")] case filter (filterAlreadyDoneDocument tml.tId formatUuid) docs of (doc : _) -> do logInfoI _CMP_SERVICE "Retrieving from cache" @@ -199,15 +199,15 @@ createDocumentPreview tml pkg kmEditorEvents qtn qtnVersions questionnaireEventU validateMetamodelVersion tml dUuid <- liftIO generateUuid now <- liftIO getCurrentTime - let doc = fromTemporallyCreateDTO dUuid qtn questionnaireEventUuid tml.tId formatUuid repliesHash mCurrentUser tcOrganization.tenantUuid now fromKnowledgeModelEditor + let doc = fromTemporallyCreateDTO dUuid project projectEventUuid tml.tId formatUuid repliesHash mCurrentUser tcOrganization.tenantUuid now fromKnowledgeModelEditor insertDocument doc let mReplies = if fromKnowledgeModelEditor then Just replies else Nothing - publishToPersistentCommandQueue doc pkg kmEditorEvents qtn mReplies + publishToPersistentCommandQueue doc pkg kmEditorEvents project mReplies return (doc, TemporaryFileMapper.emptyFileDTO) -publishToPersistentCommandQueue :: Document -> KnowledgeModelPackage -> [KnowledgeModelEvent] -> Questionnaire -> Maybe (M.Map String Reply) -> AppContextM () -publishToPersistentCommandQueue doc pkg kmEditorEvents qtn mReplies = do - docContext <- createDocumentContext doc pkg kmEditorEvents qtn mReplies +publishToPersistentCommandQueue :: Document -> KnowledgeModelPackage -> [KnowledgeModelEvent] -> Project -> Maybe (M.Map String Reply) -> AppContextM () +publishToPersistentCommandQueue doc pkg kmEditorEvents project mReplies = do + docContext <- createDocumentContext doc pkg kmEditorEvents project mReplies pUuid <- liftIO generateUuid let command = toDocPersistentCommand pUuid docContext doc insertPersistentCommand command diff --git a/wizard-server/src/Wizard/Service/Document/DocumentUtil.hs b/wizard-server/src/Wizard/Service/Document/DocumentUtil.hs index bef4efe7e..678975407 100644 --- a/wizard-server/src/Wizard/Service/Document/DocumentUtil.hs +++ b/wizard-server/src/Wizard/Service/Document/DocumentUtil.hs @@ -11,9 +11,9 @@ import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document import Wizard.Model.Document.DocumentList -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireVersion +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.Version.ProjectVersion import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Service.Document.DocumentMapper import Wizard.Service.Submission.SubmissionService @@ -31,14 +31,14 @@ filterAlreadyDoneDocument :: String -> U.UUID -> Document -> Bool filterAlreadyDoneDocument documentTemplateId formatUuid doc = (doc.state == DoneDocumentState || doc.state == ErrorDocumentState) && Just doc.documentTemplateId == Just documentTemplateId && Just doc.formatUuid == Just formatUuid -computeHash :: [KnowledgeModelEvent] -> Questionnaire -> [QuestionnaireVersion] -> Maybe U.UUID -> M.Map String Reply -> TenantConfigOrganization -> Maybe UserDTO -> Int -computeHash kmEditorEvents qtn versions phaseUuid replies tcOrganization mCurrentUser = +computeHash :: [KnowledgeModelEvent] -> Project -> [ProjectVersion] -> Maybe U.UUID -> M.Map String Reply -> TenantConfigOrganization -> Maybe UserDTO -> Int +computeHash kmEditorEvents project versions phaseUuid replies tcOrganization mCurrentUser = sum [ hash kmEditorEvents - , hash qtn.name - , hash qtn.description + , hash project.name + , hash project.description , hash versions - , hash qtn.projectTags + , hash project.projectTags , maybe 0 hash phaseUuid , hash . M.toList $ replies , hash tcOrganization diff --git a/wizard-server/src/Wizard/Service/DocumentTemplate/Bundle/DocumentTemplateBundleAudit.hs b/wizard-server/src/Wizard/Service/DocumentTemplate/Bundle/DocumentTemplateBundleAudit.hs index 607c33fca..791736a08 100644 --- a/wizard-server/src/Wizard/Service/DocumentTemplate/Bundle/DocumentTemplateBundleAudit.hs +++ b/wizard-server/src/Wizard/Service/DocumentTemplate/Bundle/DocumentTemplateBundleAudit.hs @@ -5,10 +5,10 @@ import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () auditBundleExport :: String -> AppContextM () -auditBundleExport = logAudit "template_bundle" "export" +auditBundleExport = logAudit "document_template_bundle" "export" auditBundlePullFromRegistry :: String -> AppContextM () -auditBundlePullFromRegistry = logAudit "template_bundle" "pullFromRegistry" +auditBundlePullFromRegistry = logAudit "document_template_bundle" "pullFromRegistry" auditBundleImportFromFile :: String -> AppContextM () -auditBundleImportFromFile = logAudit "template_bundle" "importFromFile" +auditBundleImportFromFile = logAudit "document_template_bundle" "importFromFile" diff --git a/wizard-server/src/Wizard/Service/DocumentTemplate/DocumentTemplateValidation.hs b/wizard-server/src/Wizard/Service/DocumentTemplate/DocumentTemplateValidation.hs index 90757fd52..5249a2825 100644 --- a/wizard-server/src/Wizard/Service/DocumentTemplate/DocumentTemplateValidation.hs +++ b/wizard-server/src/Wizard/Service/DocumentTemplate/DocumentTemplateValidation.hs @@ -15,7 +15,7 @@ import Shared.DocumentTemplate.Localization.Messages.Public import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate import Wizard.Api.Resource.DocumentTemplate.DocumentTemplateChangeDTO import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Localization.Messages.Public import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () @@ -50,22 +50,22 @@ validateDocumentTemplateIdUniqueness tmlId = do validateDocumentTemplateDeletion :: String -> AppContextM () validateDocumentTemplateDeletion tmlId = do - validateUsageBySomeQuestionnaire tmlId + validateUsageBySomeProject tmlId validateUsageBySomeDocument tmlId -validateUsageBySomeQuestionnaire :: String -> AppContextM () -validateUsageBySomeQuestionnaire tmlId = do - questionnaires <- findQuestionnairesByDocumentTemplateId tmlId - case questionnaires of +validateUsageBySomeProject :: String -> AppContextM () +validateUsageBySomeProject tmlId = do + projects <- findProjectsByDocumentTemplateId tmlId + case projects of [] -> return () _ -> throwError . UserError $ - _ERROR_VALIDATION__TML_CANT_BE_DELETED_BECAUSE_IT_IS_USED_BY_SOME_OTHER_ENTITY tmlId "questionnaire" + _ERROR_VALIDATION__TML_CANT_BE_DELETED_BECAUSE_IT_IS_USED_BY_SOME_OTHER_ENTITY tmlId "project" validateUsageBySomeDocument :: String -> AppContextM () validateUsageBySomeDocument tmlId = do - questionnaires <- findDocumentsByDocumentTemplateId tmlId - case questionnaires of + projects <- findDocumentsByDocumentTemplateId tmlId + case projects of [] -> return () _ -> throwError . UserError $ diff --git a/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftMapper.hs b/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftMapper.hs index 1a8d8ed89..77de0dab9 100644 --- a/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftMapper.hs +++ b/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftMapper.hs @@ -14,7 +14,7 @@ import Wizard.Model.DocumentTemplate.DocumentTemplateDraftData import Wizard.Model.DocumentTemplate.DocumentTemplateDraftDetail import Wizard.Model.DocumentTemplate.DocumentTemplateDraftList import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorSuggestion -import Wizard.Model.Questionnaire.QuestionnaireSuggestion +import Wizard.Model.Project.ProjectSuggestion toDraftList :: DocumentTemplate -> DocumentTemplateDraftList toDraftList tml = @@ -29,8 +29,8 @@ toDraftList tml = , updatedAt = tml.updatedAt } -toDraftDetail :: DocumentTemplate -> [DocumentTemplateFormat] -> DocumentTemplateDraftData -> Maybe QuestionnaireSuggestion -> Maybe KnowledgeModelEditorSuggestion -> DocumentTemplateDraftDetail -toDraftDetail draft formats draftData mQuestionnaire mKmEditor = +toDraftDetail :: DocumentTemplate -> [DocumentTemplateFormat] -> DocumentTemplateDraftData -> Maybe ProjectSuggestion -> Maybe KnowledgeModelEditorSuggestion -> DocumentTemplateDraftDetail +toDraftDetail draft formats draftData mProject mKmEditor = DocumentTemplateDraftDetail { tId = draft.tId , name = draft.name @@ -41,8 +41,8 @@ toDraftDetail draft formats draftData mQuestionnaire mKmEditor = , license = draft.license , allowedPackages = draft.allowedPackages , formats = formats - , questionnaireUuid = draftData.questionnaireUuid - , questionnaire = mQuestionnaire + , projectUuid = draftData.projectUuid + , project = mProject , knowledgeModelEditorUuid = draftData.knowledgeModelEditorUuid , knowledgeModelEditor = mKmEditor , formatUuid = draftData.formatUuid @@ -62,8 +62,8 @@ toDraftDetail' draft formats = , license = draft.license , allowedPackages = draft.allowedPackages , formats = formats - , questionnaireUuid = Nothing - , questionnaire = Nothing + , projectUuid = Nothing + , project = Nothing , knowledgeModelEditorUuid = Nothing , knowledgeModelEditor = Nothing , formatUuid = Nothing @@ -71,11 +71,11 @@ toDraftDetail' draft formats = , updatedAt = draft.updatedAt } -toDraftDataDTO :: DocumentTemplateDraftData -> Maybe QuestionnaireSuggestion -> Maybe KnowledgeModelEditorSuggestion -> DocumentTemplateDraftDataDTO -toDraftDataDTO draftData mQuestionnaire mKmEditor = +toDraftDataDTO :: DocumentTemplateDraftData -> Maybe ProjectSuggestion -> Maybe KnowledgeModelEditorSuggestion -> DocumentTemplateDraftDataDTO +toDraftDataDTO draftData mProject mKmEditor = DocumentTemplateDraftDataDTO - { questionnaireUuid = draftData.questionnaireUuid - , questionnaire = mQuestionnaire + { projectUuid = draftData.projectUuid + , project = mProject , knowledgeModelEditorUuid = draftData.knowledgeModelEditorUuid , knowledgeModelEditor = mKmEditor , formatUuid = draftData.formatUuid @@ -182,7 +182,7 @@ fromCreateDraftData :: DocumentTemplate -> DocumentTemplateDraftData fromCreateDraftData draft = DocumentTemplateDraftData { documentTemplateId = draft.tId - , questionnaireUuid = Nothing + , projectUuid = Nothing , knowledgeModelEditorUuid = Nothing , formatUuid = Nothing , tenantUuid = draft.tenantUuid @@ -194,7 +194,7 @@ fromDraftDataChangeDTO :: DocumentTemplateDraftData -> DocumentTemplateDraftData fromDraftDataChangeDTO draftData reqDto = DocumentTemplateDraftData { documentTemplateId = draftData.documentTemplateId - , questionnaireUuid = reqDto.questionnaireUuid + , projectUuid = reqDto.projectUuid , knowledgeModelEditorUuid = reqDto.knowledgeModelEditorUuid , formatUuid = reqDto.formatUuid , tenantUuid = draftData.tenantUuid diff --git a/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftService.hs b/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftService.hs index db5ffb233..4e7a39358 100644 --- a/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftService.hs +++ b/wizard-server/src/Wizard/Service/DocumentTemplate/Draft/DocumentTemplateDraftService.hs @@ -27,7 +27,7 @@ import Wizard.Database.DAO.Document.DocumentDAO import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDAO import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDataDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Model.Context.AclContext import Wizard.Model.Context.AppContext @@ -86,15 +86,15 @@ getDraft tmlId = do draft <- findDraftById tmlId formats <- findDocumentTemplateFormats draft.tId draftData <- findDraftDataById tmlId - mQtnSuggestion <- - case draftData.questionnaireUuid of - Just qtnUuid -> findQuestionnaireSuggestionByUuid' qtnUuid + mProjectSuggestion <- + case draftData.projectUuid of + Just projectUuid -> findProjectSuggestionByUuid' projectUuid Nothing -> return Nothing mKmEditorSuggestion <- case draftData.knowledgeModelEditorUuid of Just knowledgeModelEditorUuid -> findKnowledgeModelEditorSuggestionByUuid' knowledgeModelEditorUuid Nothing -> return Nothing - return $ toDraftDetail draft formats draftData mQtnSuggestion mKmEditorSuggestion + return $ toDraftDetail draft formats draftData mProjectSuggestion mKmEditorSuggestion modifyDraft :: String -> DocumentTemplateDraftChangeDTO -> AppContextM DocumentTemplateDraftDetail modifyDraft tmlId reqDto = @@ -138,15 +138,15 @@ modifyDraftData tmlId reqDto = draftData <- findDraftDataById tmlId let updatedDraftData = fromDraftDataChangeDTO draftData reqDto updateDraftDataById updatedDraftData - mQtnSuggestion <- - case updatedDraftData.questionnaireUuid of - Just qtnUuid -> findQuestionnaireSuggestionByUuid' qtnUuid + mProjectSuggestion <- + case updatedDraftData.projectUuid of + Just projectUuid -> findProjectSuggestionByUuid' projectUuid Nothing -> return Nothing mKmEditorSuggestion <- case draftData.knowledgeModelEditorUuid of Just knowledgeModelEditorUuid -> findKnowledgeModelEditorSuggestionByUuid' knowledgeModelEditorUuid Nothing -> return Nothing - return $ toDraftDataDTO updatedDraftData mQtnSuggestion mKmEditorSuggestion + return $ toDraftDataDTO updatedDraftData mProjectSuggestion mKmEditorSuggestion deleteDraft :: String -> AppContextM () deleteDraft tmlId = diff --git a/wizard-server/src/Wizard/Service/Feedback/FeedbackMapper.hs b/wizard-server/src/Wizard/Service/Feedback/FeedbackMapper.hs index bd7a637c6..ebc61afbf 100644 --- a/wizard-server/src/Wizard/Service/Feedback/FeedbackMapper.hs +++ b/wizard-server/src/Wizard/Service/Feedback/FeedbackMapper.hs @@ -12,12 +12,12 @@ import Wizard.Model.Feedback.Feedback import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Service.Feedback.FeedbackUtil -toDTO :: ServerConfig -> TenantConfigQuestionnaire -> Feedback -> FeedbackDTO -toDTO serverConfig tcQuestionnaire f = +toDTO :: ServerConfig -> TenantConfigProject -> Feedback -> FeedbackDTO +toDTO serverConfig tcProject f = FeedbackDTO { uuid = f.uuid , issueId = f.issueId - , issueUrl = createIssueUrl serverConfig.feedback tcQuestionnaire.feedback f + , issueUrl = createIssueUrl serverConfig.feedback tcProject.feedback f , questionUuid = f.questionUuid , knowledgeModelPackageId = f.knowledgeModelPackageId , title = f.title diff --git a/wizard-server/src/Wizard/Service/Feedback/FeedbackService.hs b/wizard-server/src/Wizard/Service/Feedback/FeedbackService.hs index a96782289..ab8151f06 100644 --- a/wizard-server/src/Wizard/Service/Feedback/FeedbackService.hs +++ b/wizard-server/src/Wizard/Service/Feedback/FeedbackService.hs @@ -23,7 +23,7 @@ import Wizard.Api.Resource.Feedback.FeedbackCreateDTO import Wizard.Api.Resource.Feedback.FeedbackDTO import Wizard.Database.DAO.Common import Wizard.Database.DAO.Feedback.FeedbackDAO -import Wizard.Database.DAO.Tenant.Config.TenantConfigQuestionnaireDAO +import Wizard.Database.DAO.Tenant.Config.TenantConfigProjectDAO import Wizard.Integration.Http.GitHub.Runner import Wizard.Integration.Resource.GitHub.IssueIDTO import Wizard.Model.Context.AppContext @@ -39,8 +39,8 @@ getFeedbacksFiltered queryParams = do checkIfFeedbackIsEnabled feedbacks <- findFeedbacksFiltered queryParams serverConfig <- asks serverConfig - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - return . fmap (toDTO serverConfig tcQuestionnaire) $ feedbacks + tcProject <- getCurrentTenantConfigProject + return . fmap (toDTO serverConfig tcProject) $ feedbacks createFeedback :: FeedbackCreateDTO -> AppContextM FeedbackDTO createFeedback reqDto = @@ -59,16 +59,16 @@ createFeedbackWithGivenUuid fUuid reqDto = let feedback = fromCreateDTO reqDto fUuid issue.number tenantUuid now insertFeedback feedback serverConfig <- asks serverConfig - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - return $ toDTO serverConfig tcQuestionnaire feedback + tcProject <- getCurrentTenantConfigProject + return $ toDTO serverConfig tcProject feedback getFeedbackByUuid :: U.UUID -> AppContextM FeedbackDTO getFeedbackByUuid fUuid = do checkIfFeedbackIsEnabled feedback <- findFeedbackByUuid fUuid serverConfig <- asks serverConfig - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - return $ toDTO serverConfig tcQuestionnaire feedback + tcProject <- getCurrentTenantConfigProject + return $ toDTO serverConfig tcProject feedback synchronizeFeedbacksInAllApplications :: AppContextM () synchronizeFeedbacksInAllApplications = runFunctionForAllTenants "synchronizeFeedbacks" synchronizeFeedbacks @@ -81,8 +81,8 @@ synchronizeFeedbacks = catchError ( do runInTransaction $ do - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - if tcQuestionnaire.feedback.enabled + tcProject <- getCurrentTenantConfigProject + if tcProject.feedback.enabled then do logInfoI _CMP_WORKER "synchronizing feedback" issues <- getIssues @@ -103,4 +103,4 @@ synchronizeFeedbacks = Just issue -> updateFeedbackByUuid $ fromSimpleIssue feedback issue now Nothing -> deleteFeedbackByUuid feedback.uuid -checkIfFeedbackIsEnabled = checkIfTenantFeatureIsEnabled "Feedback" findTenantConfigQuestionnaire (.feedback.enabled) +checkIfFeedbackIsEnabled = checkIfTenantFeatureIsEnabled "Feedback" findTenantConfigProject (.feedback.enabled) diff --git a/wizard-server/src/Wizard/Service/Feedback/FeedbackUtil.hs b/wizard-server/src/Wizard/Service/Feedback/FeedbackUtil.hs index 1f8b5c31b..0618c12fa 100644 --- a/wizard-server/src/Wizard/Service/Feedback/FeedbackUtil.hs +++ b/wizard-server/src/Wizard/Service/Feedback/FeedbackUtil.hs @@ -5,6 +5,6 @@ import Wizard.Model.Config.ServerConfig import Wizard.Model.Feedback.Feedback import Wizard.Model.Tenant.Config.TenantConfig -createIssueUrl :: ServerConfigFeedback -> TenantConfigQuestionnaireFeedback -> Feedback -> String +createIssueUrl :: ServerConfigFeedback -> TenantConfigProjectFeedback -> Feedback -> String createIssueUrl serverConfig tenantConfig fbk = f' "%s/%s/%s/issues/%s" [serverConfig.webUrl, tenantConfig.owner, tenantConfig.repo, show fbk.issueId] diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationMapper.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationMapper.hs index 85b523d82..879d752e4 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationMapper.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationMapper.hs @@ -6,11 +6,11 @@ import qualified Data.UUID as U import Shared.KnowledgeModel.Model.KnowledgeModel.Event.KnowledgeModelEvent import Wizard.Api.Resource.KnowledgeModel.Editor.Event.KnowledgeModelEditorWebSocketEventDTO import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesDTO -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorEvent import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorReply -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import Wizard.Model.Websocket.WebsocketMessage import Wizard.Model.Websocket.WebsocketRecord import Wizard.Util.Websocket @@ -25,19 +25,19 @@ toWebsocketMessage record content = } toSetUserListMessage - :: [WebsocketRecord] -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerKnowledgeModelEditorActionDTO) + :: [WebsocketRecord] -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerKnowledgeModelEditorMessageDTO) toSetUserListMessage records record = toWebsocketMessage record $ - Success_ServerActionDTO . SetUserList_ServerKnowledgeModelEditorActionDTO $ + Success_ServerActionDTO . SetUserList_ServerKnowledgeModelEditorMessageDTO $ getCollaborators record.connectionUuid record.entityId records -toAddKnowledgeModelEditorWebsocketMessage :: AddKnowledgeModelEditorWebSocketEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerKnowledgeModelEditorActionDTO) +toAddKnowledgeModelEditorWebsocketMessage :: AddKnowledgeModelEditorWebSocketEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerKnowledgeModelEditorMessageDTO) toAddKnowledgeModelEditorWebsocketMessage reqDto record = - toWebsocketMessage record $ Success_ServerActionDTO . SetContent_ServerKnowledgeModelEditorActionDTO . AddKnowledgeModelEditorWebSocketEventDTO' $ reqDto + toWebsocketMessage record $ Success_ServerActionDTO . SetContent_ServerKnowledgeModelEditorMessageDTO . AddKnowledgeModelEditorWebSocketEventDTO' $ reqDto -toSetRepliesMessage :: SetRepliesDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerKnowledgeModelEditorActionDTO) +toSetRepliesMessage :: SetRepliesDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerKnowledgeModelEditorMessageDTO) toSetRepliesMessage reqDto record = - toWebsocketMessage record $ Success_ServerActionDTO . SetReplies_ServerKnowledgeModelEditorActionDTO $ reqDto + toWebsocketMessage record $ Success_ServerActionDTO . SetReplies_ServerKnowledgeModelEditorMessageDTO $ reqDto fromAddKnowledgeModelEditorWebSocketEventDTO :: KnowledgeModelEvent -> U.UUID -> U.UUID -> KnowledgeModelEditorEvent fromAddKnowledgeModelEditorWebSocketEventDTO KnowledgeModelEvent {..} knowledgeModelEditorUuid tenantUuid = KnowledgeModelEditorEvent {..} diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationService.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationService.hs index 330f8ba26..801544190 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationService.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/Collaboration/CollaborationService.hs @@ -11,7 +11,7 @@ import Shared.Common.Model.Error.Error import Shared.Common.Util.Uuid import Wizard.Api.Resource.KnowledgeModel.Editor.Event.KnowledgeModelEditorWebSocketEventDTO import Wizard.Api.Resource.KnowledgeModel.Editor.Event.SetRepliesDTO -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionJM () +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageJM () import Wizard.Api.Resource.Websocket.WebsocketActionJM () import Wizard.Cache.KnowledgeModelEditorWebsocketCache import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorMapper.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorMapper.hs index b2b912e53..c3a5d39ab 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorMapper.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorMapper.hs @@ -18,7 +18,7 @@ import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorList import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorRawEvent import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorReply import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorState -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageMapper toList :: KnowledgeModelEditor -> Maybe String -> KnowledgeModelEditorState -> KnowledgeModelEditorList diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorUtil.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorUtil.hs index 72aa44826..7bb5be82d 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorUtil.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Editor/EditorUtil.hs @@ -42,7 +42,7 @@ getEditorMergeCheckpointPackageId editor = do getEditorState :: KnowledgeModelEditor -> Int -> Maybe String -> AppContextM KnowledgeModelEditorState getEditorState editor eventSize mForkOfPackageId = do - mMs <- findMigratorStateByEditorUuid' editor.uuid + mMs <- findKnowledgeModelMigrationByEditorUuid' editor.uuid isMigrating mMs $ isEditing $ isMigrated mMs $ isOutdated isDefault where isMigrating mMs continue = diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/KnowledgeModelService.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/KnowledgeModelService.hs index 7148e3753..0d6e2ecb8 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/KnowledgeModelService.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/KnowledgeModelService.hs @@ -23,7 +23,7 @@ import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageUtil createKnowledgeModelPreview :: KnowledgeModelChangeDTO -> AppContextM KnowledgeModel createKnowledgeModelPreview reqDto = do mResolvedPackageId <- traverse resolvePackageId reqDto.knowledgeModelPackageId - checkIfPackageIsPublic mResolvedPackageId _QTN_PERM + checkIfPackageIsPublic mResolvedPackageId _PRJ_PERM compileKnowledgeModel reqDto.events mResolvedPackageId reqDto.tagUuids compileKnowledgeModel :: [KnowledgeModelEvent] -> Maybe String -> [U.UUID] -> AppContextM KnowledgeModel diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationAudit.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationAudit.hs similarity index 80% rename from wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationAudit.hs rename to wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationAudit.hs index 0700e34fd..de0a8f3cd 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationAudit.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationAudit.hs @@ -1,4 +1,4 @@ -module Wizard.Service.KnowledgeModel.Migration.MigrationAudit where +module Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationAudit where import qualified Data.Map.Strict as M import Data.Maybe @@ -14,7 +14,7 @@ import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditor auditKmMigrationCreate :: KnowledgeModelMigrationCreateDTO -> KnowledgeModelEditor -> AppContextM () auditKmMigrationCreate reqDto kmEditor = logAuditWithBody - "knowledge_model.migration" + "knowledge_model_migration" "create" (U.toString kmEditor.uuid) ( M.fromList @@ -24,16 +24,16 @@ auditKmMigrationCreate reqDto kmEditor = auditKmMigrationSolve :: U.UUID -> KnowledgeModelMigrationResolutionDTO -> AppContextM () auditKmMigrationSolve editorUuid reqDto = logAuditWithBody - "knowledge_model.migration" + "knowledge_model_migration" "solve" (U.toString editorUuid) (M.fromList [("originalEventUuid", U.toString $ reqDto.originalEventUuid), ("action", show reqDto.action)]) auditKmMigrationApplyAll :: U.UUID -> AppContextM () -auditKmMigrationApplyAll editorUuid = logAudit "knowledge_model.migration" "applyAll" (U.toString editorUuid) +auditKmMigrationApplyAll editorUuid = logAudit "knowledge_model_migration" "applyAll" (U.toString editorUuid) auditKmMigrationCancel :: U.UUID -> AppContextM () -auditKmMigrationCancel editorUuid = logAudit "knowledge_model.migration" "cancel" (U.toString editorUuid) +auditKmMigrationCancel editorUuid = logAudit "knowledge_model_migration" "cancel" (U.toString editorUuid) auditKmMigrationFinish :: U.UUID -> AppContextM () -auditKmMigrationFinish editorUuid = logAudit "knowledge_model.migration" "finish" (U.toString editorUuid) +auditKmMigrationFinish editorUuid = logAudit "knowledge_model_migration" "finish" (U.toString editorUuid) diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationMapper.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationMapper.hs similarity index 95% rename from wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationMapper.hs rename to wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationMapper.hs index 8e1cc891a..856795bda 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationMapper.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationMapper.hs @@ -1,4 +1,4 @@ -module Wizard.Service.KnowledgeModel.Migration.MigrationMapper where +module Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationMapper where import Data.Time import qualified Data.UUID as U diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationService.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationService.hs similarity index 89% rename from wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationService.hs rename to wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationService.hs index ef4a38aab..c34b6eb6a 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationService.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationService.hs @@ -1,4 +1,4 @@ -module Wizard.Service.KnowledgeModel.Migration.MigrationService where +module Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService where import Control.Monad (when) import Control.Monad.Except (throwError) @@ -25,9 +25,9 @@ import Wizard.Service.KnowledgeModel.Editor.Collaboration.CollaborationService import qualified Wizard.Service.KnowledgeModel.Editor.EditorMapper as EditorMapper import Wizard.Service.KnowledgeModel.Editor.EditorUtil import Wizard.Service.KnowledgeModel.KnowledgeModelService -import Wizard.Service.KnowledgeModel.Migration.MigrationAudit -import Wizard.Service.KnowledgeModel.Migration.MigrationMapper -import Wizard.Service.KnowledgeModel.Migration.MigrationValidation +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationAudit +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationMapper +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationValidation import Wizard.Service.KnowledgeModel.Migration.Migrator.Migrator import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService @@ -40,7 +40,7 @@ getCurrentMigrationDto editorUuid = do getCurrentMigration :: U.UUID -> AppContextM KnowledgeModelMigration getCurrentMigration editorUuid = do - ms <- findMigratorStateByEditorUuid editorUuid + ms <- findKnowledgeModelMigrationByEditorUuid editorUuid knowledgeModel <- compileKnowledgeModel ms.resultEvents (Just ms.editorPreviousPackageId) [] let stateWithEvent = case ms.state of @@ -68,7 +68,7 @@ createMigration kmEditorUuid reqDto = tenantUuid <- asks currentTenantUuid now <- liftIO getCurrentTime let ms = fromCreateDTO editor previousPkg editorEvents targetPkgId targetPkgEvents km tenantUuid now - insertMigratorState ms + insertKnowledgeModelMigration ms migratedMs <- migrateState ms auditKmMigrationCreate reqDto editor return $ toDTO migratedMs editor @@ -95,7 +95,7 @@ deleteCurrentMigration editorUuid = runInTransaction $ do checkPermission _KM_UPGRADE_PERM _ <- getCurrentMigration editorUuid - deleteMigratorStateByEditorUuid editorUuid + deleteKnowledgeModelMigrationByEditorUuid editorUuid auditKmMigrationCancel editorUuid return () @@ -132,7 +132,7 @@ solveAllConflicts editorUuid = checkPermission _KM_UPGRADE_PERM migratorState <- getCurrentMigration editorUuid updatedState <- go migratorState - updateMigratorState updatedState + updateKnowledgeModelMigration updatedState auditKmMigrationApplyAll editorUuid return () where @@ -150,9 +150,9 @@ solveAllConflicts editorUuid = nextState <- migrate (solveConflict migratorState conflictDto) go nextState Nothing -> do - let updatedMigratorState = migratorState {state = ErrorKnowledgeModelMigrationState} :: KnowledgeModelMigration - updateMigratorState updatedMigratorState - return updatedMigratorState + let updatedKnowledgeModelMigration = migratorState {state = ErrorKnowledgeModelMigrationState} :: KnowledgeModelMigration + updateKnowledgeModelMigration updatedKnowledgeModelMigration + return updatedKnowledgeModelMigration ErrorKnowledgeModelMigrationState -> return migratorState CompletedKnowledgeModelMigrationState -> return migratorState @@ -160,5 +160,5 @@ migrateState :: KnowledgeModelMigration -> AppContextM KnowledgeModelMigration migrateState ms = runInTransaction $ do migratedMs <- migrate ms - updateMigratorState migratedMs + updateKnowledgeModelMigration migratedMs return migratedMs diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationValidation.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationValidation.hs similarity index 88% rename from wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationValidation.hs rename to wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationValidation.hs index 2e38aacd3..d7ffe0607 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/MigrationValidation.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Migration/KnowledgeModelMigrationValidation.hs @@ -1,4 +1,4 @@ -module Wizard.Service.KnowledgeModel.Migration.MigrationValidation where +module Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationValidation where import Control.Monad.Except (catchError, throwError) import qualified Data.UUID as U @@ -12,7 +12,7 @@ import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageValidation validateMigrationUniqueness :: U.UUID -> AppContextM () validateMigrationUniqueness bUuid = do - mMs <- findMigratorStateByEditorUuid' bUuid + mMs <- findKnowledgeModelMigrationByEditorUuid' bUuid case mMs of Nothing -> return () Just _ -> throwError . UserError $ _ERROR_VALIDATION__KM_MIGRATION_UNIQUENESS diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageAudit.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageAudit.hs index 41382bc69..4e58ed8b6 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageAudit.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageAudit.hs @@ -8,7 +8,7 @@ import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditor -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project auditPackageFailedToDelete :: String -> String -> String -> AppContextM () auditPackageFailedToDelete entityId reasonType reasonId = @@ -26,6 +26,6 @@ auditPackageFailedToDeleteDueKmEditors :: String -> [KnowledgeModelEditor] -> Ap auditPackageFailedToDeleteDueKmEditors entityId knowledgeModelEditors = auditPackageFailedToDelete entityId "Knowledge Model Editor" (show $ fmap (\b -> U.toString $ b.uuid) knowledgeModelEditors) -auditPackageFailedToDeleteDueQuestionnaires :: String -> [Questionnaire] -> AppContextM () -auditPackageFailedToDeleteDueQuestionnaires entityId questionnaires = - auditPackageFailedToDelete entityId "Knowledge Model Editor" (show $ fmap (\qtn -> U.toString $ qtn.uuid) questionnaires) +auditPackageFailedToDeleteDueProjects :: String -> [Project] -> AppContextM () +auditPackageFailedToDeleteDueProjects entityId projects = + auditPackageFailedToDelete entityId "Knowledge Model Editor" (show $ fmap (\project -> U.toString $ project.uuid) projects) diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageValidation.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageValidation.hs index 72f23bd10..a7609f5dd 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageValidation.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Package/KnowledgeModelPackageValidation.hs @@ -8,7 +8,7 @@ import Shared.Coordinate.Util.Coordinate import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Localization.Messages.Public import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Localization.Messages.Public import Wizard.Model.Context.AppContext import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageAudit @@ -43,7 +43,7 @@ validatePackagesDeletion pkgIds = forM_ pkgIds validateOnePackage validateOnePackage :: String -> AppContextM () validateOnePackage pkgId = do validateUsageBySomeKnowledgeModelEditor pkgId - validateUsageBySomeQuestionnaire pkgId + validateUsageBySomeProject pkgId validateUsageBySomeOtherPackage pkgId validateUsageBySomeOtherPackage pkgId = do pkgs <- findPackagesByForkOfPackageId pkgId @@ -57,7 +57,7 @@ validatePackagesDeletion pkgIds = forM_ pkgIds validateOnePackage validatePackageDeletion :: String -> AppContextM () validatePackageDeletion pkgId = do validateUsageBySomeKnowledgeModelEditor pkgId - validateUsageBySomeQuestionnaire pkgId + validateUsageBySomeProject pkgId validateUsageBySomeOtherPackage pkgId where validateUsageBySomeOtherPackage pkgId = do @@ -86,12 +86,12 @@ validateUsageBySomeKnowledgeModelEditor pkgId = do throwError . UserError $ _ERROR_SERVICE_PKG__PKG_CANT_BE_DELETED_BECAUSE_IT_IS_USED_BY_SOME_OTHER_ENTITY pkgId "knowledge model" -validateUsageBySomeQuestionnaire :: String -> AppContextM () -validateUsageBySomeQuestionnaire pkgId = do - questionnaires <- findQuestionnairesByPackageId pkgId - case questionnaires of +validateUsageBySomeProject :: String -> AppContextM () +validateUsageBySomeProject pkgId = do + projects <- findProjectsByKnowledgeModelPackageId pkgId + case projects of [] -> return () _ -> do - auditPackageFailedToDeleteDueQuestionnaires pkgId questionnaires + auditPackageFailedToDeleteDueProjects pkgId projects throwError . UserError $ - _ERROR_SERVICE_PKG__PKG_CANT_BE_DELETED_BECAUSE_IT_IS_USED_BY_SOME_OTHER_ENTITY pkgId "questionnaire" + _ERROR_SERVICE_PKG__PKG_CANT_BE_DELETED_BECAUSE_IT_IS_USED_BY_SOME_OTHER_ENTITY pkgId "project" diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishService.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishService.hs index 77f28b3ad..642d82f99 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishService.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishService.hs @@ -26,7 +26,7 @@ import Wizard.Service.KnowledgeModel.Editor.Collaboration.CollaborationService import Wizard.Service.KnowledgeModel.Editor.EditorAudit import Wizard.Service.KnowledgeModel.Editor.EditorMapper import Wizard.Service.KnowledgeModel.Editor.EditorUtil -import Wizard.Service.KnowledgeModel.Migration.MigrationAudit +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationAudit import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService import Wizard.Service.KnowledgeModel.Publish.KnowledgeModelPublishMapper import Wizard.Service.KnowledgeModel.Publish.KnowledgeModelPublishValidation @@ -57,8 +57,8 @@ publishPackageFromMigration reqDto = do runInTransaction $ do checkPermission _KM_PUBLISH_PERM kmEditor <- findKnowledgeModelEditorByUuid reqDto.editorUuid - ms <- findMigratorStateByEditorUuid reqDto.editorUuid - deleteMigratorStateByEditorUuid reqDto.editorUuid + ms <- findKnowledgeModelMigrationByEditorUuid reqDto.editorUuid + deleteKnowledgeModelMigrationByEditorUuid reqDto.editorUuid auditKmMigrationFinish reqDto.editorUuid doPublishPackage reqDto.version diff --git a/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishValidation.hs b/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishValidation.hs index 02778ddf6..3c797a1f3 100644 --- a/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishValidation.hs +++ b/wizard-server/src/Wizard/Service/KnowledgeModel/Publish/KnowledgeModelPublishValidation.hs @@ -13,7 +13,7 @@ import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageValidation validateMigrationExistence editorUuid = do - mMs <- findMigratorStateByEditorUuid' editorUuid + mMs <- findKnowledgeModelMigrationByEditorUuid' editorUuid when (isJust mMs) (throwError . UserError $ _ERROR_SERVICE_KNOWLEDGE_MODEL_EDITOR__KM_MIGRATION_EXISTS) validateNewPackageVersion pkgVersion kmEditor org = do diff --git a/wizard-server/src/Wizard/Service/Mail/Mailer.hs b/wizard-server/src/Wizard/Service/Mail/Mailer.hs index 1e1ed57da..7a7ebef1c 100644 --- a/wizard-server/src/Wizard/Service/Mail/Mailer.hs +++ b/wizard-server/src/Wizard/Service/Mail/Mailer.hs @@ -17,7 +17,7 @@ import Shared.Common.Util.JSON import Shared.Common.Util.Uuid import Shared.PersistentCommand.Database.DAO.PersistentCommand.PersistentCommandDAO import Shared.PersistentCommand.Service.PersistentCommand.PersistentCommandMapper -import Wizard.Api.Resource.Questionnaire.QuestionnaireCommentThreadNotificationJM () +import Wizard.Api.Resource.Project.Comment.ProjectCommentThreadNotificationJM () import Wizard.Api.Resource.User.UserDTO import Wizard.Database.DAO.Common import Wizard.Database.DAO.Tenant.Config.TenantConfigPrivacyAndSupportDAO @@ -25,9 +25,9 @@ import Wizard.Database.DAO.User.UserDAO import Wizard.Model.Config.ServerConfig import Wizard.Model.Context.AppContext import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadNotification -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Comment.ProjectCommentThreadNotification +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Model.User.User import Wizard.Service.Tenant.TenantHelper @@ -156,28 +156,28 @@ sendTwoFactorAuthMail user code = } sendEmail body user.uuid -sendQuestionnaireInvitationMail :: Questionnaire -> Questionnaire -> AppContextM () -sendQuestionnaireInvitationMail oldQtn newQtn = +sendProjectInvitationMail :: Project -> Project -> AppContextM () +sendProjectInvitationMail oldProject newProject = runInTransaction $ do tcPrivacyAndSupport <- findTenantConfigPrivacyAndSupport tcLookAndFeel <- findTenantConfigLookAndFeel tcMail <- findTenantConfigMail clientUrl <- getClientUrl currentUser <- getCurrentUser - traverse_ (sendOneEmail tcPrivacyAndSupport tcLookAndFeel tcMail clientUrl currentUser) (filter (filterPermissions currentUser) newQtn.permissions) + traverse_ (sendOneEmail tcPrivacyAndSupport tcLookAndFeel tcMail clientUrl currentUser) (filter (filterPermissions currentUser) newProject.permissions) where - filterPermissions :: UserDTO -> QuestionnairePerm -> Bool - filterPermissions currentUser perm = perm.memberUuid /= currentUser.uuid && perm.memberUuid `notElem` fmap (.memberUuid) oldQtn.permissions - sendOneEmail :: TenantConfigPrivacyAndSupport -> TenantConfigLookAndFeel -> TenantConfigMail -> String -> UserDTO -> QuestionnairePerm -> AppContextM () + filterPermissions :: UserDTO -> ProjectPerm -> Bool + filterPermissions currentUser perm = perm.memberUuid /= currentUser.uuid && perm.memberUuid `notElem` fmap (.memberUuid) oldProject.permissions + sendOneEmail :: TenantConfigPrivacyAndSupport -> TenantConfigLookAndFeel -> TenantConfigMail -> String -> UserDTO -> ProjectPerm -> AppContextM () sendOneEmail tcPrivacyAndSupport tcLookAndFeel tcMail clientUrl currentUser permission = case permission.memberType of - UserGroupQuestionnairePermType -> return () - UserQuestionnairePermType -> do + UserGroupProjectPermType -> return () + UserProjectPermType -> do user <- findUserByUuid permission.memberUuid let body = MC.MailCommand { mode = "wizard" - , template = "questionnaireInvitation" + , template = "projectInvitation" , recipients = [MC.MailRecipient {uuid = Just user.uuid, email = user.email}] , parameters = M.fromList @@ -193,8 +193,8 @@ sendQuestionnaireInvitationMail oldQtn newQtn = , ("inviteeFirstName", A.string user.firstName) , ("inviteeLastName", A.string user.lastName) , ("inviteeEmail", A.string user.email) - , ("questionnaireUuid", A.uuid newQtn.uuid) - , ("questionnaireName", A.string newQtn.name) + , ("projectUuid", A.uuid newProject.uuid) + , ("projectName", A.string newProject.name) , ("ownerUuid", A.uuid currentUser.uuid) , ("ownerFirstName", A.string currentUser.firstName) , ("ownerLastName", A.string currentUser.lastName) @@ -203,16 +203,16 @@ sendQuestionnaireInvitationMail oldQtn newQtn = } sendEmail body currentUser.uuid -sendQuestionnaireCommentThreadAssignedMail :: [QuestionnaireCommentThreadNotification] -> AppContextM () -sendQuestionnaireCommentThreadAssignedMail notifications = +sendProjectCommentThreadAssignedMail :: [ProjectCommentThreadNotification] -> AppContextM () +sendProjectCommentThreadAssignedMail notifications = runInTransaction $ do case notifications of [] -> return () notification : _ -> do let notificationFn n = A.Object . KM.fromList $ - [ ("questionnaireUuid", A.uuid n.questionnaireUuid) - , ("questionnaireName", A.string n.questionnaireName) + [ ("projectUuid", A.uuid n.projectUuid) + , ("projectName", A.string n.projectName) , ("commentThreadUuid", A.uuid n.commentThreadUuid) , ("path", A.string n.path) , ("resolved", A.bool n.resolved) diff --git a/wizard-server/src/Wizard/Service/PersistentCommand/PersistentCommandExecutor.hs b/wizard-server/src/Wizard/Service/PersistentCommand/PersistentCommandExecutor.hs index 304d17ebc..20ec72c93 100644 --- a/wizard-server/src/Wizard/Service/PersistentCommand/PersistentCommandExecutor.hs +++ b/wizard-server/src/Wizard/Service/PersistentCommand/PersistentCommandExecutor.hs @@ -11,8 +11,8 @@ import qualified Wizard.Service.Document.DocumentCommandExecutor as DocumentComm import qualified Wizard.Service.DocumentTemplate.Asset.DocumentTemplateAssetCommandExecutor as DocumentTemplateAssetCommandExecutor import qualified Wizard.Service.KnowledgeModel.Metamodel.MigrationCommandExecutor as MetamodelMigratorCommandExecutor import qualified Wizard.Service.Locale.LocaleCommandExecutor as LocaleCommandExecutor -import qualified Wizard.Service.Questionnaire.File.QuestionnaireFileCommandExecutor as QuestionnaireFileCommandExecutor -import qualified Wizard.Service.Questionnaire.QuestionnaireCommandExecutor as QuestionnaireCommandExecutor +import qualified Wizard.Service.Project.File.ProjectFileCommandExecutor as ProjectFileCommandExecutor +import qualified Wizard.Service.Project.ProjectCommandExecutor as ProjectCommandExecutor import qualified Wizard.Service.Tenant.Config.ConfigCommandExecutor as TenantConfigCommandExecutor import qualified Wizard.Service.Tenant.TenantCommandExecutor as TenantCommandExecutor import qualified Wizard.Service.User.Group.UserGroupCommandExecutor as UserGroupCommandExecutor @@ -27,8 +27,8 @@ execute command | command.component == LocaleCommandExecutor.cComponent = LocaleCommandExecutor.execute command | command.component == MetamodelMigratorCommandExecutor.cComponent = MetamodelMigratorCommandExecutor.execute command | command.component == PrefabCommandExecutor.cComponent = PrefabCommandExecutor.execute command - | command.component == QuestionnaireCommandExecutor.cComponent = QuestionnaireCommandExecutor.execute command - | command.component == QuestionnaireFileCommandExecutor.cComponent = QuestionnaireFileCommandExecutor.execute command + | command.component == ProjectCommandExecutor.cComponent = ProjectCommandExecutor.execute command + | command.component == ProjectFileCommandExecutor.cComponent = ProjectFileCommandExecutor.execute command | command.component == TenantCommandExecutor.cComponent = TenantCommandExecutor.execute command | command.component == TenantConfigCommandExecutor.cComponent = TenantConfigCommandExecutor.execute command | command.component == TourCommandExecutor.cComponent = TourCommandExecutor.execute command diff --git a/wizard-server/src/Wizard/Service/Project/Action/ProjectActionAudit.hs b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionAudit.hs new file mode 100644 index 000000000..55d8b2ecd --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionAudit.hs @@ -0,0 +1,8 @@ +module Wizard.Service.Project.Action.ProjectActionAudit where + +import Shared.Audit.Service.Audit.AuditService +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () + +auditProjectActionStartEvent :: String -> AppContextM () +auditProjectActionStartEvent = logAudit "projectAction" "startEvent" diff --git a/wizard-server/src/Wizard/Service/Project/Action/ProjectActionMapper.hs b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionMapper.hs new file mode 100644 index 000000000..9e341e66c --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionMapper.hs @@ -0,0 +1,26 @@ +module Wizard.Service.Project.Action.ProjectActionMapper where + +import Data.Time + +import Wizard.Api.Resource.Project.Action.ProjectActionChangeDTO +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Model.Project.Action.ProjectAction + +toDTO :: ProjectAction -> ProjectActionDTO +toDTO action = + ProjectActionDTO + { paId = action.paId + , name = action.name + , description = action.description + , url = action.url + , enabled = action.enabled + , createdAt = action.createdAt + , updatedAt = action.updatedAt + } + +toChangeDTO :: ProjectAction -> ProjectActionChangeDTO +toChangeDTO action = ProjectActionChangeDTO {enabled = action.enabled} + +fromChangeDTO :: ProjectAction -> ProjectActionChangeDTO -> UTCTime -> ProjectAction +fromChangeDTO action reqDto now = + action {enabled = reqDto.enabled, updatedAt = now} diff --git a/wizard-server/src/Wizard/Service/Project/Action/ProjectActionService.hs b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionService.hs new file mode 100644 index 000000000..b66e208c5 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionService.hs @@ -0,0 +1,74 @@ +module Wizard.Service.Project.Action.ProjectActionService where + +import Control.Monad.Reader (liftIO) +import Data.Maybe (fromMaybe) +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.PageMetadata +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Wizard.Api.Resource.Project.Action.ProjectActionChangeDTO +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectActionDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Model.Context.AclContext +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.AppContextHelpers +import Wizard.Model.Project.Action.ProjectAction +import Wizard.Model.Project.Project +import Wizard.Service.Project.Action.ProjectActionAudit +import Wizard.Service.Project.Action.ProjectActionMapper +import Wizard.Service.Project.Action.ProjectActionUtil + +getProjectActionsPageDto :: Maybe String -> Pageable -> [Sort] -> AppContextM (Page ProjectActionDTO) +getProjectActionsPageDto mQuery pageable sort = do + checkPermission _PRJ_PERM + currentUser <- getCurrentUser + importersPage <- findProjectActionsPage Nothing Nothing mQuery Nothing pageable sort + return $ fmap toDTO importersPage + +getProjectActionSuggestions + :: Maybe U.UUID -> Maybe String -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page ProjectActionDTO) +getProjectActionSuggestions mProjectUuid mQuery mEnabled pageable sort = do + checkPermission _PRJ_PERM + mPkgId <- + case mProjectUuid of + Just projectUuid -> do + project <- findProjectByUuid projectUuid + return . Just $ project.knowledgeModelPackageId + Nothing -> return Nothing + page <- findProjectActionsPage Nothing Nothing mQuery mEnabled (Pageable (Just 0) (Just 999999999)) sort + return . fmap toDTO . updatePage page . filterImportersInGroup mPkgId $ page + where + updatePage :: Page ProjectAction -> [ProjectAction] -> Page ProjectAction + updatePage (Page name _ _) array = + let updatedArray = take updatedSize array + updatedSize = fromMaybe 20 pageable.size + updatedTotalElements = length updatedArray + updatedTotalPages = computeTotalPage updatedTotalElements updatedSize + updatedNumber = fromMaybe 0 pageable.page + in Page name (PageMetadata updatedSize updatedTotalElements updatedTotalPages updatedNumber) updatedArray + filterImportersInGroup :: Maybe String -> Page ProjectAction -> [ProjectAction] + filterImportersInGroup mPkgId page = + filter isProjectActionSupported . filterProjectActions mPkgId $ page.entities + +getProjectAction :: String -> AppContextM ProjectActionDTO +getProjectAction piId = + runInTransaction $ do + checkPermission _PRJ_PERM + importer <- findProjectActionById piId + auditProjectActionStartEvent piId + return $ toDTO importer + +modifyProjectAction :: String -> ProjectActionChangeDTO -> AppContextM ProjectActionDTO +modifyProjectAction piId reqDto = + runInTransaction $ do + checkPermission _PRJ_ACTION_PERM + importer <- findProjectActionById piId + now <- liftIO getCurrentTime + let updatedImporter = fromChangeDTO importer reqDto now + updateProjectActionById updatedImporter + return $ toDTO updatedImporter diff --git a/wizard-server/src/Wizard/Service/Project/Action/ProjectActionUtil.hs b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionUtil.hs new file mode 100644 index 000000000..0a12fb113 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Action/ProjectActionUtil.hs @@ -0,0 +1,18 @@ +module Wizard.Service.Project.Action.ProjectActionUtil where + +import Shared.Coordinate.Util.Coordinate +import Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageUtil +import Wizard.Constant.ProjectAction +import Wizard.Model.Project.Action.ProjectAction + +isProjectActionSupported :: ProjectAction -> Bool +isProjectActionSupported importer = importer.metamodelVersion == projectActionMetamodelVersion + +filterProjectActions :: Maybe String -> [ProjectAction] -> [ProjectAction] +filterProjectActions mPkgId importers = + case mPkgId of + Just pkgId -> filter (filterProjectAction . splitCoordinate $ pkgId) importers + Nothing -> importers + where + filterProjectAction :: [String] -> ProjectAction -> Bool + filterProjectAction pkgIdSplit importer = fitsIntoKMSpecs pkgIdSplit importer.allowedPackages diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationAcl.hs b/wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationAcl.hs similarity index 77% rename from wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationAcl.hs rename to wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationAcl.hs index 112f6c33c..f8258eebb 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationAcl.hs +++ b/wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationAcl.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.Collaboration.CollaborationAcl where +module Wizard.Service.Project.Collaboration.ProjectCollaborationAcl where import Control.Monad.Except (throwError) import Data.Maybe (isJust) @@ -7,16 +7,16 @@ import Prelude hiding (log) import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireAclHelpers -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectAclHelpers +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Project import Wizard.Model.User.User import Wizard.Model.Websocket.WebsocketRecord getPermission - :: QuestionnaireVisibility - -> QuestionnaireSharing - -> [QuestionnairePerm] + :: ProjectVisibility + -> ProjectSharing + -> [ProjectPerm] -> Maybe U.UUID -> Maybe String -> [U.UUID] @@ -28,22 +28,22 @@ getPermission visibility sharing permissions mCurrentUserUuid mCurrentUserRole m , isLogged && isExplicitlyEditor , isLogged && isInOwnerGroup , isLogged && isInEditorGroup - , isLogged && visibility == VisibleEditQuestionnaire - , sharing == AnyoneWithLinkEditQuestionnaire + , isLogged && visibility == VisibleEditProjectVisibility + , sharing == AnyoneWithLinkEditProjectSharing ] = EditorWebsocketPerm | or [ isLogged && isExplicitlyCommenter , isLogged && isInCommenterGroup - , isLogged && visibility == VisibleCommentQuestionnaire - , sharing == AnyoneWithLinkCommentQuestionnaire + , isLogged && visibility == VisibleCommentProjectVisibility + , sharing == AnyoneWithLinkCommentProjectSharing ] = CommenterWebsocketPerm | or [ isLogged && isExplicitlyViewer , isLogged && isInViewerGroup - , isLogged && visibility == VisibleViewQuestionnaire - , sharing == AnyoneWithLinkViewQuestionnaire + , isLogged && visibility == VisibleViewProjectVisibility + , sharing == AnyoneWithLinkViewProjectSharing ] = ViewerWebsocketPerm | otherwise = NoWebsocketPerm @@ -62,14 +62,14 @@ getPermission visibility sharing permissions mCurrentUserUuid mCurrentUserRole m checkViewPermission myself = if myself.entityPerm == EditorWebsocketPerm || myself.entityPerm == CommenterWebsocketPerm || myself.entityPerm == ViewerWebsocketPerm then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "View Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "View Project" checkCommentPermission myself = if myself.entityPerm == EditorWebsocketPerm || myself.entityPerm == CommenterWebsocketPerm then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Comment Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Comment Project" checkEditPermission myself = if myself.entityPerm == EditorWebsocketPerm then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Edit Project" diff --git a/wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationMapper.hs b/wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationMapper.hs new file mode 100644 index 000000000..17cd511f7 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationMapper.hs @@ -0,0 +1,124 @@ +module Wizard.Service.Project.Collaboration.ProjectCollaborationMapper where + +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO +import Wizard.Api.Resource.Websocket.WebsocketActionDTO +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Websocket.WebsocketMessage +import Wizard.Model.Websocket.WebsocketRecord +import Wizard.Util.Websocket + +toWebsocketMessage :: WebsocketRecord -> content -> WebsocketMessage content +toWebsocketMessage record content = + WebsocketMessage + { connectionUuid = record.connectionUuid + , connection = record.connection + , entityId = record.entityId + , content = content + } + +toSetUserListMessage + :: [WebsocketRecord] -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toSetUserListMessage records record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetUserList_ServerProjectMessageDTO $ + getCollaborators record.connectionUuid record.entityId records + +toSetReplyMessage + :: SetReplyEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toSetReplyMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . SetReplyEventDTO' $ + reqDto + +toClearReplyMessage + :: ClearReplyEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toClearReplyMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . ClearReplyEventDTO' $ + reqDto + +toSetPhaseMessage + :: SetPhaseEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toSetPhaseMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . SetPhaseEventDTO' $ + reqDto + +toSetLabelMessage + :: SetLabelsEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toSetLabelMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . SetLabelsEventDTO' $ + reqDto + +toResolveCommentThreadMessage + :: ResolveCommentThreadEventDTO + -> WebsocketRecord + -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toResolveCommentThreadMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . ResolveCommentThreadEventDTO' $ + reqDto + +toReopenCommentThreadMessage + :: ReopenCommentThreadEventDTO + -> WebsocketRecord + -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toReopenCommentThreadMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . ReopenCommentThreadEventDTO' $ + reqDto + +toAssignCommentThreadMessage + :: AssignCommentThreadEventDTO + -> WebsocketRecord + -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toAssignCommentThreadMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . AssignCommentThreadEventDTO' $ + reqDto + +toDeleteCommentThreadMessage + :: DeleteCommentThreadEventDTO + -> WebsocketRecord + -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toDeleteCommentThreadMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . DeleteCommentThreadEventDTO' $ + reqDto + +toAddCommentMessage + :: AddCommentEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toAddCommentMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . AddCommentEventDTO' $ + reqDto + +toEditCommentMessage + :: EditCommentEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toEditCommentMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . EditCommentEventDTO' $ + reqDto + +toDeleteCommentMessage + :: DeleteCommentEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toDeleteCommentMessage reqDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetContent_ServerProjectMessageDTO . DeleteCommentEventDTO' $ + reqDto + +toSetProjectMessage + :: ProjectDetailWsDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toSetProjectMessage resWsDto record = + toWebsocketMessage record $ + Success_ServerActionDTO . SetProject_ServerProjectMessageDTO $ + resWsDto + +toAddFileMessage :: ProjectFileSimple -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerProjectMessageDTO) +toAddFileMessage file record = + toWebsocketMessage record $ + Success_ServerActionDTO . AddFile_ServerProjectMessageDTO $ + file diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationService.hs b/wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationService.hs similarity index 65% rename from wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationService.hs rename to wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationService.hs index 4c8196b4a..8614cb95d 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationService.hs +++ b/wizard-server/src/Wizard/Service/Project/Collaboration/ProjectCollaborationService.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.Collaboration.CollaborationService where +module Wizard.Service.Project.Collaboration.ProjectCollaborationService where import Control.Monad (when) import Control.Monad.Except (catchError) @@ -15,31 +15,31 @@ import Network.WebSockets (Connection) import Shared.Common.Integration.Aws.Lambda import Shared.Common.Model.Error.Error import Shared.Common.Util.Uuid -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO import Wizard.Api.Resource.User.UserDTO -import Wizard.Api.Resource.Websocket.QuestionnaireActionJM () +import Wizard.Api.Resource.Websocket.ProjectMessageJM () import Wizard.Api.Resource.Websocket.WebsocketActionJM () -import Wizard.Cache.QuestionnaireWebsocketCache -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Cache.ProjectWebsocketCache +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import Wizard.Database.DAO.Tenant.TenantDAO import Wizard.Localization.Messages.Public import Wizard.Model.Config.ServerConfig import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Tenant import Wizard.Model.User.OnlineUserInfo import Wizard.Model.Websocket.WebsocketMessage import Wizard.Model.Websocket.WebsocketRecord -import Wizard.Service.Questionnaire.Collaboration.CollaborationAcl -import Wizard.Service.Questionnaire.Collaboration.CollaborationMapper -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentMapper -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Service.Project.Collaboration.ProjectCollaborationAcl +import Wizard.Service.Project.Collaboration.ProjectCollaborationMapper +import Wizard.Service.Project.Comment.ProjectCommentMapper +import Wizard.Service.Project.Event.ProjectEventMapper import Wizard.Service.Websocket.WebsocketService import Wizard.Util.Websocket import WizardLib.Public.Database.DAO.User.UserGroupMembershipDAO @@ -47,33 +47,33 @@ import WizardLib.Public.Model.User.UserGroupMembership import WizardLib.Public.Model.User.UserSuggestion putUserOnline :: U.UUID -> U.UUID -> Connection -> AppContextM () -putUserOnline qtnUuid connectionUuid connection = do - myself <- createQuestionnaireRecord connectionUuid connection qtnUuid +putUserOnline projectUuid connectionUuid connection = do + myself <- createProjectRecord connectionUuid connection projectUuid checkViewPermission myself addToCache myself logWS connectionUuid "New user added to the list" - setUserList qtnUuid connectionUuid + setUserList projectUuid connectionUuid deleteUser :: U.UUID -> U.UUID -> AppContextM () -deleteUser qtnUuid connectionUuid = do +deleteUser projectUuid connectionUuid = do deleteFromCache connectionUuid - setUserList qtnUuid connectionUuid + setUserList projectUuid connectionUuid setUserList :: U.UUID -> U.UUID -> AppContextM () -setUserList qtnUuid connectionUuid = do +setUserList projectUuid connectionUuid = do logWS connectionUuid "Informing other users about user list changes" records <- getAllFromCache - broadcast (U.toString qtnUuid) records (toSetUserListMessage records) disconnectUser + broadcast (U.toString projectUuid) records (toSetUserListMessage records) disconnectUser logWS connectionUuid "Informed completed" -updatePermsForOnlineUsers :: U.UUID -> QuestionnaireVisibility -> QuestionnaireSharing -> [QuestionnairePerm] -> AppContextM () -updatePermsForOnlineUsers qtnUuid visibility sharing permissions = do +updatePermsForOnlineUsers :: U.UUID -> ProjectVisibility -> ProjectSharing -> [ProjectPerm] -> AppContextM () +updatePermsForOnlineUsers projectUuid visibility sharing permissions = do currentTenantUuid <- asks currentTenantUuid tenant <- findTenantByUuid currentTenantUuid if isJust tenant.signalBridgeUrl then do serverConfig <- asks serverConfig - let dto = AKM.fromList [("questionnaireUuid", U.toString qtnUuid), ("tenantUuid", U.toString currentTenantUuid)] + let dto = AKM.fromList [("projectUuid", U.toString projectUuid), ("tenantUuid", U.toString currentTenantUuid)] invokeLambda serverConfig.signalBridge.updatePermsArn (BSL.toStrict . A.encode $ dto) return () else do @@ -83,7 +83,7 @@ updatePermsForOnlineUsers qtnUuid visibility sharing permissions = do updatePerm :: WebsocketRecord -> AppContextM () updatePerm record = when - (record.entityId == U.toString qtnUuid) + (record.entityId == U.toString projectUuid) ( do let permission = case record.user of @@ -122,8 +122,8 @@ removeUserGroupFromUsers userGroupUuid userUuids = do ) user@AnonymousOnlineUserInfo {..} -> return () -setQuestionnaire :: U.UUID -> QuestionnaireDetailWsDTO -> AppContextM () -setQuestionnaire qtnUuid reqDto = do +setProject :: U.UUID -> ProjectDetailWsDTO -> AppContextM () +setProject projectUuid reqDto = do currentTenantUuid <- asks currentTenantUuid tenant <- findTenantByUuid currentTenantUuid if isJust tenant.signalBridgeUrl @@ -131,20 +131,20 @@ setQuestionnaire qtnUuid reqDto = do serverConfig <- asks serverConfig let dto = AKM.fromList - [ ("questionnaireUuid", A.String . U.toText $ qtnUuid) + [ ("projectUuid", A.String . U.toText $ projectUuid) , ("tenantUuid", A.String . U.toText $ currentTenantUuid) , ("message", A.toJSON reqDto) ] - invokeLambda serverConfig.signalBridge.setQuestionnaireArn (BSL.toStrict . A.encode $ dto) + invokeLambda serverConfig.signalBridge.setProjectArn (BSL.toStrict . A.encode $ dto) return () else do - logWS U.nil "Informing other users about changed questionnaire" + logWS U.nil "Informing other users about changed project" records <- getAllFromCache - broadcast (U.toString qtnUuid) records (toSetQuestionnaireMessage reqDto) disconnectUser + broadcast (U.toString projectUuid) records (toSetProjectMessage reqDto) disconnectUser logWS U.nil "Informed completed" -addFile :: U.UUID -> QuestionnaireFileSimple -> AppContextM () -addFile qtnUuid reqDto = do +addFile :: U.UUID -> ProjectFileSimple -> AppContextM () +addFile projectUuid reqDto = do currentTenantUuid <- asks currentTenantUuid tenant <- findTenantByUuid currentTenantUuid if isJust tenant.signalBridgeUrl @@ -152,7 +152,7 @@ addFile qtnUuid reqDto = do serverConfig <- asks serverConfig let dto = AKM.fromList - [ ("questionnaireUuid", A.String . U.toText $ qtnUuid) + [ ("projectUuid", A.String . U.toText $ projectUuid) , ("tenantUuid", A.String . U.toText $ currentTenantUuid) , ("message", A.toJSON reqDto) ] @@ -161,171 +161,171 @@ addFile qtnUuid reqDto = do else do logWS U.nil "Informing other users about added file" records <- getAllFromCache - broadcast (U.toString qtnUuid) records (toAddFileMessage reqDto) disconnectUser + broadcast (U.toString projectUuid) records (toAddFileMessage reqDto) disconnectUser logWS U.nil "Informed completed" -logOutOnlineUsersWhenQtnDramaticallyChanged :: U.UUID -> AppContextM () -logOutOnlineUsersWhenQtnDramaticallyChanged qtnUuid = do +logOutOnlineUsersWhenProjectDramaticallyChanged :: U.UUID -> AppContextM () +logOutOnlineUsersWhenProjectDramaticallyChanged projectUuid = do currentTenantUuid <- asks currentTenantUuid tenant <- findTenantByUuid currentTenantUuid if isJust tenant.signalBridgeUrl then do serverConfig <- asks serverConfig - let dto = AKM.fromList [("questionnaireUuid", U.toString qtnUuid), ("tenantUuid", U.toString currentTenantUuid)] + let dto = AKM.fromList [("projectUuid", U.toString projectUuid), ("tenantUuid", U.toString currentTenantUuid)] invokeLambda serverConfig.signalBridge.logOutAllArn (BSL.toStrict . A.encode $ dto) return () else do records <- getAllFromCache - let error = NotExistsError $ _ERROR_SERVICE_QTN_COLLABORATION__FORCE_DISCONNECT (U.toString qtnUuid) + let error = NotExistsError $ _ERROR_SERVICE_PROJECT_COLLABORATION__FORCE_DISCONNECT (U.toString projectUuid) traverse_ (logOut error) records where logOut :: AppError -> WebsocketRecord -> AppContextM () logOut error record = when - (record.entityId == U.toString qtnUuid) + (record.entityId == U.toString projectUuid) (sendError record.connectionUuid record.connection record.entityId disconnectUser error) -- -------------------------------- -setContent :: U.UUID -> U.UUID -> QuestionnaireEventChangeDTO -> AppContextM () -setContent qtnUuid connectionUuid reqDto = +setContent :: U.UUID -> U.UUID -> ProjectEventChangeDTO -> AppContextM () +setContent projectUuid connectionUuid reqDto = case reqDto of - SetReplyEventChangeDTO' event -> setReply qtnUuid connectionUuid event - ClearReplyEventChangeDTO' event -> clearReply qtnUuid connectionUuid event - SetPhaseEventChangeDTO' event -> setPhase qtnUuid connectionUuid event - SetLabelsEventChangeDTO' event -> setLabel qtnUuid connectionUuid event - ResolveCommentThreadEventChangeDTO' event -> resolveCommentThread qtnUuid connectionUuid event - ReopenCommentThreadEventChangeDTO' event -> reopenCommentThread qtnUuid connectionUuid event - AssignCommentThreadEventChangeDTO' event -> assignCommentThread qtnUuid connectionUuid event - DeleteCommentThreadEventChangeDTO' event -> deleteCommentThread qtnUuid connectionUuid event - AddCommentEventChangeDTO' event -> addComment qtnUuid connectionUuid event - EditCommentEventChangeDTO' event -> editComment qtnUuid connectionUuid event - DeleteCommentEventChangeDTO' event -> deleteComment qtnUuid connectionUuid event + SetReplyEventChangeDTO' event -> setReply projectUuid connectionUuid event + ClearReplyEventChangeDTO' event -> clearReply projectUuid connectionUuid event + SetPhaseEventChangeDTO' event -> setPhase projectUuid connectionUuid event + SetLabelsEventChangeDTO' event -> setLabel projectUuid connectionUuid event + ResolveCommentThreadEventChangeDTO' event -> resolveCommentThread projectUuid connectionUuid event + ReopenCommentThreadEventChangeDTO' event -> reopenCommentThread projectUuid connectionUuid event + AssignCommentThreadEventChangeDTO' event -> assignCommentThread projectUuid connectionUuid event + DeleteCommentThreadEventChangeDTO' event -> deleteCommentThread projectUuid connectionUuid event + AddCommentEventChangeDTO' event -> addComment projectUuid connectionUuid event + EditCommentEventChangeDTO' event -> editComment projectUuid connectionUuid event + DeleteCommentEventChangeDTO' event -> deleteComment projectUuid connectionUuid event setReply :: U.UUID -> U.UUID -> SetReplyEventChangeDTO -> AppContextM () -setReply qtnUuid connectionUuid reqDto = do +setReply projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkEditPermission myself now <- liftIO getCurrentTime tenantUuid <- asks currentTenantUuid let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - insertQuestionnaireEventWithTimestampUpdate - qtnUuid - (fromEventChangeDTO (SetReplyEventChangeDTO' reqDto) qtnUuid tenantUuid mCreatedByUuid now) + insertProjectEventWithTimestampUpdate + projectUuid + (fromEventChangeDTO (SetReplyEventChangeDTO' reqDto) projectUuid tenantUuid mCreatedByUuid now) let resDto = toSetReplyEventDTO' reqDto mCreatedBy now records <- getAllFromCache - broadcast (U.toString qtnUuid) records (toSetReplyMessage resDto) disconnectUser + broadcast (U.toString projectUuid) records (toSetReplyMessage resDto) disconnectUser clearReply :: U.UUID -> U.UUID -> ClearReplyEventChangeDTO -> AppContextM () -clearReply qtnUuid connectionUuid reqDto = do +clearReply projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkEditPermission myself now <- liftIO getCurrentTime tenantUuid <- asks currentTenantUuid let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - insertQuestionnaireEventWithTimestampUpdate - qtnUuid - (fromEventChangeDTO (ClearReplyEventChangeDTO' reqDto) qtnUuid tenantUuid mCreatedByUuid now) + insertProjectEventWithTimestampUpdate + projectUuid + (fromEventChangeDTO (ClearReplyEventChangeDTO' reqDto) projectUuid tenantUuid mCreatedByUuid now) let resDto = toClearReplyEventDTO' reqDto mCreatedBy now records <- getAllFromCache - broadcast (U.toString qtnUuid) records (toClearReplyMessage resDto) disconnectUser + broadcast (U.toString projectUuid) records (toClearReplyMessage resDto) disconnectUser setPhase :: U.UUID -> U.UUID -> SetPhaseEventChangeDTO -> AppContextM () -setPhase qtnUuid connectionUuid reqDto = do +setPhase projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkEditPermission myself now <- liftIO getCurrentTime tenantUuid <- asks currentTenantUuid let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - insertQuestionnaireEventWithTimestampUpdate - qtnUuid - (fromEventChangeDTO (SetPhaseEventChangeDTO' reqDto) qtnUuid tenantUuid mCreatedByUuid now) + insertProjectEventWithTimestampUpdate + projectUuid + (fromEventChangeDTO (SetPhaseEventChangeDTO' reqDto) projectUuid tenantUuid mCreatedByUuid now) let resDto = toSetPhaseEventDTO' reqDto mCreatedBy now records <- getAllFromCache - broadcast (U.toString qtnUuid) records (toSetPhaseMessage resDto) disconnectUser + broadcast (U.toString projectUuid) records (toSetPhaseMessage resDto) disconnectUser setLabel :: U.UUID -> U.UUID -> SetLabelsEventChangeDTO -> AppContextM () -setLabel qtnUuid connectionUuid reqDto = do +setLabel projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkEditPermission myself now <- liftIO getCurrentTime tenantUuid <- asks currentTenantUuid let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - insertQuestionnaireEventWithTimestampUpdate qtnUuid (fromEventChangeDTO (SetLabelsEventChangeDTO' reqDto) qtnUuid tenantUuid mCreatedByUuid now) + insertProjectEventWithTimestampUpdate projectUuid (fromEventChangeDTO (SetLabelsEventChangeDTO' reqDto) projectUuid tenantUuid mCreatedByUuid now) let resDto = toSetLabelsEventDTO' reqDto mCreatedBy now records <- getAllFromCache - broadcast (U.toString qtnUuid) records (toSetLabelMessage resDto) disconnectUser + broadcast (U.toString projectUuid) records (toSetLabelMessage resDto) disconnectUser resolveCommentThread :: U.UUID -> U.UUID -> ResolveCommentThreadEventChangeDTO -> AppContextM () -resolveCommentThread qtnUuid connectionUuid reqDto = do +resolveCommentThread projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkCommentPermission myself now <- liftIO getCurrentTime let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - updateQuestionnaireCommentThreadResolvedById reqDto.threadUuid True + updateProjectCommentThreadResolvedById reqDto.threadUuid True let resDto = toResolveCommentThreadEventDTO' reqDto mCreatedBy now records <- getAllFromCache let filteredRecords = if reqDto.private then filterEditors records else filterCommenters records - broadcast (U.toString qtnUuid) filteredRecords (toResolveCommentThreadMessage resDto) disconnectUser + broadcast (U.toString projectUuid) filteredRecords (toResolveCommentThreadMessage resDto) disconnectUser reopenCommentThread :: U.UUID -> U.UUID -> ReopenCommentThreadEventChangeDTO -> AppContextM () -reopenCommentThread qtnUuid connectionUuid reqDto = do +reopenCommentThread projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkCommentPermission myself now <- liftIO getCurrentTime let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - updateQuestionnaireCommentThreadResolvedById reqDto.threadUuid False + updateProjectCommentThreadResolvedById reqDto.threadUuid False let resDto = toReopenCommentThreadEventDTO' reqDto mCreatedBy now records <- getAllFromCache let filteredRecords = if reqDto.private then filterEditors records else filterCommenters records - broadcast (U.toString qtnUuid) filteredRecords (toReopenCommentThreadMessage resDto) disconnectUser + broadcast (U.toString projectUuid) filteredRecords (toReopenCommentThreadMessage resDto) disconnectUser assignCommentThread :: U.UUID -> U.UUID -> AssignCommentThreadEventChangeDTO -> AppContextM () -assignCommentThread qtnUuid connectionUuid reqDto = do +assignCommentThread projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkCommentPermission myself now <- liftIO getCurrentTime let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - updateQuestionnaireCommentThreadAssignee reqDto.threadUuid (fmap (.uuid) reqDto.assignedTo) mCreatedByUuid + updateProjectCommentThreadAssignee reqDto.threadUuid (fmap (.uuid) reqDto.assignedTo) mCreatedByUuid let resDto = toAssignCommentThreadEventDTO' reqDto mCreatedBy now records <- getAllFromCache let filteredRecords = if reqDto.private then filterEditors records else filterCommenters records - broadcast (U.toString qtnUuid) filteredRecords (toAssignCommentThreadMessage resDto) disconnectUser + broadcast (U.toString projectUuid) filteredRecords (toAssignCommentThreadMessage resDto) disconnectUser deleteCommentThread :: U.UUID -> U.UUID -> DeleteCommentThreadEventChangeDTO -> AppContextM () -deleteCommentThread qtnUuid connectionUuid reqDto = do +deleteCommentThread projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkCommentPermission myself now <- liftIO getCurrentTime let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - deleteQuestionnaireCommentsByThreadUuid reqDto.threadUuid - deleteQuestionnaireCommentThreadById reqDto.threadUuid + deleteProjectCommentsByThreadUuid reqDto.threadUuid + deleteProjectCommentThreadById reqDto.threadUuid let resDto = toDeleteCommentThreadEventDTO' reqDto mCreatedBy now records <- getAllFromCache let filteredRecords = if reqDto.private then filterEditors records else filterCommenters records - broadcast (U.toString qtnUuid) filteredRecords (toDeleteCommentThreadMessage resDto) disconnectUser + broadcast (U.toString projectUuid) filteredRecords (toDeleteCommentThreadMessage resDto) disconnectUser addComment :: U.UUID -> U.UUID -> AddCommentEventChangeDTO -> AppContextM () -addComment qtnUuid connectionUuid reqDto = do +addComment projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkCommentPermission myself tenantUuid <- asks currentTenantUuid @@ -335,48 +335,48 @@ addComment qtnUuid connectionUuid reqDto = do let comment = toComment reqDto tenantUuid mCreatedByUuid now if reqDto.newThread then do - let thread = toCommentThread reqDto qtnUuid tenantUuid mCreatedByUuid now - insertQuestionnaireThreadAndComment thread comment - else insertQuestionnaireComment comment + let thread = toCommentThread reqDto projectUuid tenantUuid mCreatedByUuid now + insertProjectThreadAndComment thread comment + else insertProjectComment comment let resDto = toAddCommentEventDTO' reqDto mCreatedBy now records <- getAllFromCache let filteredRecords = if reqDto.private then filterEditors records else filterCommenters records - broadcast (U.toString qtnUuid) filteredRecords (toAddCommentMessage resDto) disconnectUser + broadcast (U.toString projectUuid) filteredRecords (toAddCommentMessage resDto) disconnectUser editComment :: U.UUID -> U.UUID -> EditCommentEventChangeDTO -> AppContextM () -editComment qtnUuid connectionUuid reqDto = do +editComment projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkCommentPermission myself now <- liftIO getCurrentTime let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - updateQuestionnaireCommentTextById reqDto.commentUuid reqDto.text + updateProjectCommentTextById reqDto.commentUuid reqDto.text let resDto = toEditCommentEventDTO' reqDto mCreatedBy now records <- getAllFromCache let filteredRecords = if reqDto.private then filterEditors records else filterCommenters records - broadcast (U.toString qtnUuid) filteredRecords (toEditCommentMessage resDto) disconnectUser + broadcast (U.toString projectUuid) filteredRecords (toEditCommentMessage resDto) disconnectUser deleteComment :: U.UUID -> U.UUID -> DeleteCommentEventChangeDTO -> AppContextM () -deleteComment qtnUuid connectionUuid reqDto = do +deleteComment projectUuid connectionUuid reqDto = do myself <- getFromCache' connectionUuid checkCommentPermission myself now <- liftIO getCurrentTime let mCreatedBy = getMaybeCreatedBy myself let mCreatedByUuid = getMaybeCreatedByUuid myself - deleteQuestionnaireCommentById reqDto.commentUuid + deleteProjectCommentById reqDto.commentUuid let resDto = toDeleteCommentEventDTO' reqDto mCreatedBy now records <- getAllFromCache let filteredRecords = if reqDto.private then filterEditors records else filterCommenters records - broadcast (U.toString qtnUuid) filteredRecords (toDeleteCommentMessage resDto) disconnectUser + broadcast (U.toString projectUuid) filteredRecords (toDeleteCommentMessage resDto) disconnectUser -- -------------------------------- -- PRIVATE @@ -389,10 +389,10 @@ disconnectUserIfLostPermission record = catchError (checkViewPermission record) where handleError = sendError record.connectionUuid record.connection record.entityId disconnectUser -createQuestionnaireRecord :: U.UUID -> Connection -> U.UUID -> AppContextM WebsocketRecord -createQuestionnaireRecord connectionUuid connection qtnUuid = do +createProjectRecord :: U.UUID -> Connection -> U.UUID -> AppContextM WebsocketRecord +createProjectRecord connectionUuid connection projectUuid = do mCurrentUser <- asks currentUser - qtn <- findQuestionnaireByUuid qtnUuid + project <- findProjectByUuid projectUuid userGroupUuids <- case mCurrentUser of Just currentUser -> do @@ -401,13 +401,13 @@ createQuestionnaireRecord connectionUuid connection qtnUuid = do Nothing -> return [] let permission = getPermission - qtn.visibility - qtn.sharing - qtn.permissions + project.visibility + project.sharing + project.permissions (fmap (.uuid) mCurrentUser) (fmap (.uRole) mCurrentUser) userGroupUuids - createRecord connectionUuid connection (U.toString qtnUuid) permission userGroupUuids + createRecord connectionUuid connection (U.toString projectUuid) permission userGroupUuids getMaybeCreatedBy :: WebsocketRecord -> Maybe UserSuggestion getMaybeCreatedBy myself = diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Comment/QuestionnaireCommentMapper.hs b/wizard-server/src/Wizard/Service/Project/Comment/ProjectCommentMapper.hs similarity index 63% rename from wizard-server/src/Wizard/Service/Questionnaire/Comment/QuestionnaireCommentMapper.hs rename to wizard-server/src/Wizard/Service/Project/Comment/ProjectCommentMapper.hs index cbe9b8082..4841f50f3 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Comment/QuestionnaireCommentMapper.hs +++ b/wizard-server/src/Wizard/Service/Project/Comment/ProjectCommentMapper.hs @@ -1,22 +1,22 @@ -module Wizard.Service.Questionnaire.Comment.QuestionnaireCommentMapper where +module Wizard.Service.Project.Comment.ProjectCommentMapper where import qualified Data.Map.Strict as M import Data.Time import qualified Data.UUID as U -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Model.Questionnaire.QuestionnaireCommentList +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Comment.ProjectCommentList import Wizard.Model.User.User import qualified Wizard.Service.User.UserMapper as UM -toCommentThreadsMap :: [QuestionnaireCommentThreadList] -> M.Map String [QuestionnaireCommentThreadList] +toCommentThreadsMap :: [ProjectCommentThreadList] -> M.Map String [ProjectCommentThreadList] toCommentThreadsMap = foldl go M.empty where go - :: M.Map String [QuestionnaireCommentThreadList] - -> QuestionnaireCommentThreadList - -> M.Map String [QuestionnaireCommentThreadList] + :: M.Map String [ProjectCommentThreadList] + -> ProjectCommentThreadList + -> M.Map String [ProjectCommentThreadList] go commentThreadsMap thread = let threads = case M.lookup thread.path commentThreadsMap of @@ -25,9 +25,9 @@ toCommentThreadsMap = foldl go M.empty Just threads -> threads in M.insert thread.path (thread : threads) commentThreadsMap -toCommentThreadList :: QuestionnaireCommentThread -> Maybe User -> Maybe User -> [QuestionnaireCommentList] -> QuestionnaireCommentThreadList +toCommentThreadList :: ProjectCommentThread -> Maybe User -> Maybe User -> [ProjectCommentList] -> ProjectCommentThreadList toCommentThreadList thread mAssignedTo mCreatedBy comments = - QuestionnaireCommentThreadList + ProjectCommentThreadList { uuid = thread.uuid , path = thread.path , resolved = thread.resolved @@ -39,15 +39,15 @@ toCommentThreadList thread mAssignedTo mCreatedBy comments = , updatedAt = thread.updatedAt } -toCommentThread :: AddCommentEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> QuestionnaireCommentThread -toCommentThread event qtnUuid tenantUuid mCreatedByUuid now = - QuestionnaireCommentThread +toCommentThread :: AddCommentEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> ProjectCommentThread +toCommentThread event projectUuid tenantUuid mCreatedByUuid now = + ProjectCommentThread { uuid = event.threadUuid , path = event.path , resolved = False , comments = [] , private = event.private - , questionnaireUuid = qtnUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , assignedTo = Nothing , assignedBy = Nothing @@ -57,9 +57,9 @@ toCommentThread event qtnUuid tenantUuid mCreatedByUuid now = , updatedAt = now } -toCommentList :: QuestionnaireComment -> Maybe User -> QuestionnaireCommentList +toCommentList :: ProjectComment -> Maybe User -> ProjectCommentList toCommentList comment mUser = - QuestionnaireCommentList + ProjectCommentList { uuid = comment.uuid , text = comment.text , createdBy = fmap (UM.toSuggestion . UM.toSimple) mUser @@ -67,9 +67,9 @@ toCommentList comment mUser = , updatedAt = comment.updatedAt } -toComment :: AddCommentEventChangeDTO -> U.UUID -> Maybe U.UUID -> UTCTime -> QuestionnaireComment +toComment :: AddCommentEventChangeDTO -> U.UUID -> Maybe U.UUID -> UTCTime -> ProjectComment toComment event tenantUuid mCreatedByUuid now = - QuestionnaireComment + ProjectComment { uuid = event.commentUuid , text = event.text , threadUuid = event.threadUuid diff --git a/wizard-server/src/Wizard/Service/Project/Comment/ProjectCommentService.hs b/wizard-server/src/Wizard/Service/Project/Comment/ProjectCommentService.hs new file mode 100644 index 000000000..2f6e99dec --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Comment/ProjectCommentService.hs @@ -0,0 +1,77 @@ +module Wizard.Service.Project.Comment.ProjectCommentService where + +import Control.Monad.Except (catchError) +import Control.Monad.Reader (liftIO) +import Data.Foldable (traverse_) +import qualified Data.Map.Strict as M +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Shared.Common.Service.Acl.AclService +import Shared.Common.Util.List +import Shared.Common.Util.Uuid +import Wizard.Constant.Acl +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Model.Context.AppContext +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Comment.ProjectCommentList +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import Wizard.Model.Project.Comment.ProjectCommentThreadNotification +import Wizard.Model.Project.Project +import Wizard.Service.Mail.Mailer +import Wizard.Service.Project.Comment.ProjectCommentMapper +import Wizard.Service.Project.ProjectAcl +import WizardLib.Public.Model.User.UserSimple + +getProjectCommentThreadsPage :: Maybe String -> Maybe U.UUID -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page ProjectCommentThreadAssigned) +getProjectCommentThreadsPage mQuery mProjectUuid resolved pageable sort = do + checkPermission _PRJ_PERM + findAssignedProjectCommentThreadsPage mQuery mProjectUuid resolved pageable sort + +getProjectCommentsByProjectUuid :: U.UUID -> Maybe String -> Maybe Bool -> AppContextM (M.Map String [ProjectCommentThreadList]) +getProjectCommentsByProjectUuid projectUuid mPath mResolved = do + project <- findProjectByUuid projectUuid + checkCommentPermissionToProject project.visibility project.sharing project.permissions + editor <- catchError (hasEditPermissionToProject project.visibility project.sharing project.permissions) (\_ -> return False) + threads <- findProjectCommentThreadsForProject project.uuid mPath mResolved editor + return . toCommentThreadsMap $ threads + +duplicateCommentThreads :: U.UUID -> U.UUID -> AppContextM () +duplicateCommentThreads oldProjectUuid newProjectUuid = do + threads <- findProjectCommentThreads oldProjectUuid + traverse_ (duplicateCommentThread newProjectUuid) threads + +duplicateCommentThread :: U.UUID -> ProjectCommentThread -> AppContextM () +duplicateCommentThread newProjectUuid thread = do + newUuid <- liftIO generateUuid + let updatedCommentThread = + thread + { uuid = newUuid + , projectUuid = newProjectUuid + } + insertProjectCommentThread updatedCommentThread + traverse_ (duplicateComment newUuid) thread.comments + +duplicateComment :: U.UUID -> ProjectComment -> AppContextM () +duplicateComment newThreadUuid comment = do + newUuid <- liftIO generateUuid + let updatedComment = + comment + { uuid = newUuid + , threadUuid = newThreadUuid + } + insertProjectComment updatedComment + return () + +sendNotificationToNewAssignees :: AppContextM () +sendNotificationToNewAssignees = + runInTransaction $ do + threads <- findProjectCommentThreadsForNotifying + let threadGroups = groupBy (\t1 t2 -> t1.assignedTo.uuid == t2.assignedTo.uuid && t1.tenantUuid == t2.tenantUuid) threads + traverse_ sendProjectCommentThreadAssignedMail threadGroups + unsetProjectCommentThreadNotificationRequired diff --git a/wizard-server/src/Wizard/Service/Project/Compiler/ProjectCompilerService.hs b/wizard-server/src/Wizard/Service/Project/Compiler/ProjectCompilerService.hs new file mode 100644 index 000000000..7bc7a4dfd --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Compiler/ProjectCompilerService.hs @@ -0,0 +1,22 @@ +module Wizard.Service.Project.Compiler.ProjectCompilerService where + +import qualified Data.Map.Strict as M + +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.ProjectContentDM +import Wizard.Service.Project.Event.ProjectEventMapper + +compileProjectEvents :: [ProjectEventList] -> ProjectContent +compileProjectEvents = foldl applyEvent defaultProjectContent + +applyEvent :: ProjectContent -> ProjectEventList -> ProjectContent +applyEvent projectContent (SetReplyEventList' event) = projectContent {replies = M.insert event.path (toReply' event) projectContent.replies} +applyEvent projectContent (ClearReplyEventList' event) = projectContent {replies = M.delete event.path projectContent.replies} +applyEvent projectContent (SetPhaseEventList' event) = projectContent {phaseUuid = event.phaseUuid} +applyEvent projectContent (SetLabelsEventList' event) = + projectContent + { labels = case event.value of + [] -> M.delete event.path projectContent.labels + newValue -> M.insert event.path newValue projectContent.labels + } diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Event/QuestionnaireEventMapper.hs b/wizard-server/src/Wizard/Service/Project/Event/ProjectEventMapper.hs similarity index 83% rename from wizard-server/src/Wizard/Service/Questionnaire/Event/QuestionnaireEventMapper.hs rename to wizard-server/src/Wizard/Service/Project/Event/ProjectEventMapper.hs index 3325a7266..7212353fa 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Event/QuestionnaireEventMapper.hs +++ b/wizard-server/src/Wizard/Service/Project/Event/ProjectEventMapper.hs @@ -1,18 +1,18 @@ -module Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper where +module Wizard.Service.Project.Event.ProjectEventMapper where import Data.Time import qualified Data.UUID as U -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventChangeDTO -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Api.Resource.Project.Event.ProjectEventChangeDTO +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.ProjectReply import Wizard.Model.User.User import qualified Wizard.Service.User.UserMapper as UM import WizardLib.Public.Model.User.UserSuggestion -toEventDTO :: QuestionnaireEvent -> Maybe User -> QuestionnaireEventDTO +toEventDTO :: ProjectEvent -> Maybe User -> ProjectEventDTO toEventDTO event' mCreatedBy = case event' of SetReplyEvent' event@SetReplyEvent {..} -> SetReplyEventDTO' $ toSetReplyEventDTO event mCreatedBy @@ -20,7 +20,7 @@ toEventDTO event' mCreatedBy = SetPhaseEvent' event@SetPhaseEvent {..} -> SetPhaseEventDTO' $ toSetPhaseEventDTO event mCreatedBy SetLabelsEvent' event@SetLabelsEvent {..} -> SetLabelsEventDTO' $ toSetLabelsEventDTO event mCreatedBy -toEventList :: QuestionnaireEvent -> Maybe User -> QuestionnaireEventList +toEventList :: ProjectEvent -> Maybe User -> ProjectEventList toEventList event' mCreatedBy = case event' of SetReplyEvent' event@SetReplyEvent {..} -> SetReplyEventList' $ toSetReplyEventList event mCreatedBy @@ -28,13 +28,13 @@ toEventList event' mCreatedBy = SetPhaseEvent' event@SetPhaseEvent {..} -> SetPhaseEventList' $ toSetPhaseEventList event mCreatedBy SetLabelsEvent' event@SetLabelsEvent {..} -> SetLabelsEventList' $ toSetLabelsEventList event mCreatedBy -toEvent :: U.UUID -> U.UUID -> QuestionnaireEventList -> QuestionnaireEvent -toEvent questionnaireUuid tenantUuid event' = +toEvent :: U.UUID -> U.UUID -> ProjectEventList -> ProjectEvent +toEvent projectUuid tenantUuid event' = case event' of - SetReplyEventList' event@SetReplyEventList {..} -> SetReplyEvent' $ toSetReplyEvent questionnaireUuid tenantUuid event - ClearReplyEventList' event@ClearReplyEventList {..} -> ClearReplyEvent' $ toClearReplyEvent questionnaireUuid tenantUuid event - SetPhaseEventList' event@SetPhaseEventList {..} -> SetPhaseEvent' $ toSetPhaseEvent questionnaireUuid tenantUuid event - SetLabelsEventList' event@SetLabelsEventList {..} -> SetLabelsEvent' $ toSetLabelsEvent questionnaireUuid tenantUuid event + SetReplyEventList' event@SetReplyEventList {..} -> SetReplyEvent' $ toSetReplyEvent projectUuid tenantUuid event + ClearReplyEventList' event@ClearReplyEventList {..} -> ClearReplyEvent' $ toClearReplyEvent projectUuid tenantUuid event + SetPhaseEventList' event@SetPhaseEventList {..} -> SetPhaseEvent' $ toSetPhaseEvent projectUuid tenantUuid event + SetLabelsEventList' event@SetLabelsEventList {..} -> SetLabelsEvent' $ toSetLabelsEvent projectUuid tenantUuid event toSetReplyEventDTO :: SetReplyEvent -> Maybe User -> SetReplyEventDTO toSetReplyEventDTO event user = @@ -57,12 +57,12 @@ toSetReplyEventList event user = } toSetReplyEvent :: U.UUID -> U.UUID -> SetReplyEventList -> SetReplyEvent -toSetReplyEvent questionnaireUuid tenantUuid event = +toSetReplyEvent projectUuid tenantUuid event = SetReplyEvent { uuid = event.uuid , path = event.path , value = event.value - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = fmap (.uuid) event.createdBy , createdAt = event.createdAt @@ -87,11 +87,11 @@ toClearReplyEventList event user = } toClearReplyEvent :: U.UUID -> U.UUID -> ClearReplyEventList -> ClearReplyEvent -toClearReplyEvent questionnaireUuid tenantUuid event = +toClearReplyEvent projectUuid tenantUuid event = ClearReplyEvent { uuid = event.uuid , path = event.path - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = fmap (.uuid) event.createdBy , createdAt = event.createdAt @@ -116,11 +116,11 @@ toSetPhaseEventList event user = } toSetPhaseEvent :: U.UUID -> U.UUID -> SetPhaseEventList -> SetPhaseEvent -toSetPhaseEvent questionnaireUuid tenantUuid event = +toSetPhaseEvent projectUuid tenantUuid event = SetPhaseEvent { uuid = event.uuid , phaseUuid = event.phaseUuid - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = fmap (.uuid) event.createdBy , createdAt = event.createdAt @@ -147,12 +147,12 @@ toSetLabelsEventList event user = } toSetLabelsEvent :: U.UUID -> U.UUID -> SetLabelsEventList -> SetLabelsEvent -toSetLabelsEvent questionnaireUuid tenantUuid event = +toSetLabelsEvent projectUuid tenantUuid event = SetLabelsEvent { uuid = event.uuid , path = event.path , value = event.value - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = fmap (.uuid) event.createdBy , createdAt = event.createdAt @@ -283,7 +283,7 @@ toDeleteCommentEventDTO' event mCreatedBy now = -- --------------------------------------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------------------------------------- -toEventChangeDTO :: QuestionnaireEvent -> QuestionnaireEventChangeDTO +toEventChangeDTO :: ProjectEvent -> ProjectEventChangeDTO toEventChangeDTO event = case event of SetReplyEvent' event@SetReplyEvent {..} -> @@ -327,60 +327,60 @@ toSetLabelsEventChangeDTO event = -- --------------------------------------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------------------------------------- -fromEventChangeDTO :: QuestionnaireEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> QuestionnaireEvent -fromEventChangeDTO event questionnaireUuid tenantUuid createdBy now = +fromEventChangeDTO :: ProjectEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> ProjectEvent +fromEventChangeDTO event projectUuid tenantUuid createdBy now = case event of SetReplyEventChangeDTO' event@SetReplyEventChangeDTO {..} -> - SetReplyEvent' $ fromSetReplyEventChangeDTO event questionnaireUuid tenantUuid createdBy now + SetReplyEvent' $ fromSetReplyEventChangeDTO event projectUuid tenantUuid createdBy now ClearReplyEventChangeDTO' event@ClearReplyEventChangeDTO {..} -> - ClearReplyEvent' $ fromClearReplyEventChangeDTO event questionnaireUuid tenantUuid createdBy now + ClearReplyEvent' $ fromClearReplyEventChangeDTO event projectUuid tenantUuid createdBy now SetPhaseEventChangeDTO' event@SetPhaseEventChangeDTO {..} -> - SetPhaseEvent' $ fromSetPhaseEventChangeDTO event questionnaireUuid tenantUuid createdBy now + SetPhaseEvent' $ fromSetPhaseEventChangeDTO event projectUuid tenantUuid createdBy now SetLabelsEventChangeDTO' event@SetLabelsEventChangeDTO {..} -> - SetLabelsEvent' $ fromSetLabelsEventChangeDTO event questionnaireUuid tenantUuid createdBy now + SetLabelsEvent' $ fromSetLabelsEventChangeDTO event projectUuid tenantUuid createdBy now _ -> error "Unsupported event type in fromEventChangeDTO" fromSetReplyEventChangeDTO :: SetReplyEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> SetReplyEvent -fromSetReplyEventChangeDTO event questionnaireUuid tenantUuid createdBy now = +fromSetReplyEventChangeDTO event projectUuid tenantUuid createdBy now = SetReplyEvent { uuid = event.uuid , path = event.path , value = event.value - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = createdBy , createdAt = now } fromClearReplyEventChangeDTO :: ClearReplyEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> ClearReplyEvent -fromClearReplyEventChangeDTO event questionnaireUuid tenantUuid createdBy now = +fromClearReplyEventChangeDTO event projectUuid tenantUuid createdBy now = ClearReplyEvent { uuid = event.uuid , path = event.path - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = createdBy , createdAt = now } fromSetPhaseEventChangeDTO :: SetPhaseEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> SetPhaseEvent -fromSetPhaseEventChangeDTO event questionnaireUuid tenantUuid createdBy now = +fromSetPhaseEventChangeDTO event projectUuid tenantUuid createdBy now = SetPhaseEvent { uuid = event.uuid , phaseUuid = event.phaseUuid - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = createdBy , createdAt = now } fromSetLabelsEventChangeDTO :: SetLabelsEventChangeDTO -> U.UUID -> U.UUID -> Maybe U.UUID -> UTCTime -> SetLabelsEvent -fromSetLabelsEventChangeDTO event questionnaireUuid tenantUuid createdBy now = +fromSetLabelsEventChangeDTO event projectUuid tenantUuid createdBy now = SetLabelsEvent { uuid = event.uuid , path = event.path , value = event.value - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = createdBy , createdAt = now diff --git a/wizard-server/src/Wizard/Service/Project/Event/ProjectEventService.hs b/wizard-server/src/Wizard/Service/Project/Event/ProjectEventService.hs new file mode 100644 index 000000000..45ff43228 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Event/ProjectEventService.hs @@ -0,0 +1,64 @@ +module Wizard.Service.Project.Event.ProjectEventService where + +import Data.Foldable (traverse_) +import qualified Data.List as L +import qualified Data.Map.Strict as M +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Lens +import Shared.Common.Util.List (groupBy) +import Shared.Common.Util.Logger +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO +import Wizard.Model.Context.AppContext +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Version.ProjectVersion + +squashProjectEvents :: AppContextM () +squashProjectEvents = do + projectUuids <- findProjectForSquashing + traverse_ squashProjectEventsForProject projectUuids + +squashProjectEventsForProject :: U.UUID -> AppContextM () +squashProjectEventsForProject projectUuid = + runInTransaction $ do + logInfoI _CMP_SERVICE (f' "Squashing events for project (projectUuid: '%s')" [U.toString projectUuid]) + events <- findProjectEventsByProjectUuid projectUuid + versions <- findProjectVersionsByProjectUuid projectUuid + let squashedEvents = squash versions events + syncProjectEventsWithDb events squashedEvents + updateProjectSquashedByUuid projectUuid True + logInfoI + _CMP_SERVICE + ( f' + "Squashing for project '%s' finished successfully (before: %s, after %s)" + [U.toString projectUuid, show . length $ events, show . length $ squashedEvents] + ) + +instance Ord ProjectEvent where + compare a b = compare (getCreatedAt a) (getCreatedAt b) + +squash :: [ProjectVersion] -> [ProjectEvent] -> [ProjectEvent] +squash versions events = + let groupedEvents = groupBy (\e1 e2 -> utctDay (getCreatedAt e1) == utctDay (getCreatedAt e2)) events + squashedEvents = fmap (squashOnePeriod versions) groupedEvents + in concat squashedEvents + +squashOnePeriod :: [ProjectVersion] -> [ProjectEvent] -> [ProjectEvent] +squashOnePeriod versions = snd . foldr go (M.empty, []) + where + go + :: ProjectEvent + -> (M.Map String (Maybe U.UUID), [ProjectEvent]) + -> (M.Map String (Maybe U.UUID), [ProjectEvent]) + go event' (questions, events) = + case event' of + SetReplyEvent' event -> + if not (L.any (\v -> v.eventUuid == event.uuid) versions) + && Just event.createdBy == M.lookup event.path questions + then (questions, events) + else (M.insert event.path event.createdBy questions, event' : events) + _ -> (questions, event' : events) diff --git a/wizard-server/src/Wizard/Service/Project/File/ProjectFileAcl.hs b/wizard-server/src/Wizard/Service/Project/File/ProjectFileAcl.hs new file mode 100644 index 000000000..5803c5c74 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/File/ProjectFileAcl.hs @@ -0,0 +1,18 @@ +module Wizard.Service.Project.File.ProjectFileAcl where + +import qualified Data.UUID as U + +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Model.Context.AppContext +import Wizard.Model.Project.Project +import Wizard.Service.Project.ProjectAcl + +checkViewPermissionToFile :: U.UUID -> AppContextM () +checkViewPermissionToFile projectUuid = do + project <- findProjectByUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + +checkEditPermissionToFile :: U.UUID -> AppContextM () +checkEditPermissionToFile projectUuid = do + project <- findProjectByUuid projectUuid + checkEditPermissionToProject project.visibility project.sharing project.permissions diff --git a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileCommandExecutor.hs b/wizard-server/src/Wizard/Service/Project/File/ProjectFileCommandExecutor.hs similarity index 73% rename from wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileCommandExecutor.hs rename to wizard-server/src/Wizard/Service/Project/File/ProjectFileCommandExecutor.hs index ff5284848..2bd580f47 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileCommandExecutor.hs +++ b/wizard-server/src/Wizard/Service/Project/File/ProjectFileCommandExecutor.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.File.QuestionnaireFileCommandExecutor where +module Wizard.Service.Project.File.ProjectFileCommandExecutor where import Control.Monad.Except (throwError) import Data.Aeson (eitherDecode) @@ -9,10 +9,10 @@ import Shared.Common.Model.Error.Error import Shared.Common.Util.Logger import Shared.PersistentCommand.Model.PersistentCommand.PersistentCommand import Wizard.Model.Context.AppContext -import Wizard.Model.PersistentCommand.Questionnaire.File.QuestionnaireFileDeleteFromS3Command -import Wizard.S3.Questionnaire.QuestionnaireFileS3 +import Wizard.Model.PersistentCommand.Project.File.ProjectFileDeleteFromS3Command +import Wizard.S3.Project.ProjectFileS3 -cComponent = "questionnaire_file" +cComponent = "project_file" execute :: PersistentCommand U.UUID -> AppContextM (PersistentCommandState, Maybe String) execute command @@ -23,9 +23,9 @@ cDeleteFromS3Name = "deleteFromS3" cDeleteFromS3 :: PersistentCommand U.UUID -> AppContextM (PersistentCommandState, Maybe String) cDeleteFromS3 persistentCommand = do - let eCommand = eitherDecode (BSL.pack persistentCommand.body) :: Either String QuestionnaireFileDeleteFromS3Command + let eCommand = eitherDecode (BSL.pack persistentCommand.body) :: Either String ProjectFileDeleteFromS3Command case eCommand of Right command -> do - removeFile command.questionnaireUuid command.fileUuid + removeFile command.projectUuid command.fileUuid return (DonePersistentCommandState, Nothing) Left error -> return (ErrorPersistentCommandState, Just $ f' "Problem in deserialization of JSON: %s" [error]) diff --git a/wizard-server/src/Wizard/Service/Project/File/ProjectFileMapper.hs b/wizard-server/src/Wizard/Service/Project/File/ProjectFileMapper.hs new file mode 100644 index 000000000..df1055f4a --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/File/ProjectFileMapper.hs @@ -0,0 +1,48 @@ +module Wizard.Service.Project.File.ProjectFileMapper where + +import qualified Data.ByteString.Char8 as BS +import Data.Time +import qualified Data.UUID as U + +import Wizard.Api.Resource.File.FileCreateDTO +import Wizard.Api.Resource.User.UserDTO +import Wizard.Model.Project.File.ProjectFile +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Model.Project.File.ProjectFileSimple +import Wizard.Model.Project.Project +import qualified Wizard.Service.Project.ProjectMapper as ProjectMapper +import qualified Wizard.Service.User.UserMapper as UserMapper + +toList :: ProjectFile -> Project -> Maybe UserDTO -> ProjectFileList +toList ProjectFile {..} project mCreatedBy = + ProjectFileList + { uuid = uuid + , fileName = fileName + , contentType = contentType + , fileSize = fileSize + , project = ProjectMapper.toSimple project + , createdBy = fmap UserMapper.toSuggestion' mCreatedBy + , createdAt = createdAt + } + +toSimple :: ProjectFile -> ProjectFileSimple +toSimple ProjectFile {..} = + ProjectFileSimple + { uuid = uuid + , fileName = fileName + , contentType = contentType + , fileSize = fileSize + } + +fromFileCreateDTO :: FileCreateDTO -> U.UUID -> U.UUID -> Maybe UserDTO -> U.UUID -> UTCTime -> ProjectFile +fromFileCreateDTO reqDto uuid projectUuid mCreatedBy tenantUuid now = + ProjectFile + { uuid = uuid + , fileName = reqDto.fileName + , contentType = reqDto.contentType + , fileSize = fromIntegral . BS.length $ reqDto.content + , projectUuid = projectUuid + , createdBy = fmap (.uuid) mCreatedBy + , tenantUuid = tenantUuid + , createdAt = now + } diff --git a/wizard-server/src/Wizard/Service/Project/File/ProjectFileService.hs b/wizard-server/src/Wizard/Service/Project/File/ProjectFileService.hs new file mode 100644 index 000000000..55691c554 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/File/ProjectFileService.hs @@ -0,0 +1,90 @@ +module Wizard.Service.Project.File.ProjectFileService where + +import Control.Monad (void) +import Control.Monad.Reader (asks, liftIO) +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Shared.Common.Service.Acl.AclService +import Shared.Common.Util.String +import Shared.Common.Util.Uuid +import Wizard.Api.Resource.File.FileCreateDTO +import Wizard.Constant.Acl +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectFileDAO +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.AppContextHelpers +import Wizard.Model.Project.File.ProjectFile +import Wizard.Model.Project.File.ProjectFileList +import Wizard.Model.Project.Project +import Wizard.S3.Project.ProjectFileS3 +import Wizard.Service.Project.Collaboration.ProjectCollaborationService +import Wizard.Service.Project.File.ProjectFileAcl +import Wizard.Service.Project.File.ProjectFileMapper +import Wizard.Service.Project.File.ProjectFileValidation +import Wizard.Service.Project.ProjectAcl +import WizardLib.Public.Api.Resource.TemporaryFile.TemporaryFileDTO +import qualified WizardLib.Public.Service.TemporaryFile.TemporaryFileMapper as TemporaryFileMapper +import WizardLib.Public.Service.TemporaryFile.TemporaryFileService + +getProjectFilesPage :: Maybe String -> Maybe U.UUID -> Pageable -> [Sort] -> AppContextM (Page ProjectFileList) +getProjectFilesPage mQuery mProjectUuid pageable sort = do + case mProjectUuid of + Just projectUuid -> do + project <- findProjectByUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + Nothing -> checkPermission _PRJ_FILE_PERM + findProjectFilesPage mQuery mProjectUuid pageable sort + +createProjectFile :: U.UUID -> U.UUID -> FileCreateDTO -> AppContextM ProjectFileList +createProjectFile projectUuid questionUuid reqDto = + runInTransaction $ do + project <- findProjectByUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + uuid <- liftIO generateUuid + mCurrentUser <- asks currentUser + tenantUuid <- asks currentTenantUuid + now <- liftIO getCurrentTime + let projectFile = fromFileCreateDTO reqDto uuid projectUuid mCurrentUser tenantUuid now + validateProjectFile project questionUuid projectFile + insertProjectFile projectFile + putFile projectUuid uuid reqDto.contentType reqDto.content + addFile projectUuid (toSimple projectFile) + return $ toList projectFile project mCurrentUser + +cloneProjectFiles :: U.UUID -> U.UUID -> AppContextM [(ProjectFile, ProjectFile)] +cloneProjectFiles oldProjectUuid newProjectUuid = do + runInTransaction $ do + oldFiles <- findProjectFilesByProject oldProjectUuid + traverse + ( \oldFile -> do + contentAction <- retrieveFileConduitAction oldProjectUuid oldFile.uuid + newFileUuid <- liftIO generateUuid + let newFile = oldFile {uuid = newFileUuid, projectUuid = newProjectUuid} + let contentDisposition = f' "attachment;filename=\"%s\"" [trim newFile.fileName] + insertProjectFile newFile + putFileConduit newProjectUuid newFile.uuid newFile.contentType contentDisposition contentAction + return (oldFile, newFile) + ) + oldFiles + +downloadProjectFile :: U.UUID -> U.UUID -> AppContextM TemporaryFileDTO +downloadProjectFile projectUuid fileUuid = do + runInTransaction $ do + projectFile <- findProjectFileByUuid fileUuid + checkViewPermissionToFile projectUuid + contentAction <- retrieveFileConduitAction projectUuid fileUuid + mCurrentUserUuid <- getCurrentUserUuid + url <- createTemporaryFileConduit projectFile.fileName "application/octet-stream" mCurrentUserUuid contentAction + return $ TemporaryFileMapper.toDTO url projectFile.contentType + +deleteProjectFile :: U.UUID -> U.UUID -> AppContextM () +deleteProjectFile projectUuid fileUuid = do + runInTransaction $ do + _ <- findProjectFileByUuid fileUuid + checkEditPermissionToFile projectUuid + void $ deleteProjectFileByUuid fileUuid diff --git a/wizard-server/src/Wizard/Service/Project/File/ProjectFileValidation.hs b/wizard-server/src/Wizard/Service/Project/File/ProjectFileValidation.hs new file mode 100644 index 000000000..f25189309 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/File/ProjectFileValidation.hs @@ -0,0 +1,30 @@ +module Wizard.Service.Project.File.ProjectFileValidation where + +import Control.Monad (when) +import Control.Monad.Except (throwError) +import qualified Data.Map.Strict as M +import qualified Data.UUID as U + +import Shared.Common.Model.Error.Error +import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel +import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelLenses +import Wizard.Localization.Messages.Public +import Wizard.Model.Context.AppContext +import Wizard.Model.Project.File.ProjectFile +import Wizard.Model.Project.Project +import Wizard.Service.KnowledgeModel.KnowledgeModelService +import Wizard.Service.Tenant.Limit.LimitService + +validateProjectFile :: Project -> U.UUID -> ProjectFile -> AppContextM () +validateProjectFile project questionUuid projectFile = do + checkStorageSize projectFile.fileSize + km <- compileKnowledgeModel [] (Just project.knowledgeModelPackageId) project.selectedQuestionTagUuids + case M.lookup questionUuid (getQuestionsM km) of + Just (FileQuestion' question) -> + case question.maxSize of + (Just maxFileSize) -> + when + (maxFileSize < fromIntegral projectFile.fileSize) + (throwError . UserError $ _ERROR_VALIDATION__PROJECT_FILE_SIZE_EXCEEDS_LIMIT projectFile.fileSize maxFileSize) + Nothing -> return () + _ -> throwError . UserError $ _ERROR_VALIDATION__PROJECT_FILE_QUESTION_ABSENCE_OR_WRONG_TYPE diff --git a/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterAudit.hs b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterAudit.hs new file mode 100644 index 000000000..b64563261 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterAudit.hs @@ -0,0 +1,8 @@ +module Wizard.Service.Project.Importer.ProjectImporterAudit where + +import Shared.Audit.Service.Audit.AuditService +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () + +auditProjectImporterStartEvent :: String -> AppContextM () +auditProjectImporterStartEvent = logAudit "project_importer" "startEvent" diff --git a/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterMapper.hs b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterMapper.hs new file mode 100644 index 000000000..dd72fa9f2 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterMapper.hs @@ -0,0 +1,26 @@ +module Wizard.Service.Project.Importer.ProjectImporterMapper where + +import Data.Time + +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Model.Project.Importer.ProjectImporter + +toDTO :: ProjectImporter -> ProjectImporterDTO +toDTO importer = + ProjectImporterDTO + { piId = importer.piId + , name = importer.name + , description = importer.description + , url = importer.url + , enabled = importer.enabled + , createdAt = importer.createdAt + , updatedAt = importer.updatedAt + } + +toChangeDTO :: ProjectImporter -> ProjectImporterChangeDTO +toChangeDTO importer = ProjectImporterChangeDTO {enabled = importer.enabled} + +fromChangeDTO :: ProjectImporter -> ProjectImporterChangeDTO -> UTCTime -> ProjectImporter +fromChangeDTO importer reqDto now = + importer {enabled = reqDto.enabled, updatedAt = now} diff --git a/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterService.hs b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterService.hs new file mode 100644 index 000000000..74ea6fa49 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterService.hs @@ -0,0 +1,73 @@ +module Wizard.Service.Project.Importer.ProjectImporterService where + +import Control.Monad.Reader (liftIO) +import Data.Maybe (fromMaybe) +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.PageMetadata +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Wizard.Api.Resource.Project.Importer.ProjectImporterChangeDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectImporterDAO +import Wizard.Model.Context.AclContext +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.AppContextHelpers +import Wizard.Model.Project.Importer.ProjectImporter +import Wizard.Model.Project.Project +import Wizard.Service.Project.Importer.ProjectImporterAudit +import Wizard.Service.Project.Importer.ProjectImporterMapper +import Wizard.Service.Project.Importer.ProjectImporterUtil + +getProjectImportersPageDto :: Maybe String -> Pageable -> [Sort] -> AppContextM (Page ProjectImporterDTO) +getProjectImportersPageDto mQuery pageable sort = do + checkPermission _PRJ_PERM + currentUser <- getCurrentUser + importersPage <- findProjectImportersPage Nothing Nothing mQuery Nothing pageable sort + return $ fmap toDTO importersPage + +getProjectImporterSuggestions :: Maybe U.UUID -> Maybe String -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page ProjectImporterDTO) +getProjectImporterSuggestions mProjectUuid mQuery mEnabled pageable sort = do + checkPermission _PRJ_PERM + mPkgId <- + case mProjectUuid of + Just projectUuid -> do + project <- findProjectByUuid projectUuid + return . Just $ project.knowledgeModelPackageId + Nothing -> return Nothing + page <- findProjectImportersPage Nothing Nothing mQuery mEnabled (Pageable (Just 0) (Just 999999999)) sort + return . fmap toDTO . updatePage page . filterImportersInGroup mPkgId $ page + where + updatePage :: Page ProjectImporter -> [ProjectImporter] -> Page ProjectImporter + updatePage (Page name _ _) array = + let updatedArray = take updatedSize array + updatedSize = fromMaybe 20 pageable.size + updatedTotalElements = length updatedArray + updatedTotalPages = computeTotalPage updatedTotalElements updatedSize + updatedNumber = fromMaybe 0 pageable.page + in Page name (PageMetadata updatedSize updatedTotalElements updatedTotalPages updatedNumber) updatedArray + filterImportersInGroup :: Maybe String -> Page ProjectImporter -> [ProjectImporter] + filterImportersInGroup mPkgId page = + filter isProjectImporterSupported . filterProjectImporters mPkgId $ page.entities + +getProjectImporter :: String -> AppContextM ProjectImporterDTO +getProjectImporter piId = + runInTransaction $ do + checkPermission _PRJ_PERM + importer <- findProjectImporterById piId + auditProjectImporterStartEvent piId + return $ toDTO importer + +modifyProjectImporter :: String -> ProjectImporterChangeDTO -> AppContextM ProjectImporterDTO +modifyProjectImporter piId reqDto = + runInTransaction $ do + checkPermission _PRJ_IMPORTER_PERM + importer <- findProjectImporterById piId + now <- liftIO getCurrentTime + let updatedImporter = fromChangeDTO importer reqDto now + updateProjectImporterById updatedImporter + return $ toDTO updatedImporter diff --git a/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterUtil.hs b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterUtil.hs new file mode 100644 index 000000000..09ef58328 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Importer/ProjectImporterUtil.hs @@ -0,0 +1,18 @@ +module Wizard.Service.Project.Importer.ProjectImporterUtil where + +import Shared.Coordinate.Util.Coordinate +import Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageUtil +import Wizard.Constant.ProjectImporter +import Wizard.Model.Project.Importer.ProjectImporter + +isProjectImporterSupported :: ProjectImporter -> Bool +isProjectImporterSupported importer = importer.metamodelVersion == projectImporterMetamodelVersion + +filterProjectImporters :: Maybe String -> [ProjectImporter] -> [ProjectImporter] +filterProjectImporters mPkgId importers = + case mPkgId of + Just pkgId -> filter (filterProjectImporter . splitCoordinate $ pkgId) importers + Nothing -> importers + where + filterProjectImporter :: [String] -> ProjectImporter -> Bool + filterProjectImporter pkgIdSplit importer = fitsIntoKMSpecs pkgIdSplit importer.allowedPackages diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/ChangeQTypeSanitizer.hs b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/ChangeQTypeSanitizer.hs similarity index 96% rename from wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/ChangeQTypeSanitizer.hs rename to wizard-server/src/Wizard/Service/Project/Migration/Migrator/ChangeQTypeSanitizer.hs index 30fa4c63e..92e04a871 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/ChangeQTypeSanitizer.hs +++ b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/ChangeQTypeSanitizer.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.Migration.Migrator.ChangeQTypeSanitizer where +module Wizard.Service.Project.Migration.Migrator.ChangeQTypeSanitizer where import qualified Data.Aeson as A import qualified Data.Aeson.KeyMap as KM @@ -10,7 +10,7 @@ import Shared.Common.Util.Maybe (concatMaybe) import Shared.Common.Util.String (splitOn) import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelLenses -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply sanitizeReplies :: KnowledgeModel -> [ReplyTuple] -> [ReplyTuple] sanitizeReplies km = mapMaybe (sanitizeReply km) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/MoveEventGenerator.hs b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/MoveEventGenerator.hs similarity index 96% rename from wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/MoveEventGenerator.hs rename to wizard-server/src/Wizard/Service/Project/Migration/Migrator/MoveEventGenerator.hs index 9ab1ef745..068b7e82e 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/MoveEventGenerator.hs +++ b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/MoveEventGenerator.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.Migration.Migrator.MoveEventGenerator where +module Wizard.Service.Project.Migration.Migrator.MoveEventGenerator where import Control.Monad (guard) import qualified Data.Map.Strict as M diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/MoveSanitizer.hs b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/MoveSanitizer.hs similarity index 94% rename from wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/MoveSanitizer.hs rename to wizard-server/src/Wizard/Service/Project/Migration/Migrator/MoveSanitizer.hs index dac84aaa9..7c655e06e 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/MoveSanitizer.hs +++ b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/MoveSanitizer.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.Migration.Migrator.MoveSanitizer where +module Wizard.Service.Project.Migration.Migrator.MoveSanitizer where import qualified Data.List as L import qualified Data.Map.Strict as M @@ -13,9 +13,9 @@ import Shared.KnowledgeModel.Model.KnowledgeModel.Event.KnowledgeModelEvent import Shared.KnowledgeModel.Model.KnowledgeModel.Event.Move.MoveEvent import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelUtil -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireUtil -import Wizard.Service.Questionnaire.Migration.Migrator.MoveEventGenerator +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.ProjectUtil +import Wizard.Service.Project.Migration.Migrator.MoveEventGenerator sanitizeReplies :: UTCTime -> KnowledgeModel -> KnowledgeModel -> [ReplyTuple] -> [ReplyTuple] sanitizeReplies now oldKm newKm replies = sanitizeRepliesWithEvents oldKm newKm replies (generateEvents now oldKm newKm) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/Sanitizer.hs b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/Sanitizer.hs similarity index 61% rename from wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/Sanitizer.hs rename to wizard-server/src/Wizard/Service/Project/Migration/Migrator/Sanitizer.hs index 81ca6fbd0..333448a43 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/Migrator/Sanitizer.hs +++ b/wizard-server/src/Wizard/Service/Project/Migration/Migrator/Sanitizer.hs @@ -1,5 +1,5 @@ -module Wizard.Service.Questionnaire.Migration.Migrator.Sanitizer ( - sanitizeQuestionnaireEvents, +module Wizard.Service.Project.Migration.Migrator.Sanitizer ( + sanitizeProjectEvents, ) where import Control.Monad.Reader (liftIO) @@ -11,22 +11,22 @@ import Shared.Common.Util.Uuid import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Wizard.Model.Context.AppContext import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Service.Questionnaire.Compiler.CompilerService -import qualified Wizard.Service.Questionnaire.Migration.Migrator.ChangeQTypeSanitizer as CTS -import qualified Wizard.Service.Questionnaire.Migration.Migrator.MoveSanitizer as MS +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.ProjectReply +import Wizard.Service.Project.Compiler.ProjectCompilerService +import qualified Wizard.Service.Project.Migration.Migrator.ChangeQTypeSanitizer as CTS +import qualified Wizard.Service.Project.Migration.Migrator.MoveSanitizer as MS import Wizard.Service.User.UserMapper -sanitizeQuestionnaireEvents :: U.UUID -> KnowledgeModel -> KnowledgeModel -> [QuestionnaireEventList] -> AppContextM [QuestionnaireEventList] -sanitizeQuestionnaireEvents qtnUuid oldKm newKm events = do - let oldQtnContent = compileQuestionnaire events - let oldReplies = oldQtnContent.replies +sanitizeProjectEvents :: U.UUID -> KnowledgeModel -> KnowledgeModel -> [ProjectEventList] -> AppContextM [ProjectEventList] +sanitizeProjectEvents projectUuid oldKm newKm events = do + let oldProjectContent = compileProjectEvents events + let oldReplies = oldProjectContent.replies now <- liftIO getCurrentTime let sanitizedReplies = M.fromList . sanitizeReplies now oldKm newKm . M.toList $ oldReplies - clearReplyEvents <- generateClearReplyEvents qtnUuid oldReplies sanitizedReplies - setReplyEvents <- generateSetReplyEvents qtnUuid oldReplies sanitizedReplies + clearReplyEvents <- generateClearReplyEvents projectUuid oldReplies sanitizedReplies + setReplyEvents <- generateSetReplyEvents projectUuid oldReplies sanitizedReplies return $ events ++ clearReplyEvents ++ setReplyEvents -- -------------------------------- @@ -35,22 +35,22 @@ sanitizeQuestionnaireEvents qtnUuid oldKm newKm events = do sanitizeReplies :: UTCTime -> KnowledgeModel -> KnowledgeModel -> [ReplyTuple] -> [ReplyTuple] sanitizeReplies now oldKm newKm = MS.sanitizeReplies now oldKm newKm . CTS.sanitizeReplies newKm -generateClearReplyEvents :: U.UUID -> M.Map String Reply -> M.Map String Reply -> AppContextM [QuestionnaireEventList] -generateClearReplyEvents qtnUuid oldReplies sanitizedReplies = traverse generateEvent repliesToBeDeleted +generateClearReplyEvents :: U.UUID -> M.Map String Reply -> M.Map String Reply -> AppContextM [ProjectEventList] +generateClearReplyEvents projectUuid oldReplies sanitizedReplies = traverse generateEvent repliesToBeDeleted where repliesToBeDeleted :: [ReplyTuple] repliesToBeDeleted = M.toList . M.filterWithKey (\k _ -> k `M.notMember` sanitizedReplies) $ oldReplies - generateEvent :: ReplyTuple -> AppContextM QuestionnaireEventList + generateEvent :: ReplyTuple -> AppContextM ProjectEventList generateEvent (k, _) = do eUuid <- liftIO generateUuid now <- liftIO getCurrentTime user <- getCurrentUser return . ClearReplyEventList' $ ClearReplyEventList eUuid k (Just (toSuggestion' user)) now -generateSetReplyEvents :: U.UUID -> M.Map String Reply -> M.Map String Reply -> AppContextM [QuestionnaireEventList] -generateSetReplyEvents qtnUuid oldReplies sanitizedReplies = foldl generateEvent (return []) (M.toList sanitizedReplies) +generateSetReplyEvents :: U.UUID -> M.Map String Reply -> M.Map String Reply -> AppContextM [ProjectEventList] +generateSetReplyEvents projectUuid oldReplies sanitizedReplies = foldl generateEvent (return []) (M.toList sanitizedReplies) where - generateEvent :: AppContextM [QuestionnaireEventList] -> ReplyTuple -> AppContextM [QuestionnaireEventList] + generateEvent :: AppContextM [ProjectEventList] -> ReplyTuple -> AppContextM [ProjectEventList] generateEvent accM (keyFromSanitizedReply, valueFromSanitizedReply) = do acc <- accM eUuid <- liftIO generateUuid diff --git a/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationAudit.hs b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationAudit.hs new file mode 100644 index 000000000..e55ab8091 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationAudit.hs @@ -0,0 +1,49 @@ +module Wizard.Service.Project.Migration.ProjectMigrationAudit where + +import qualified Data.Map.Strict as M +import qualified Data.UUID as U + +import Shared.Audit.Service.Audit.AuditService +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () +import Wizard.Model.Project.Project + +auditProjectMigrationCreate :: ProjectMigrationCreateDTO -> Project -> Project -> AppContextM () +auditProjectMigrationCreate reqDto oldProject newProject = + logAuditWithBody + "project_migration" + "create" + (U.toString oldProject.uuid) + ( M.fromList + [ ("sourceKnowledgeModelPackageId", oldProject.knowledgeModelPackageId) + , ("targetKnowledgeModelPackageId", reqDto.targetKnowledgeModelPackageId) + , ("oldProjectUuid", U.toString $ oldProject.uuid) + , ("newProjectUuid", U.toString $ newProject.uuid) + ] + ) + +auditProjectMigrationModify :: ProjectMigrationDTO -> ProjectMigrationChangeDTO -> AppContextM () +auditProjectMigrationModify projectMigration resolvedQuestionUuids = + logAuditWithBody + "project_migration" + "modify" + (U.toString $ projectMigration.newProject.uuid) + (M.fromList [("resolvedQuestionUuids", show resolvedQuestionUuids)]) + +auditProjectMigrationFinish :: Project -> Project -> AppContextM () +auditProjectMigrationFinish oldProject newProject = + logAuditWithBody + "project_migration" + "finish" + (U.toString oldProject.uuid) + ( M.fromList + [("oldProjectUuid", U.toString $ oldProject.uuid), ("newProjectUuid", U.toString $ newProject.uuid)] + ) + +auditProjectMigrationCancel :: ProjectMigrationDTO -> AppContextM () +auditProjectMigrationCancel projectMigration = + logAudit "project_migration" "cancel" (U.toString $ projectMigration.oldProject.uuid) diff --git a/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationMapper.hs b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationMapper.hs new file mode 100644 index 000000000..9efa8ae08 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationMapper.hs @@ -0,0 +1,50 @@ +module Wizard.Service.Project.Migration.ProjectMigrationMapper where + +import Data.Time +import qualified Data.UUID as U + +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Api.Resource.User.UserDTO +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Migration.ProjectMigration + +toDTO :: ProjectDetailQuestionnaireDTO -> ProjectDetailQuestionnaireDTO -> [U.UUID] -> U.UUID -> ProjectMigrationDTO +toDTO oldProject newProject projectUuids tenantUuid = + ProjectMigrationDTO + { oldProject = oldProject + , newProject = newProject + , resolvedQuestionUuids = projectUuids + , tenantUuid = tenantUuid + } + +fromCreateDTO :: U.UUID -> U.UUID -> U.UUID -> ProjectMigration +fromCreateDTO oldProjectUuid newProjectUuid tenantUuid = + ProjectMigration + { oldProjectUuid = oldProjectUuid + , newProjectUuid = newProjectUuid + , resolvedQuestionUuids = [] + , tenantUuid = tenantUuid + } + +fromChangeDTO :: ProjectMigrationChangeDTO -> ProjectMigrationDTO -> ProjectMigration +fromChangeDTO changeDto ms = + ProjectMigration + { oldProjectUuid = ms.oldProject.uuid + , newProjectUuid = ms.newProject.uuid + , resolvedQuestionUuids = changeDto.resolvedQuestionUuids + , tenantUuid = ms.tenantUuid + } + +toProjectPhaseEvent :: U.UUID -> Maybe U.UUID -> U.UUID -> U.UUID -> Maybe UserDTO -> UTCTime -> ProjectEvent +toProjectPhaseEvent phaseEventUuid kmPhaseUuid projectUuid tenantUuid mCurrentUserUuid now = + SetPhaseEvent' $ + SetPhaseEvent + { uuid = phaseEventUuid + , phaseUuid = kmPhaseUuid + , projectUuid = projectUuid + , tenantUuid = tenantUuid + , createdBy = fmap (.uuid) mCurrentUserUuid + , createdAt = now + } diff --git a/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationService.hs b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationService.hs new file mode 100644 index 000000000..c55f0ea72 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationService.hs @@ -0,0 +1,205 @@ +module Wizard.Service.Project.Migration.ProjectMigrationService where + +import Control.Monad.Reader (asks, liftIO) +import Data.Foldable (traverse_) +import qualified Data.List as L +import Data.Maybe (catMaybes) +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Lens +import Shared.Common.Util.List +import Shared.Common.Util.Uuid +import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO +import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationChangeDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationCreateDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO +import Wizard.Model.Common.Lens +import Wizard.Model.Context.AclContext +import Wizard.Model.Context.AppContext +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Migration.ProjectMigration +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Service.DocumentTemplate.DocumentTemplateUtil +import Wizard.Service.KnowledgeModel.KnowledgeModelService +import Wizard.Service.Project.Compiler.ProjectCompilerService +import Wizard.Service.Project.Event.ProjectEventMapper +import Wizard.Service.Project.Migration.Migrator.Sanitizer +import Wizard.Service.Project.Migration.ProjectMigrationAudit +import Wizard.Service.Project.Migration.ProjectMigrationMapper +import Wizard.Service.Project.Migration.ProjectMigrationValidation +import Wizard.Service.Project.ProjectAcl +import Wizard.Service.Project.ProjectService + +createProjectMigration :: U.UUID -> ProjectMigrationCreateDTO -> AppContextM ProjectMigrationDTO +createProjectMigration oldProjectUuid reqDto = + runInTransaction $ do + checkPermission _PRJ_PERM + validateMigrationExistence oldProjectUuid + oldProject <- findProjectByUuid oldProjectUuid + checkMigrationPermissionToProject oldProject.visibility oldProject.permissions + (newProject, newProjectEvents, newProjectVersions) <- upgradeProject reqDto oldProject + insertProject newProject + insertProjectEvents newProjectEvents + traverse_ insertProjectVersion newProjectVersions + tenantUuid <- asks currentTenantUuid + let projectMigration = fromCreateDTO oldProject.uuid newProject.uuid tenantUuid + insertProjectMigration projectMigration + auditProjectMigrationCreate reqDto oldProject newProject + getProjectMigration newProject.uuid + +getProjectMigration :: U.UUID -> AppContextM ProjectMigrationDTO +getProjectMigration projectUuid = do + checkPermission _PRJ_PERM + projectMigration <- findProjectMigrationByNewProjectUuid projectUuid + oldProjectDto <- getProjectDetailQuestionnaireByUuid projectMigration.oldProjectUuid + newProjectDto <- getProjectDetailQuestionnaireByUuid projectMigration.newProjectUuid + oldProject <- findProjectByUuid projectMigration.oldProjectUuid + newProject <- findProjectByUuid projectMigration.newProjectUuid + checkMigrationPermissionToProject oldProject.visibility oldProject.permissions + checkMigrationPermissionToProject newProject.visibility newProject.permissions + return $ toDTO oldProjectDto newProjectDto projectMigration.resolvedQuestionUuids projectMigration.tenantUuid + +modifyProjectMigration :: U.UUID -> ProjectMigrationChangeDTO -> AppContextM ProjectMigrationDTO +modifyProjectMigration projectUuid reqDto = + runInTransaction $ do + checkPermission _PRJ_PERM + projectMigration <- getProjectMigration projectUuid + let updatedState = fromChangeDTO reqDto projectMigration + updateProjectMigrationByNewProjectUuid updatedState + auditProjectMigrationModify projectMigration reqDto + return $ toDTO projectMigration.oldProject projectMigration.newProject updatedState.resolvedQuestionUuids updatedState.tenantUuid + +finishProjectMigration :: U.UUID -> AppContextM () +finishProjectMigration projectUuid = + runInTransaction $ do + checkPermission _PRJ_PERM + _ <- getProjectMigration projectUuid + projectMigration <- findProjectMigrationByNewProjectUuid projectUuid + deleteProjectMigrationByNewProjectUuid projectUuid + oldProject <- findProjectByUuid projectMigration.oldProjectUuid + newProject <- findProjectByUuid projectMigration.newProjectUuid + newProjectEvents <- ensurePhaseIsSetIfNecessary newProject + newProjectVersions <- findProjectVersionsByProjectUuid projectMigration.newProjectUuid + now <- liftIO getCurrentTime + let newProjectUpdated = + oldProject + { formatUuid = newProject.formatUuid + , documentTemplateId = newProject.documentTemplateId + , selectedQuestionTagUuids = newProject.selectedQuestionTagUuids + , knowledgeModelPackageId = newProject.knowledgeModelPackageId + , updatedAt = now + } + :: Project + let newProjectEventsWithOldProjectUuid = fmap (\event -> setProjectUuid event oldProject.uuid) newProjectEvents + newVersionsWithNewUuid <- traverse generateNewVersionUuid newProjectVersions + let newVersionsWithOldProjectUuid = fmap (\v -> v {projectUuid = oldProject.uuid} :: ProjectVersion) newVersionsWithNewUuid + -- Delete the new project + deleteProjectEventsByProjectUuid newProject.uuid + deleteProject newProject.uuid False + -- Update the old project with values from new project + updateProjectByUuid newProjectUpdated + deleteProjectEventsByProjectUuid oldProject.uuid + insertProjectEvents newProjectEventsWithOldProjectUuid + traverse_ insertProjectVersion newVersionsWithOldProjectUuid + auditProjectMigrationFinish oldProject newProject + +cancelProjectMigration :: U.UUID -> AppContextM () +cancelProjectMigration projectUuid = + runInTransaction $ do + checkPermission _PRJ_PERM + projectMigration <- getProjectMigration projectUuid + deleteProject projectMigration.newProject.uuid True + deleteProjectMigrationByNewProjectUuid projectUuid + auditProjectMigrationCancel projectMigration + return () + +-- -------------------------------- +-- PRIVATE +-- -------------------------------- +upgradeProject :: ProjectMigrationCreateDTO -> Project -> AppContextM (Project, [ProjectEvent], [ProjectVersion]) +upgradeProject reqDto oldProject = do + let newPkgId = reqDto.targetKnowledgeModelPackageId + let newTagUuids = reqDto.targetTagUuids + oldKm <- compileKnowledgeModel [] (Just oldProject.knowledgeModelPackageId) newTagUuids + newKm <- compileKnowledgeModel [] (Just newPkgId) newTagUuids + newUuid <- liftIO generateUuid + oldProjectEvents <- findProjectEventListsByProjectUuid oldProject.uuid + clonedProjectEventsWithOldEventUuid <- cloneProjectEventsWithOldEventUuid oldProjectEvents + let clonedProjectEvents = fmap snd clonedProjectEventsWithOldEventUuid + newProjectEvents <- sanitizeProjectEvents newUuid oldKm newKm clonedProjectEvents + (newDocumentTemplateId, newFormatUuid) <- getNewDocumentTemplateIdAndFormatUuid oldProject newPkgId + let newProjectEventUuids = fmap getUuid newProjectEvents + let clonedProjectEventsFiltered = filter (\e -> getUuid (snd e) `elem` newProjectEventUuids) clonedProjectEventsWithOldEventUuid + let newPermissions = fmap (\perm -> perm {projectUuid = newUuid} :: ProjectPerm) oldProject.permissions + let upgradedProject = + oldProject + { uuid = newUuid + , knowledgeModelPackageId = newPkgId + , selectedQuestionTagUuids = newTagUuids + , documentTemplateId = newDocumentTemplateId + , formatUuid = newFormatUuid + , permissions = newPermissions + } + :: Project + versionsWithOldProjectUuid <- findProjectVersionsByProjectUuid oldProject.uuid + newVersionsWithNewUuid <- traverse generateNewVersionUuid versionsWithOldProjectUuid + let newVersionsWithNewEventUuid = + fmap + ( \v -> + case L.find (\(oldEventUuid, _) -> v.eventUuid == oldEventUuid) clonedProjectEventsWithOldEventUuid of + Just (_, newEvent) -> + Just $ + v + { projectUuid = newUuid + , eventUuid = getUuid newEvent + } + Nothing -> Nothing + ) + newVersionsWithNewUuid + let newVersions = catMaybes newVersionsWithNewEventUuid + return (upgradedProject, fmap (toEvent upgradedProject.uuid upgradedProject.tenantUuid) newProjectEvents, newVersions) + +ensurePhaseIsSetIfNecessary :: Project -> AppContextM [ProjectEvent] +ensurePhaseIsSetIfNecessary newProject = do + uuid <- liftIO generateUuid + mCurrentUser <- asks currentUser + now <- liftIO getCurrentTime + newProjectListEvents <- findProjectEventListsByProjectUuid newProject.uuid + let projectContent = compileProjectEvents newProjectListEvents + knowledgeModel <- compileKnowledgeModel [] (Just newProject.knowledgeModelPackageId) newProject.selectedQuestionTagUuids + let newProjectEvents = fmap (toEvent newProject.uuid newProject.tenantUuid) newProjectListEvents + return $ + case (headSafe knowledgeModel.phaseUuids, projectContent.phaseUuid) of + (Nothing, Nothing) -> newProjectEvents + (Nothing, Just projectPhaseUuid) -> newProjectEvents ++ [toProjectPhaseEvent uuid Nothing newProject.uuid newProject.tenantUuid mCurrentUser now] + (Just kmPhaseUuid, Nothing) -> newProjectEvents ++ [toProjectPhaseEvent uuid (Just kmPhaseUuid) newProject.uuid newProject.tenantUuid mCurrentUser now] + (Just kmPhaseUuid, Just projectPhaseUuid) -> + if projectPhaseUuid `notElem` knowledgeModel.phaseUuids + then newProjectEvents ++ [toProjectPhaseEvent uuid (Just kmPhaseUuid) newProject.uuid newProject.tenantUuid mCurrentUser now] + else newProjectEvents + +generateNewVersionUuid :: ProjectVersion -> AppContextM ProjectVersion +generateNewVersionUuid version = do + newVersionUuid <- liftIO generateUuid + return $ version {uuid = newVersionUuid} + +getNewDocumentTemplateIdAndFormatUuid :: Project -> String -> AppContextM (Maybe String, Maybe U.UUID) +getNewDocumentTemplateIdAndFormatUuid oldProject newPkgId = do + case oldProject.documentTemplateId of + Just id -> do + documentTemplate <- findDocumentTemplateById id + if isPkgAllowedByDocumentTemplate newPkgId documentTemplate + then return (Just id, oldProject.formatUuid) + else return (Nothing, Nothing) + Nothing -> return (Nothing, Nothing) diff --git a/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationValidation.hs b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationValidation.hs new file mode 100644 index 000000000..63cc39cc7 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Migration/ProjectMigrationValidation.hs @@ -0,0 +1,12 @@ +module Wizard.Service.Project.Migration.ProjectMigrationValidation where + +import Control.Monad (unless) +import Control.Monad.Except (throwError) + +import Shared.Common.Model.Error.Error +import Wizard.Database.DAO.Project.ProjectMigrationDAO +import Wizard.Localization.Messages.Public + +validateMigrationExistence oldProjectUuid = do + states <- findProjectMigrationsByOldProjectUuid oldProjectUuid + unless (null states) (throwError . UserError $ _ERROR_VALIDATION__PROJECT_MIGRATION_UNIQUENESS) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireAcl.hs b/wizard-server/src/Wizard/Service/Project/ProjectAcl.hs similarity index 50% rename from wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireAcl.hs rename to wizard-server/src/Wizard/Service/Project/ProjectAcl.hs index a41189704..0619cc78f 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireAcl.hs +++ b/wizard-server/src/Wizard/Service/Project/ProjectAcl.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.QuestionnaireAcl where +module Wizard.Service.Project.ProjectAcl where import Control.Monad (unless) import Control.Monad.Except (throwError) @@ -9,68 +9,68 @@ import Wizard.Api.Resource.User.UserDTO import Wizard.Model.Context.AclContext import Wizard.Model.Context.AppContext import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireAclHelpers -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectAclHelpers +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Service.Tenant.Config.ConfigService import WizardLib.Public.Database.DAO.User.UserGroupMembershipDAO import WizardLib.Public.Model.User.UserGroupMembership -checkCreatePermissionToQtn :: AppContextM () -checkCreatePermissionToQtn = do - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - let qtnSharingEnabled = tcQuestionnaire.questionnaireSharing.enabled - let qtnSharingAnonymousEnabled = tcQuestionnaire.questionnaireSharing.anonymousEnabled - let qtnCreation = tcQuestionnaire.questionnaireCreation - case (qtnSharingEnabled, qtnSharingAnonymousEnabled, qtnCreation) of - (True, True, CustomQuestionnaireCreation) -> return () - (True, True, TemplateAndCustomQuestionnaireCreation) -> return () - (_, _, TemplateQuestionnaireCreation) -> do - checkPermission _QTN_PERM - checkPermission _QTN_TML_PERM - (_, _, _) -> checkPermission _QTN_PERM +checkCreatePermissionToProject :: AppContextM () +checkCreatePermissionToProject = do + tcProject <- getCurrentTenantConfigProject + let projectSharingEnabled = tcProject.projectSharing.enabled + let projectSharingAnonymousEnabled = tcProject.projectSharing.anonymousEnabled + let projectCreation = tcProject.projectCreation + case (projectSharingEnabled, projectSharingAnonymousEnabled, projectCreation) of + (True, True, CustomProjectCreation) -> return () + (True, True, TemplateAndCustomProjectCreation) -> return () + (_, _, TemplateProjectCreation) -> do + checkPermission _PRJ_PERM + checkPermission _PRJ_TML_PERM + (_, _, _) -> checkPermission _PRJ_PERM -checkCreateFromTemplatePermissionToQtn :: Bool -> AppContextM () -checkCreateFromTemplatePermissionToQtn isTemplate = do - checkPermission _QTN_PERM - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - let qtnCreation = tcQuestionnaire.questionnaireCreation - case qtnCreation of - CustomQuestionnaireCreation -> - throwError . UserError . _ERROR_SERVICE_COMMON__FEATURE_IS_DISABLED $ "Questionnaire Template" - _ -> unless isTemplate (throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Questionnaire Template") +checkCreateFromTemplatePermissionToProject :: Bool -> AppContextM () +checkCreateFromTemplatePermissionToProject isTemplate = do + checkPermission _PRJ_PERM + tcProject <- getCurrentTenantConfigProject + let projectCreation = tcProject.projectCreation + case projectCreation of + CustomProjectCreation -> + throwError . UserError . _ERROR_SERVICE_COMMON__FEATURE_IS_DISABLED $ "Project Template" + _ -> unless isTemplate (throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Project Template") -checkClonePermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> QuestionnaireSharing -> [questionnairePerm] -> AppContextM () -checkClonePermissionToQtn visibility sharing permissions = do - checkPermission _QTN_PERM - checkViewPermissionToQtn visibility sharing permissions +checkClonePermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> ProjectSharing -> [projectPerm] -> AppContextM () +checkClonePermissionToProject visibility sharing permissions = do + checkPermission _PRJ_PERM + checkViewPermissionToProject visibility sharing permissions -checkViewPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> QuestionnaireSharing -> [questionnairePerm] -> AppContextM () -checkViewPermissionToQtn visibility sharing perms = do - result <- hasViewPermissionToQtn visibility sharing perms +checkViewPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> ProjectSharing -> [projectPerm] -> AppContextM () +checkViewPermissionToProject visibility sharing perms = do + result <- hasViewPermissionToProject visibility sharing perms if result then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "View Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "View Project" -hasViewPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> QuestionnaireSharing -> [questionnairePerm] -> AppContextM Bool -hasViewPermissionToQtn visibility sharing perms = - if sharing == AnyoneWithLinkViewQuestionnaire - || sharing == AnyoneWithLinkCommentQuestionnaire +hasViewPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> ProjectSharing -> [projectPerm] -> AppContextM Bool +hasViewPermissionToProject visibility sharing perms = + if sharing == AnyoneWithLinkViewProjectSharing + || sharing == AnyoneWithLinkCommentProjectSharing || sharing - == AnyoneWithLinkEditQuestionnaire + == AnyoneWithLinkEditProjectSharing then return True else do - checkPermission _QTN_PERM + checkPermission _PRJ_PERM currentUser <- getCurrentUser userGroupMemberships <- findUserGroupMembershipsByUserUuid currentUser.uuid let currentUserGroupUuids = fmap (.userGroupUuid) userGroupMemberships if or [ currentUser.uRole == _USER_ROLE_ADMIN , -- Check visibility - visibility == VisibleViewQuestionnaire - , visibility == VisibleCommentQuestionnaire - , visibility == VisibleEditQuestionnaire + visibility == VisibleViewProjectVisibility + , visibility == VisibleCommentProjectVisibility + , visibility == VisibleEditProjectVisibility , -- Check membership currentUser.uuid `elem` getUserUuidsForViewerPerm perms , currentUser.uuid `elem` getUserUuidsForCommenterPerm perms @@ -85,27 +85,27 @@ hasViewPermissionToQtn visibility sharing perms = then return True else return False -checkCommentPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> QuestionnaireSharing -> [questionnairePerm] -> AppContextM () -checkCommentPermissionToQtn visibility sharing perms = do - result <- hasCommentPermissionToQtn visibility sharing perms +checkCommentPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> ProjectSharing -> [projectPerm] -> AppContextM () +checkCommentPermissionToProject visibility sharing perms = do + result <- hasCommentPermissionToProject visibility sharing perms if result then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Comment Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Comment Project" -hasCommentPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> QuestionnaireSharing -> [questionnairePerm] -> AppContextM Bool -hasCommentPermissionToQtn visibility sharing perms = - if sharing == AnyoneWithLinkCommentQuestionnaire || sharing == AnyoneWithLinkEditQuestionnaire +hasCommentPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> ProjectSharing -> [projectPerm] -> AppContextM Bool +hasCommentPermissionToProject visibility sharing perms = + if sharing == AnyoneWithLinkCommentProjectSharing || sharing == AnyoneWithLinkEditProjectSharing then return True else do - checkPermission _QTN_PERM + checkPermission _PRJ_PERM currentUser <- getCurrentUser userGroupMemberships <- findUserGroupMembershipsByUserUuid currentUser.uuid let currentUserGroupUuids = fmap (.userGroupUuid) userGroupMemberships if or [ currentUser.uRole == _USER_ROLE_ADMIN , -- Check visibility - visibility == VisibleCommentQuestionnaire - , visibility == VisibleEditQuestionnaire + visibility == VisibleCommentProjectVisibility + , visibility == VisibleEditProjectVisibility , -- Check membership currentUser.uuid `elem` getUserUuidsForCommenterPerm perms , currentUser.uuid `elem` getUserUuidsForEditorPerm perms @@ -118,26 +118,26 @@ hasCommentPermissionToQtn visibility sharing perms = then return True else return False -checkEditPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> QuestionnaireSharing -> [questionnairePerm] -> AppContextM () -checkEditPermissionToQtn visibility sharing perms = do - result <- hasEditPermissionToQtn visibility sharing perms +checkEditPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> ProjectSharing -> [projectPerm] -> AppContextM () +checkEditPermissionToProject visibility sharing perms = do + result <- hasEditPermissionToProject visibility sharing perms if result then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Edit Project" -hasEditPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> QuestionnaireSharing -> [questionnairePerm] -> AppContextM Bool -hasEditPermissionToQtn visibility sharing perms = - if sharing == AnyoneWithLinkEditQuestionnaire +hasEditPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> ProjectSharing -> [projectPerm] -> AppContextM Bool +hasEditPermissionToProject visibility sharing perms = + if sharing == AnyoneWithLinkEditProjectSharing then return True else do - checkPermission _QTN_PERM + checkPermission _PRJ_PERM currentUser <- getCurrentUser userGroupMemberships <- findUserGroupMembershipsByUserUuid currentUser.uuid let currentUserGroupUuids = fmap (.userGroupUuid) userGroupMemberships if or [ currentUser.uRole == _USER_ROLE_ADMIN , -- Check visibility - visibility == VisibleEditQuestionnaire + visibility == VisibleEditProjectVisibility , -- Check membership currentUser.uuid `elem` getUserUuidsForEditorPerm perms , currentUser.uuid `elem` getUserUuidsForOwnerPerm perms @@ -148,16 +148,16 @@ hasEditPermissionToQtn visibility sharing perms = then return True else return False -checkOwnerPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> [questionnairePerm] -> AppContextM () -checkOwnerPermissionToQtn visibility perms = do - result <- hasOwnerPermissionToQtn visibility perms +checkOwnerPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> [projectPerm] -> AppContextM () +checkOwnerPermissionToProject visibility perms = do + result <- hasOwnerPermissionToProject visibility perms if result then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Administrate Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Administrate Project" -hasOwnerPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> [questionnairePerm] -> AppContextM Bool -hasOwnerPermissionToQtn visibility perms = do - checkPermission _QTN_PERM +hasOwnerPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> [projectPerm] -> AppContextM Bool +hasOwnerPermissionToProject visibility perms = do + checkPermission _PRJ_PERM currentUser <- getCurrentUser userGroupMemberships <- findUserGroupMembershipsByUserUuid currentUser.uuid let currentUserGroupUuids = fmap (.userGroupUuid) userGroupMemberships @@ -171,22 +171,22 @@ hasOwnerPermissionToQtn visibility perms = do then return True else return False -checkMigrationPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> [questionnairePerm] -> AppContextM () -checkMigrationPermissionToQtn visibility perms = do - result <- hasMigrationPermissionToQtn visibility perms +checkMigrationPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> [projectPerm] -> AppContextM () +checkMigrationPermissionToProject visibility perms = do + result <- hasMigrationPermissionToProject visibility perms if result then return () - else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Migrate Questionnaire" + else throwError . ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Migrate Project" -hasMigrationPermissionToQtn :: QuestionnairePermC questionnairePerm => QuestionnaireVisibility -> [questionnairePerm] -> AppContextM Bool -hasMigrationPermissionToQtn visibility perms = do +hasMigrationPermissionToProject :: ProjectPermC projectPerm => ProjectVisibility -> [projectPerm] -> AppContextM Bool +hasMigrationPermissionToProject visibility perms = do currentUser <- getCurrentUser userGroupMemberships <- findUserGroupMembershipsByUserUuid currentUser.uuid let currentUserGroupUuids = fmap (.userGroupUuid) userGroupMemberships if or [ currentUser.uRole == _USER_ROLE_ADMIN , -- Check visibility - visibility == VisibleEditQuestionnaire + visibility == VisibleEditProjectVisibility , -- Check membership currentUser.uuid `elem` getUserUuidsForEditorPerm perms , currentUser.uuid `elem` getUserUuidsForOwnerPerm perms diff --git a/wizard-server/src/Wizard/Service/Project/ProjectAudit.hs b/wizard-server/src/Wizard/Service/Project/ProjectAudit.hs new file mode 100644 index 000000000..ad0c96822 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/ProjectAudit.hs @@ -0,0 +1,13 @@ +module Wizard.Service.Project.ProjectAudit where + +import qualified Data.UUID as U + +import Shared.Audit.Service.Audit.AuditService +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.ContextLenses () + +auditProjectListEvents :: U.UUID -> AppContextM () +auditProjectListEvents projectUuid = logAudit "project" "listEvents" (U.toString projectUuid) + +auditProjectDetailEvent :: U.UUID -> AppContextM () +auditProjectDetailEvent projectUuid = logAudit "project" "detailEvent" (U.toString projectUuid) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireCommandExecutor.hs b/wizard-server/src/Wizard/Service/Project/ProjectCommandExecutor.hs similarity index 57% rename from wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireCommandExecutor.hs rename to wizard-server/src/Wizard/Service/Project/ProjectCommandExecutor.hs index d942f29d5..32602af20 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireCommandExecutor.hs +++ b/wizard-server/src/Wizard/Service/Project/ProjectCommandExecutor.hs @@ -1,4 +1,4 @@ -module Wizard.Service.Questionnaire.QuestionnaireCommandExecutor where +module Wizard.Service.Project.ProjectCommandExecutor where import Control.Monad.Except (throwError) import Data.Aeson (eitherDecode) @@ -9,23 +9,23 @@ import Shared.Common.Model.Error.Error import Shared.Common.Util.Logger import Shared.PersistentCommand.Model.PersistentCommand.PersistentCommand import Wizard.Model.Context.AppContext -import Wizard.Service.Questionnaire.QuestionnaireService -import WizardLib.Public.Model.PersistentCommand.Questionnaire.CreateQuestionnaireCommand +import Wizard.Service.Project.ProjectService +import WizardLib.Public.Model.PersistentCommand.Project.CreateProjectCommand -cComponent = "questionnaire" +cComponent = "project" execute :: PersistentCommand U.UUID -> AppContextM (PersistentCommandState, Maybe String) execute command - | command.function == cCreateQuestionnairesName = cCreateQuestionnaires command + | command.function == cCreateProjectsName = cCreateProjects command | otherwise = throwError . GeneralServerError $ "Unknown command function: " <> command.function -cCreateQuestionnairesName = "createQuestionnaires" +cCreateProjectsName = "createProjects" -cCreateQuestionnaires :: PersistentCommand U.UUID -> AppContextM (PersistentCommandState, Maybe String) -cCreateQuestionnaires persistentCommand = do - let eCommands = eitherDecode (BSL.pack persistentCommand.body) :: Either String [CreateQuestionnaireCommand] +cCreateProjects :: PersistentCommand U.UUID -> AppContextM (PersistentCommandState, Maybe String) +cCreateProjects persistentCommand = do + let eCommands = eitherDecode (BSL.pack persistentCommand.body) :: Either String [CreateProjectCommand] case eCommands of Right commands -> do - createQuestionnairesFromCommands commands + createProjectsFromCommands commands return (DonePersistentCommandState, Nothing) Left error -> return (ErrorPersistentCommandState, Just $ f' "Problem in deserialization of JSON: %s" [error]) diff --git a/wizard-server/src/Wizard/Service/Project/ProjectMapper.hs b/wizard-server/src/Wizard/Service/Project/ProjectMapper.hs new file mode 100644 index 000000000..45a518817 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/ProjectMapper.hs @@ -0,0 +1,371 @@ +module Wizard.Service.Project.ProjectMapper where + +import qualified Data.Map.Strict as M +import Data.Time +import qualified Data.UUID as U + +import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateDTO +import Shared.DocumentTemplate.Constant.DocumentTemplate +import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate +import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateFormatSimple +import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel +import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage +import qualified Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageMapper as SPM +import Wizard.Api.Resource.Project.Acl.ProjectPermChangeDTO +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailWsDTO +import Wizard.Api.Resource.Project.ProjectContentChangeDTO +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Api.Resource.Project.ProjectCreateDTO +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateDTO +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectReportDTO +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO +import Wizard.Api.Resource.Project.ProjectShareChangeDTO +import Wizard.Api.Resource.User.UserDTO +import Wizard.Constant.Acl +import Wizard.Model.DocumentTemplate.DocumentTemplateState +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Comment.ProjectCommentList +import Wizard.Model.Project.Detail.ProjectDetail +import Wizard.Model.Project.Detail.ProjectDetailQuestionnaire +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.ProjectList +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.ProjectSimple +import Wizard.Model.Project.ProjectState +import Wizard.Model.Project.ProjectSuggestion +import Wizard.Model.Project.Version.ProjectVersionList +import Wizard.Model.Report.Report +import Wizard.Model.Tenant.Config.TenantConfig +import Wizard.Model.User.User +import Wizard.Service.Acl.AclMapper +import Wizard.Service.Project.Event.ProjectEventMapper +import WizardLib.Public.Model.PersistentCommand.Project.CreateProjectCommand +import WizardLib.Public.Model.User.UserGroup + +toDTO :: Project -> KnowledgeModelPackage -> ProjectState -> [ProjectPermDTO] -> ProjectDTO +toDTO project kmPackage state permissions = + ProjectDTO + { uuid = project.uuid + , name = project.name + , description = project.description + , visibility = project.visibility + , sharing = project.sharing + , state = state + , knowledgeModelPackage = SPM.toSimple kmPackage + , permissions = permissions + , isTemplate = project.isTemplate + , createdAt = project.createdAt + , updatedAt = project.updatedAt + } + +toDTO' :: ProjectList -> ProjectDTO +toDTO' project = + ProjectDTO + { uuid = project.uuid + , name = project.name + , description = project.description + , visibility = project.visibility + , sharing = project.sharing + , state = project.state + , knowledgeModelPackage = project.knowledgeModelPackage + , permissions = project.permissions + , isTemplate = project.isTemplate + , createdAt = project.createdAt + , updatedAt = project.updatedAt + } + +toSimpleDTO :: Project -> KnowledgeModelPackage -> ProjectState -> [ProjectPermDTO] -> ProjectDTO +toSimpleDTO project kmPackage state permissions = + ProjectDTO + { uuid = project.uuid + , name = project.name + , description = project.description + , visibility = project.visibility + , sharing = project.sharing + , state = state + , knowledgeModelPackage = SPM.toSimple kmPackage + , permissions = permissions + , isTemplate = project.isTemplate + , createdAt = project.createdAt + , updatedAt = project.updatedAt + } + +toDetailQuestionnaire :: Project -> Maybe U.UUID -> [ProjectPermDTO] -> Int -> Int -> ProjectDetailQuestionnaire +toDetailQuestionnaire project migrationUuid permissions projectActionsAvailable projectImportersAvailable = + ProjectDetailQuestionnaire + { uuid = project.uuid + , name = project.name + , visibility = project.visibility + , sharing = project.sharing + , knowledgeModelPackageId = project.knowledgeModelPackageId + , selectedQuestionTagUuids = project.selectedQuestionTagUuids + , isTemplate = project.isTemplate + , migrationUuid = migrationUuid + , permissions = permissions + , files = [] + , projectActionsAvailable = projectActionsAvailable + , projectImportersAvailable = projectImportersAvailable + } + +toDetailDTO :: ProjectDetail -> ProjectDetailDTO +toDetailDTO ProjectDetail {..} = + ProjectDetailDTO {..} + +toDetailProjectDTO :: ProjectDetailQuestionnaire -> M.Map String (M.Map U.UUID Int) -> M.Map String (M.Map U.UUID Int) -> KnowledgeModel -> Maybe U.UUID -> M.Map String Reply -> M.Map String [U.UUID] -> ProjectDetailQuestionnaireDTO +toDetailProjectDTO ProjectDetailQuestionnaire {..} unresolvedCommentCounts resolvedCommentCounts knowledgeModel phaseUuid replies labels = + let fileCount = length files + in ProjectDetailQuestionnaireDTO {..} + +toDetailWsDTO :: Project -> Maybe DocumentTemplateDTO -> Maybe DocumentTemplateFormatSimple -> [ProjectPermDTO] -> M.Map String [U.UUID] -> M.Map String (M.Map U.UUID Int) -> M.Map String (M.Map U.UUID Int) -> ProjectDetailWsDTO +toDetailWsDTO project mTemplate mFormat projectPerms labels unresolvedCommentCounts resolvedCommentCounts = + ProjectDetailWsDTO + { name = project.name + , description = project.description + , visibility = project.visibility + , sharing = project.sharing + , projectTags = project.projectTags + , documentTemplateId = project.documentTemplateId + , documentTemplate = mTemplate + , formatUuid = project.formatUuid + , format = mFormat + , permissions = projectPerms + , isTemplate = project.isTemplate + , labels = labels + , unresolvedCommentCounts = unresolvedCommentCounts + , resolvedCommentCounts = resolvedCommentCounts + } + +toContentDTO + :: ProjectContent + -> M.Map String [ProjectCommentThreadList] + -> [ProjectEventList] + -> [ProjectVersionList] + -> ProjectContentDTO +toContentDTO projectContent threads events versions = + ProjectContentDTO + { phaseUuid = projectContent.phaseUuid + , replies = projectContent.replies + , commentThreadsMap = threads + , labels = projectContent.labels + , events = events + , versions = versions + } + +toProjectReportDTO :: [Indication] -> ProjectReportDTO +toProjectReportDTO indications = ProjectReportDTO {indications = indications} + +toChangeDTO :: Project -> ProjectShareChangeDTO +toChangeDTO project = + ProjectShareChangeDTO + { visibility = project.visibility + , sharing = project.sharing + , permissions = fmap toProjectPermChangeDTO project.permissions + } + +toUserProjectPerm :: U.UUID -> U.UUID -> [String] -> U.UUID -> ProjectPerm +toUserProjectPerm projectUuid userUuid perms tenantUuid = + ProjectPerm + { projectUuid = projectUuid + , memberType = UserProjectPermType + , memberUuid = userUuid + , perms = perms + , tenantUuid = tenantUuid + } + +toUserGroupProjectPerm :: U.UUID -> U.UUID -> [String] -> U.UUID -> ProjectPerm +toUserGroupProjectPerm projectUuid userGroupUuid perms tenantUuid = + ProjectPerm + { projectUuid = projectUuid + , memberType = UserGroupProjectPermType + , memberUuid = userGroupUuid + , perms = perms + , tenantUuid = tenantUuid + } + +toUserProjectPermDTO :: ProjectPerm -> User -> ProjectPermDTO +toUserProjectPermDTO projectPerm user = + ProjectPermDTO + { projectUuid = projectPerm.projectUuid + , member = toUserMemberDTO user + , perms = projectPerm.perms + } + +toUserGroupProjectPermDTO :: ProjectPerm -> UserGroup -> ProjectPermDTO +toUserGroupProjectPermDTO projectPerm userGroup = + ProjectPermDTO + { projectUuid = projectPerm.projectUuid + , member = toUserGroupMemberDTO userGroup + , perms = projectPerm.perms + } + +toProjectPermChangeDTO :: ProjectPerm -> ProjectPermChangeDTO +toProjectPermChangeDTO projectPerm = + ProjectPermChangeDTO + { memberUuid = projectPerm.memberUuid + , memberType = projectPerm.memberType + , perms = projectPerm.perms + } + +toSimple :: Project -> ProjectSimple +toSimple project = ProjectSimple {uuid = project.uuid, name = project.name} + +toSuggestion :: Project -> ProjectSuggestion +toSuggestion project = ProjectSuggestion {uuid = project.uuid, name = project.name, description = project.description} + +toCreateFromTemplateDTO :: Project -> ProjectCreateFromTemplateDTO +toCreateFromTemplateDTO project = + ProjectCreateFromTemplateDTO + { name = project.name + , projectUuid = project.uuid + } + +toProjectDetailTemplateState :: Maybe DocumentTemplate -> Maybe DocumentTemplateState +toProjectDetailTemplateState = + fmap + ( \tml -> + if tml.metamodelVersion /= documentTemplateMetamodelVersion + then UnsupportedMetamodelVersionDocumentTemplateState + else DefaultDocumentTemplateState + ) + +fromShareChangeDTO :: Project -> ProjectShareChangeDTO -> ProjectVisibility -> ProjectSharing -> UTCTime -> Project +fromShareChangeDTO project dto visibility sharing now = + Project + { uuid = project.uuid + , name = project.name + , description = project.description + , visibility = visibility + , sharing = sharing + , knowledgeModelPackageId = project.knowledgeModelPackageId + , selectedQuestionTagUuids = project.selectedQuestionTagUuids + , projectTags = project.projectTags + , documentTemplateId = project.documentTemplateId + , formatUuid = project.formatUuid + , creatorUuid = project.creatorUuid + , permissions = fmap (fromProjectPermChangeDTO project.uuid project.tenantUuid) dto.permissions + , isTemplate = project.isTemplate + , squashed = project.squashed + , tenantUuid = project.tenantUuid + , createdAt = project.createdAt + , updatedAt = now + } + +fromSettingsChangeDTO :: Project -> ProjectSettingsChangeDTO -> UserDTO -> UTCTime -> Project +fromSettingsChangeDTO project dto currentUser now = + Project + { uuid = project.uuid + , name = dto.name + , description = dto.description + , visibility = project.visibility + , sharing = project.sharing + , knowledgeModelPackageId = project.knowledgeModelPackageId + , selectedQuestionTagUuids = project.selectedQuestionTagUuids + , projectTags = dto.projectTags + , documentTemplateId = dto.documentTemplateId + , formatUuid = dto.formatUuid + , creatorUuid = project.creatorUuid + , permissions = project.permissions + , isTemplate = + if _PRJ_TML_PERM `elem` currentUser.permissions + then dto.isTemplate + else project.isTemplate + , squashed = project.squashed + , tenantUuid = project.tenantUuid + , createdAt = project.createdAt + , updatedAt = now + } + +fromProjectCreateDTO + :: ProjectCreateDTO + -> U.UUID + -> ProjectVisibility + -> ProjectSharing + -> Maybe U.UUID + -> String + -> U.UUID + -> Maybe U.UUID + -> U.UUID + -> UTCTime + -> (Project, [ProjectEvent]) +fromProjectCreateDTO dto projectUuid visibility sharing mCurrentUserUuid pkgId phaseEventUuid mPhase tenantUuid now = + ( Project + { uuid = projectUuid + , name = dto.name + , description = Nothing + , visibility = visibility + , sharing = sharing + , knowledgeModelPackageId = pkgId + , selectedQuestionTagUuids = dto.questionTagUuids + , projectTags = [] + , documentTemplateId = dto.documentTemplateId + , formatUuid = dto.formatUuid + , creatorUuid = mCurrentUserUuid + , permissions = + case mCurrentUserUuid of + Just currentUserUuid -> [toUserProjectPerm projectUuid currentUserUuid ownerPermissions tenantUuid] + Nothing -> [] + , isTemplate = False + , squashed = True + , tenantUuid = tenantUuid + , createdAt = now + , updatedAt = now + } + , case mPhase of + Just phase -> + [ SetPhaseEvent' $ + SetPhaseEvent + { uuid = phaseEventUuid + , phaseUuid = Just phase + , projectUuid = projectUuid + , tenantUuid = tenantUuid + , createdBy = mCurrentUserUuid + , createdAt = now + } + ] + Nothing -> [] + ) + +fromContentChangeDTO :: Project -> [ProjectEvent] -> ProjectContentChangeDTO -> Maybe UserDTO -> UTCTime -> (Project, [ProjectEvent]) +fromContentChangeDTO project events dto mCurrentUser now = + let newTodoEvents = fmap (\e -> fromEventChangeDTO e project.uuid project.tenantUuid (fmap (.uuid) mCurrentUser) now) dto.events + updatedEvents = events ++ newTodoEvents + in (project {updatedAt = now}, updatedEvents) + +fromProjectPermChangeDTO :: U.UUID -> U.UUID -> ProjectPermChangeDTO -> ProjectPerm +fromProjectPermChangeDTO projectUuid tenantUuid dto = + ProjectPerm + { projectUuid = projectUuid + , memberType = dto.memberType + , memberUuid = dto.memberUuid + , perms = dto.perms + , tenantUuid = tenantUuid + } + +fromCreateProjectCommand :: CreateProjectCommand -> U.UUID -> [ProjectPerm] -> TenantConfigProject -> U.UUID -> UTCTime -> Project +fromCreateProjectCommand command uuid permissions tcProject createdBy now = do + Project + { uuid = uuid + , name = command.name + , description = Nothing + , visibility = tcProject.projectVisibility.defaultValue + , sharing = tcProject.projectSharing.defaultValue + , knowledgeModelPackageId = command.knowledgeModelPackageId + , selectedQuestionTagUuids = [] + , projectTags = [] + , documentTemplateId = command.documentTemplateId + , formatUuid = Nothing + , creatorUuid = Just createdBy + , permissions = permissions + , isTemplate = False + , squashed = True + , tenantUuid = tcProject.tenantUuid + , createdAt = now + , updatedAt = now + } diff --git a/wizard-server/src/Wizard/Service/Project/ProjectService.hs b/wizard-server/src/Wizard/Service/Project/ProjectService.hs new file mode 100644 index 000000000..01209e401 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/ProjectService.hs @@ -0,0 +1,454 @@ +module Wizard.Service.Project.ProjectService where + +import Control.Monad (void, when) +import Control.Monad.Except (catchError, throwError) +import Control.Monad.Reader (asks, liftIO) +import Data.Foldable (traverse_) +import qualified Data.List as L +import qualified Data.Map.Strict as M +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Localization.Messages.Public +import Shared.Common.Model.Common.Lens +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Shared.Common.Model.Error.Error +import Shared.Common.Util.List +import Shared.Common.Util.Logger +import Shared.Common.Util.Uuid +import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO +import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateFormatDAO +import qualified Shared.DocumentTemplate.Service.DocumentTemplate.DocumentTemplateMapper as STM +import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO +import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel +import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage +import Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageUtil +import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Event.ProjectEventDTO +import Wizard.Api.Resource.Project.ProjectContentChangeDTO +import Wizard.Api.Resource.Project.ProjectCreateDTO +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateDTO +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO +import Wizard.Api.Resource.Project.ProjectShareChangeDTO +import Wizard.Api.Resource.User.UserDTO +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Document.DocumentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.User.UserDAO +import Wizard.Localization.Messages.Internal +import Wizard.Model.Context.AclContext +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.AppContextHelpers +import Wizard.Model.Project.Acl.ProjectAclHelpers +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Detail.ProjectDetail +import Wizard.Model.Project.Detail.ProjectDetailPreview +import Wizard.Model.Project.Detail.ProjectDetailQuestionnaire +import Wizard.Model.Project.Detail.ProjectDetailSettings +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.File.ProjectFile +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Tenant.Config.TenantConfig +import Wizard.Service.KnowledgeModel.KnowledgeModelService +import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService +import Wizard.Service.Mail.Mailer +import Wizard.Service.Project.Collaboration.ProjectCollaborationService +import Wizard.Service.Project.Comment.ProjectCommentService +import Wizard.Service.Project.Compiler.ProjectCompilerService +import Wizard.Service.Project.Event.ProjectEventMapper +import Wizard.Service.Project.File.ProjectFileService +import Wizard.Service.Project.ProjectAcl +import Wizard.Service.Project.ProjectAudit +import Wizard.Service.Project.ProjectMapper +import Wizard.Service.Project.ProjectUtil +import Wizard.Service.Project.ProjectValidation +import Wizard.Service.Project.Version.ProjectVersionService +import Wizard.Service.Tenant.Config.ConfigService +import Wizard.Service.Tenant.Limit.LimitService +import WizardLib.Public.Model.PersistentCommand.Project.CreateProjectCommand + +getProjectsForCurrentUserPageDto + :: Maybe String + -> Maybe Bool + -> Maybe Bool + -> Maybe [String] + -> Maybe String + -> Maybe [String] + -> Maybe String + -> Maybe [String] + -> Maybe String + -> Pageable + -> [Sort] + -> AppContextM (Page ProjectDTO) +getProjectsForCurrentUserPageDto mQuery mIsTemplate mIsMigrating mProjectTags mProjectTagsOp mUserUuids mUserUuidsOp mKnowledgeModelPackageIds mKnowledgeModelPackageIdsOp pageable sort = do + checkPermission _PRJ_PERM + currentUser <- getCurrentUser + projectPage <- + findProjectsForCurrentUserPage + mQuery + mIsTemplate + mIsMigrating + mProjectTags + mProjectTagsOp + mUserUuids + mUserUuidsOp + mKnowledgeModelPackageIds + mKnowledgeModelPackageIdsOp + pageable + sort + return . fmap toDTO' $ projectPage + +createProject :: ProjectCreateDTO -> AppContextM ProjectDTO +createProject reqDto = + liftIO generateUuid >>= createProjectWithGivenUuid reqDto + +createProjectWithGivenUuid :: ProjectCreateDTO -> U.UUID -> AppContextM ProjectDTO +createProjectWithGivenUuid reqDto projectUuid = + runInTransaction $ do + checkProjectLimit + checkCreatePermissionToProject + pkgId <- resolvePackageId reqDto.knowledgeModelPackageId + pkg <- findPackageById pkgId + projectState <- getProjectState projectUuid pkgId + now <- liftIO getCurrentTime + tenantUuid <- asks currentTenantUuid + visibility <- extractVisibility reqDto + sharing <- extractSharing reqDto + mCurrentUser <- asks currentUser + knowledgeModel <- compileKnowledgeModel [] (Just pkgId) reqDto.questionTagUuids + phaseEventUuid <- liftIO generateUuid + let (project, projectEvents) = + fromProjectCreateDTO + reqDto + projectUuid + visibility + sharing + (fmap (.uuid) mCurrentUser) + pkgId + phaseEventUuid + (headSafe knowledgeModel.phaseUuids) + tenantUuid + now + insertProject project + insertProjectEvents projectEvents + permissionDtos <- traverse enhanceProjectPerm project.permissions + return $ toSimpleDTO project pkg projectState permissionDtos + +createProjectFromTemplate :: ProjectCreateFromTemplateDTO -> AppContextM ProjectDTO +createProjectFromTemplate reqDto = + runInTransaction $ do + checkProjectLimit + originProject <- findProjectByUuid reqDto.projectUuid + checkCreateFromTemplatePermissionToProject originProject.isTemplate + pkg <- findPackageById originProject.knowledgeModelPackageId + newProjectUuid <- liftIO generateUuid + currentUser <- getCurrentUser + now <- liftIO getCurrentTime + tcProject <- getCurrentTenantConfigProject + originProjectEvents <- findProjectEventListsByProjectUuid reqDto.projectUuid + let newVisibility = tcProject.projectVisibility.defaultValue + let newSharing = tcProject.projectSharing.defaultValue + let newPermissions = [toUserProjectPerm newProjectUuid currentUser.uuid ownerPermissions tcProject.tenantUuid] + let newProject = + originProject + { uuid = newProjectUuid + , name = reqDto.name + , description = Nothing + , sharing = newSharing + , visibility = newVisibility + , permissions = newPermissions + , isTemplate = False + , creatorUuid = Just $ currentUser.uuid + , createdAt = now + , updatedAt = now + } + :: Project + insertProject newProject + clonedFiles <- cloneProjectFiles originProject.uuid newProject.uuid + newProjectEventsWithOldEventUuid <- cloneProjectEventsWithOldEventUuid originProjectEvents + let newProjectEvents = fmap snd newProjectEventsWithOldEventUuid + let newProjectEventsWithReplacedFiles = replaceProjectEventsWithNewFiles clonedFiles newProjectEvents + insertProjectEvents (fmap (toEvent newProjectUuid newProject.tenantUuid) newProjectEventsWithReplacedFiles) + duplicateCommentThreads reqDto.projectUuid newProjectUuid + cloneProjectVersions originProject.uuid newProject.uuid newProjectEventsWithOldEventUuid + state <- getProjectState newProjectUuid pkg.pId + permissionDtos <- traverse enhanceProjectPerm newProject.permissions + return $ toSimpleDTO newProject pkg state permissionDtos + +cloneProject :: U.UUID -> AppContextM ProjectDTO +cloneProject cloneUuid = + runInTransaction $ do + checkProjectLimit + originProject <- findProjectByUuid cloneUuid + checkClonePermissionToProject originProject.visibility originProject.sharing originProject.permissions + pkg <- findPackageById originProject.knowledgeModelPackageId + newProjectUuid <- liftIO generateUuid + currentUser <- getCurrentUser + now <- liftIO getCurrentTime + originProjectEvents <- findProjectEventListsByProjectUuid originProject.uuid + let ownerPerm = toUserProjectPerm newProjectUuid currentUser.uuid ownerPermissions originProject.tenantUuid + let newPermissions = ownerPerm : removeUserPermission currentUser.uuid originProject.permissions + let newDuplicatedPermissions = fmap (\permission -> permission {projectUuid = newProjectUuid} :: ProjectPerm) newPermissions + let newProject = + originProject + { uuid = newProjectUuid + , name = "Copy of " ++ originProject.name + , permissions = newDuplicatedPermissions + , updatedAt = now + } + :: Project + insertProject newProject + clonedFiles <- cloneProjectFiles originProject.uuid newProject.uuid + newProjectEventsWithOldEventUuid <- cloneProjectEventsWithOldEventUuid originProjectEvents + let newProjectEvents = fmap snd newProjectEventsWithOldEventUuid + let newProjectEventsWithReplacedFiles = replaceProjectEventsWithNewFiles clonedFiles newProjectEvents + insertProjectEvents (fmap (toEvent newProjectUuid newProject.tenantUuid) newProjectEventsWithReplacedFiles) + cloneProjectVersions originProject.uuid newProject.uuid newProjectEventsWithOldEventUuid + duplicateCommentThreads cloneUuid newProjectUuid + state <- getProjectState newProjectUuid pkg.pId + permissionDtos <- traverse enhanceProjectPerm newProject.permissions + return $ toSimpleDTO newProject pkg state permissionDtos + +createProjectsFromCommands :: [CreateProjectCommand] -> AppContextM () +createProjectsFromCommands = runInTransaction . traverse_ create + where + create :: CreateProjectCommand -> AppContextM () + create command = do + uuid <- liftIO generateUuid + currentUser <- getCurrentUser + now <- liftIO getCurrentTime + tcProject <- getCurrentTenantConfigProject + users <- findUsersByEmails command.emails + let permissions = fmap (createPermission uuid) users + let project = fromCreateProjectCommand command uuid permissions tcProject currentUser.uuid now + insertProject project + return () + createPermission :: U.UUID -> User -> ProjectPerm + createPermission projectUuid user = toUserProjectPerm projectUuid user.uuid ownerPermissions user.tenantUuid + +getProjectById :: U.UUID -> AppContextM ProjectDTO +getProjectById projectUuid = do + mProject <- getProjectById' projectUuid + case mProject of + Just project -> return project + Nothing -> throwError $ NotExistsError $ _ERROR_DATABASE__ENTITY_NOT_FOUND "project" [("uuid", U.toString projectUuid)] + +getProjectById' :: U.UUID -> AppContextM (Maybe ProjectDTO) +getProjectById' projectUuid = do + mProject <- findProjectByUuid' projectUuid + case mProject of + Just project -> do + checkViewPermissionToProject project.visibility project.sharing project.permissions + package <- getPackageById project.knowledgeModelPackageId + state <- getProjectState projectUuid package.pId + permissionDtos <- traverse enhanceProjectPerm project.permissions + return . Just $ toDTO project package state permissionDtos + Nothing -> return Nothing + +getProjectDetailByUuid :: U.UUID -> AppContextM ProjectDetailDTO +getProjectDetailByUuid projectUuid = do + project <- findProjectDetail projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + return $ toDetailDTO project + +getProjectDetailQuestionnaireByUuid :: U.UUID -> AppContextM ProjectDetailQuestionnaireDTO +getProjectDetailQuestionnaireByUuid projectUuid = do + project <- findProjectDetailQuestionnaire projectUuid + projectEvents <- findProjectEventListsByProjectUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + editor <- catchError (hasEditPermissionToProject project.visibility project.sharing project.permissions) (\_ -> return False) + commenter <- catchError (hasCommentPermissionToProject project.visibility project.sharing project.permissions) (\_ -> return False) + unresolvedCommentCounts <- + if commenter + then findProjectCommentThreadsSimple projectUuid False editor + else return M.empty + resolvedCommentCounts <- + if commenter + then findProjectCommentThreadsSimple projectUuid True editor + else return M.empty + knowledgeModel <- compileKnowledgeModel [] (Just project.knowledgeModelPackageId) project.selectedQuestionTagUuids + let projectContent = compileProjectEvents projectEvents + let labels = + if editor + then projectContent.labels + else M.empty + return $ toDetailProjectDTO project unresolvedCommentCounts resolvedCommentCounts knowledgeModel projectContent.phaseUuid projectContent.replies labels + +getProjectDetailPreviewById :: U.UUID -> AppContextM ProjectDetailPreview +getProjectDetailPreviewById projectUuid = do + project <- findProjectDetailPreview projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + return project + +getProjectDetailSettingsById :: U.UUID -> AppContextM ProjectDetailSettings +getProjectDetailSettingsById projectUuid = do + project <- findProjectDetailSettings projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + knowledgeModel <- compileKnowledgeModel [] (Just project.knowledgeModelPackage.pId) project.selectedQuestionTagUuids + return $ project {knowledgeModelTags = M.elems knowledgeModel.entities.tags} + +getProjectEventsPage :: U.UUID -> Pageable -> [Sort] -> AppContextM (Page ProjectEventList) +getProjectEventsPage projectUuid pageable sort = do + project <- findProjectByUuid projectUuid + events <- findProjectEventsPage projectUuid pageable sort + checkViewPermissionToProject project.visibility project.sharing project.permissions + auditProjectListEvents projectUuid + return events + +getProjectEventForProjectUuid :: U.UUID -> U.UUID -> AppContextM ProjectEventDTO +getProjectEventForProjectUuid projectUuid eventUuid = do + project <- findProjectByUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + auditProjectDetailEvent projectUuid + event <- findProjectEventByUuid eventUuid + mUser <- + case getCreatedBy event of + Just userUuid -> findUserByUuid' userUuid + Nothing -> return Nothing + return $ toEventDTO event mUser + +modifyProjectShare :: U.UUID -> ProjectShareChangeDTO -> AppContextM ProjectShareChangeDTO +modifyProjectShare projectUuid reqDto = + runInTransaction $ do + checkPermission _PRJ_PERM + project <- findProjectByUuid projectUuid + skipIfAssigningProject project (checkOwnerPermissionToProject project.visibility project.permissions) + now <- liftIO getCurrentTime + qVisibility <- extractVisibility reqDto + qSharing <- extractSharing reqDto + let updatedProject = fromShareChangeDTO project reqDto qVisibility qSharing now + updateProjectByUuid updatedProject + updatePermsForOnlineUsers projectUuid updatedProject.visibility updatedProject.sharing updatedProject.permissions + permissionDtos <- traverse enhanceProjectPerm updatedProject.permissions + skipIfAssigningProject + project + ( catchError + (sendProjectInvitationMail project updatedProject) + (\errMessage -> throwError $ GeneralServerError _ERROR_SERVICE_PROJECT__INVITATION_EMAIL_NOT_SENT) + ) + mTemplate <- + case updatedProject.documentTemplateId of + Just tId -> do + tml <- findDocumentTemplateById tId + formats <- findDocumentTemplateFormats tId + return . Just $ STM.toDTO tml formats + _ -> return Nothing + mFormat <- + case (updatedProject.documentTemplateId, updatedProject.formatUuid) of + (Just dtId, Just formatUuid) -> do + format <- findDocumentTemplateFormatByDocumentTemplateIdAndUuid dtId formatUuid + return $ Just format + _ -> return Nothing + projectEvents <- findProjectEventListsByProjectUuid projectUuid + let projectContent = compileProjectEvents projectEvents + unresolvedCommentCounts <- findProjectCommentThreadsSimple projectUuid False True + resolvedCommentCounts <- findProjectCommentThreadsSimple projectUuid True True + let restWsDto = toDetailWsDTO updatedProject mTemplate mFormat permissionDtos projectContent.labels unresolvedCommentCounts resolvedCommentCounts + setProject projectUuid restWsDto + return reqDto + +modifyProjectSettings :: U.UUID -> ProjectSettingsChangeDTO -> AppContextM ProjectSettingsChangeDTO +modifyProjectSettings projectUuid reqDto = + runInTransaction $ do + checkPermission _PRJ_PERM + validateProjectSettingsChangeDTO reqDto + project <- findProjectByUuid projectUuid + skipIfAssigningProject project (checkOwnerPermissionToProject project.visibility project.permissions) + currentUser <- getCurrentUser + now <- liftIO getCurrentTime + let updatedProject = fromSettingsChangeDTO project reqDto currentUser now + updateProjectByUuid updatedProject + permissionDtos <- traverse enhanceProjectPerm updatedProject.permissions + deleteTemporalDocumentsByProjectUuid project.uuid + mTemplate <- + case updatedProject.documentTemplateId of + Just tId -> do + tml <- findDocumentTemplateById tId + formats <- findDocumentTemplateFormats tId + return . Just $ STM.toDTO tml formats + _ -> return Nothing + mFormat <- + case (updatedProject.documentTemplateId, updatedProject.formatUuid) of + (Just dtId, Just formatUuid) -> do + format <- findDocumentTemplateFormatByDocumentTemplateIdAndUuid dtId formatUuid + return $ Just format + _ -> return Nothing + projectEvents <- findProjectEventListsByProjectUuid projectUuid + let projectContent = compileProjectEvents projectEvents + unresolvedCommentCounts <- findProjectCommentThreadsSimple projectUuid False True + resolvedCommentCounts <- findProjectCommentThreadsSimple projectUuid True True + let restWsDto = toDetailWsDTO updatedProject mTemplate mFormat permissionDtos projectContent.labels unresolvedCommentCounts resolvedCommentCounts + setProject projectUuid restWsDto + return reqDto + +deleteProject :: U.UUID -> Bool -> AppContextM () +deleteProject projectUuid shouldValidatePermission = + runInTransaction $ do + project <- findProjectByUuid projectUuid + validateProjectDeletion projectUuid + when shouldValidatePermission (checkOwnerPermissionToProject project.visibility project.permissions) + deleteProjectByUuid projectUuid + void $ logOutOnlineUsersWhenProjectDramaticallyChanged projectUuid + +modifyContent :: U.UUID -> ProjectContentChangeDTO -> AppContextM ProjectContentChangeDTO +modifyContent projectUuid reqDto = + runInTransaction $ do + project <- findProjectByUuid projectUuid + checkEditPermissionToProject project.visibility project.sharing project.permissions + mCurrentUser <- asks currentUser + now <- liftIO getCurrentTime + projectEvents <- findProjectEventsByProjectUuid projectUuid + let (updatedProject, updatedProjectEvents) = fromContentChangeDTO project projectEvents reqDto mCurrentUser now + syncProjectEventsWithDb projectEvents updatedProjectEvents + updateProjectSquashedAndUpdatedAtByUuid projectUuid False now + return reqDto + +cleanProjects :: AppContextM () +cleanProjects = + runInTransaction $ do + projects <- findProjectsWithZeroAcl + traverse_ + ( \project -> do + logInfoI _CMP_SERVICE (f' "Clean project with empty ACL (projectUuid: '%s')" [U.toString project.uuid]) + deleteProject project.uuid False + ) + projects + +cloneProjectEvents :: [ProjectEventList] -> AppContextM [ProjectEventList] +cloneProjectEvents oldEvents = do + newEvents <- cloneProjectEventsWithOldEventUuid oldEvents + return $ fmap snd newEvents + +cloneProjectEventsWithOldEventUuid :: [ProjectEventList] -> AppContextM [(U.UUID, ProjectEventList)] +cloneProjectEventsWithOldEventUuid = + traverse + ( \event -> do + newEventUuid <- liftIO generateUuid + return (getUuid event, setUuid event newEventUuid) + ) + +replaceProjectEventsWithNewFiles :: [(ProjectFile, ProjectFile)] -> [ProjectEventList] -> [ProjectEventList] +replaceProjectEventsWithNewFiles clonedFiles projectEvents = + let findFile :: U.UUID -> Maybe (ProjectFile, ProjectFile) + findFile fileUuid = L.find (\(oldFile, newFile) -> oldFile.uuid == fileUuid) clonedFiles + replaceEvent :: ProjectEventList -> ProjectEventList + replaceEvent (SetReplyEventList' event) = + let value' = + case event.value of + r@FileReply {..} -> + case findFile r.fValue of + Just (oldFile, newFile) -> r {fValue = newFile.uuid} + _ -> r + r -> r + in SetReplyEventList' (event {value = value'}) + replaceEvent event' = event' + in fmap replaceEvent projectEvents diff --git a/wizard-server/src/Wizard/Service/Project/ProjectUtil.hs b/wizard-server/src/Wizard/Service/Project/ProjectUtil.hs new file mode 100644 index 000000000..4dc1941be --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/ProjectUtil.hs @@ -0,0 +1,60 @@ +module Wizard.Service.Project.ProjectUtil where + +import Control.Monad (when) +import qualified Data.UUID as U + +import Wizard.Api.Resource.Project.Acl.ProjectPermDTO +import Wizard.Database.DAO.Project.ProjectMigrationDAO +import Wizard.Database.DAO.User.UserDAO +import Wizard.Model.Context.AppContext +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Event.ProjectEventLenses () +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectState +import Wizard.Model.Tenant.Config.TenantConfig +import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService +import Wizard.Service.Project.ProjectMapper +import Wizard.Service.Tenant.Config.ConfigService +import WizardLib.Public.Database.DAO.User.UserGroupDAO + +extractVisibility dto = do + tcProject <- getCurrentTenantConfigProject + if tcProject.projectVisibility.enabled + then return dto.visibility + else return $ tcProject.projectVisibility.defaultValue + +extractSharing dto = do + tcProject <- getCurrentTenantConfigProject + if tcProject.projectSharing.enabled + then return dto.sharing + else return $ tcProject.projectSharing.defaultValue + +enhanceProjectPerm :: ProjectPerm -> AppContextM ProjectPermDTO +enhanceProjectPerm projectPerm = + case projectPerm.memberType of + UserProjectPermType -> do + user <- findUserByUuid projectPerm.memberUuid + return $ toUserProjectPermDTO projectPerm user + UserGroupProjectPermType -> do + userGroup <- findUserGroupByUuid projectPerm.memberUuid + return $ toUserGroupProjectPermDTO projectPerm userGroup + +getProjectState :: U.UUID -> String -> AppContextM ProjectState +getProjectState projectUuid pkgId = do + mMs <- findProjectMigrationByNewProjectUuid' projectUuid + case mMs of + Just _ -> return MigratingProjectState + Nothing -> do + pkgs <- getNewerPackages pkgId True + if null pkgs + then return DefaultProjectState + else return OutdatedProjectState + +skipIfAssigningProject :: Project -> AppContextM () -> AppContextM () +skipIfAssigningProject project action = do + tcProject <- getCurrentTenantConfigProject + let projectSharingEnabled = tcProject.projectSharing.enabled + let projectSharingAnonymousEnabled = tcProject.projectSharing.anonymousEnabled + when + (not (projectSharingEnabled && projectSharingAnonymousEnabled) || (not . null $ project.permissions)) + action diff --git a/wizard-server/src/Wizard/Service/Project/ProjectValidation.hs b/wizard-server/src/Wizard/Service/Project/ProjectValidation.hs new file mode 100644 index 000000000..a68564851 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/ProjectValidation.hs @@ -0,0 +1,39 @@ +module Wizard.Service.Project.ProjectValidation where + +import Control.Monad.Except (throwError) +import Data.Foldable (forM_, traverse_) +import qualified Data.Map.Strict as M +import qualified Data.UUID as U +import Text.Regex.TDFA + +import Shared.Common.Localization.Messages.Public +import Shared.Common.Model.Error.Error +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO +import Wizard.Database.DAO.Project.ProjectMigrationDAO +import Wizard.Localization.Messages.Public +import Wizard.Model.Context.AppContext + +validateProjectSettingsChangeDTO :: ProjectSettingsChangeDTO -> AppContextM () +validateProjectSettingsChangeDTO reqDto = validateProjectTags reqDto.projectTags + +validateProjectDeletion :: U.UUID -> AppContextM () +validateProjectDeletion = validateUsageByProjectMigration + +validateUsageByProjectMigration :: U.UUID -> AppContextM () +validateUsageByProjectMigration projectUuid = do + result <- findProjectMigrationsByOldProjectUuid projectUuid + case result of + [] -> return () + _ -> throwError . UserError $ _ERROR_SERVICE_PROJECT__PROJECT_CANT_BE_DELETED_BECAUSE_IT_IS_USED_IN_MIGRATION + +validateProjectTags :: [String] -> AppContextM () +validateProjectTags = traverse_ validateProjectTag + +validateProjectTag :: String -> AppContextM () +validateProjectTag tag = forM_ (isValidProjectTag tag) throwError + +isValidProjectTag :: String -> Maybe AppError +isValidProjectTag tag = + if tag =~ "^[^,]+$" + then Nothing + else Just $ ValidationError [] (M.singleton "tags" [_ERROR_VALIDATION__FORBIDDEN_CHARACTERS tag]) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/ProjectTag/ProjectTagService.hs b/wizard-server/src/Wizard/Service/Project/Tag/ProjectTagService.hs similarity index 61% rename from wizard-server/src/Wizard/Service/Questionnaire/ProjectTag/ProjectTagService.hs rename to wizard-server/src/Wizard/Service/Project/Tag/ProjectTagService.hs index 1012a18fb..481f0ec3f 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/ProjectTag/ProjectTagService.hs +++ b/wizard-server/src/Wizard/Service/Project/Tag/ProjectTagService.hs @@ -1,13 +1,13 @@ -module Wizard.Service.Questionnaire.ProjectTag.ProjectTagService where +module Wizard.Service.Project.Tag.ProjectTagService where import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Common.Sort -import Wizard.Database.DAO.Questionnaire.QuestionnaireProjectTagDAO +import Wizard.Database.DAO.Project.ProjectTagDAO import Wizard.Model.Context.AclContext import Wizard.Model.Context.AppContext getProjectTagSuggestions :: Maybe String -> [String] -> Pageable -> [Sort] -> AppContextM (Page String) getProjectTagSuggestions mQuery excludeTags pageable sort = do - checkPermission _QTN_PERM - findQuestionnaireProjectTagsPage mQuery excludeTags pageable sort + checkPermission _PRJ_PERM + findProjectTagsPage mQuery excludeTags pageable sort diff --git a/wizard-server/src/Wizard/Service/Project/User/ProjectUserService.hs b/wizard-server/src/Wizard/Service/Project/User/ProjectUserService.hs new file mode 100644 index 000000000..23c5a34eb --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/User/ProjectUserService.hs @@ -0,0 +1,29 @@ +module Wizard.Service.Project.User.ProjectUserService where + +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Page +import Shared.Common.Model.Common.Pageable +import Shared.Common.Model.Common.Sort +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectUserDAO +import Wizard.Model.Context.AppContext +import Wizard.Model.Project.Project +import Wizard.Service.Project.ProjectAcl +import Wizard.Service.User.UserMapper +import Wizard.Service.User.UserService +import WizardLib.Public.Model.User.UserSuggestion + +getProjectUserSuggestionsPage :: U.UUID -> Maybe String -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page UserSuggestion) +getProjectUserSuggestionsPage projectUuid mQuery mEditor pageable sort = do + project <- findProjectByUuid projectUuid + checkCommentPermissionToProject project.visibility project.sharing project.permissions + if project.visibility == VisibleCommentProjectVisibility || project.visibility == VisibleEditProjectVisibility || project.sharing == AnyoneWithLinkCommentProjectSharing || project.sharing == AnyoneWithLinkEditProjectSharing + then getUserSuggestionsPage mQuery Nothing Nothing pageable sort + else do + let perm = + case mEditor of + Just True -> "EDIT" + _ -> "COMMENT" + suggestionPage <- findProjectUserSuggestionsPage projectUuid perm mQuery pageable sort + return . fmap toSuggestion $ suggestionPage diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionMapper.hs b/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionMapper.hs similarity index 61% rename from wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionMapper.hs rename to wizard-server/src/Wizard/Service/Project/Version/ProjectVersionMapper.hs index ef8e9e073..3c4f78c94 100644 --- a/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionMapper.hs +++ b/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionMapper.hs @@ -1,18 +1,18 @@ -module Wizard.Service.Questionnaire.Version.QuestionnaireVersionMapper where +module Wizard.Service.Project.Version.ProjectVersionMapper where import Data.Time import qualified Data.UUID as U -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO import Wizard.Api.Resource.User.UserDTO -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList import qualified Wizard.Service.User.UserMapper as UM -toVersionList :: QuestionnaireVersion -> Maybe UserDTO -> QuestionnaireVersionList +toVersionList :: ProjectVersion -> Maybe UserDTO -> ProjectVersionList toVersionList version createdBy = - QuestionnaireVersionList + ProjectVersionList { uuid = version.uuid , name = version.name , description = version.description @@ -24,9 +24,9 @@ toVersionList version createdBy = -- --------------------------------------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------------------------------------- -toVersionChangeDTO :: QuestionnaireVersion -> QuestionnaireVersionChangeDTO +toVersionChangeDTO :: ProjectVersion -> ProjectVersionChangeDTO toVersionChangeDTO version = - QuestionnaireVersionChangeDTO + ProjectVersionChangeDTO { name = version.name , description = version.description , eventUuid = version.eventUuid @@ -34,33 +34,33 @@ toVersionChangeDTO version = -- --------------------------------------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------------------------------------- -toVersionRevertDTO :: U.UUID -> QuestionnaireVersionRevertDTO -toVersionRevertDTO eventUuid = QuestionnaireVersionRevertDTO {eventUuid = eventUuid} +toVersionRevertDTO :: U.UUID -> ProjectVersionRevertDTO +toVersionRevertDTO eventUuid = ProjectVersionRevertDTO {eventUuid = eventUuid} -- --------------------------------------------------------------------------------------------------------------------- -- --------------------------------------------------------------------------------------------------------------------- -fromVersionChangeDTO :: QuestionnaireVersionChangeDTO -> U.UUID -> U.UUID -> U.UUID -> U.UUID -> UTCTime -> QuestionnaireVersion -fromVersionChangeDTO reqDto uuid questionnaireUuid tenantUuid createdBy now = - QuestionnaireVersion +fromVersionChangeDTO :: ProjectVersionChangeDTO -> U.UUID -> U.UUID -> U.UUID -> U.UUID -> UTCTime -> ProjectVersion +fromVersionChangeDTO reqDto uuid projectUuid tenantUuid createdBy now = + ProjectVersion { uuid = uuid , name = reqDto.name , description = reqDto.description , eventUuid = reqDto.eventUuid - , questionnaireUuid = questionnaireUuid + , projectUuid = projectUuid , tenantUuid = tenantUuid , createdBy = Just createdBy , createdAt = now , updatedAt = now } -fromVersionChangeDTO' :: QuestionnaireVersion -> QuestionnaireVersionChangeDTO -> UTCTime -> QuestionnaireVersion +fromVersionChangeDTO' :: ProjectVersion -> ProjectVersionChangeDTO -> UTCTime -> ProjectVersion fromVersionChangeDTO' version reqDto now = - QuestionnaireVersion + ProjectVersion { uuid = version.uuid , name = reqDto.name , description = reqDto.description , eventUuid = reqDto.eventUuid - , questionnaireUuid = version.questionnaireUuid + , projectUuid = version.projectUuid , tenantUuid = version.tenantUuid , createdBy = version.createdBy , createdAt = version.createdAt diff --git a/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionService.hs b/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionService.hs new file mode 100644 index 000000000..4981f845f --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionService.hs @@ -0,0 +1,141 @@ +module Wizard.Service.Project.Version.ProjectVersionService where + +import Control.Monad (void, when) +import Control.Monad.Except (catchError) +import Control.Monad.Reader (asks, liftIO) +import qualified Data.List as L +import qualified Data.Map.Strict as M +import qualified Data.Set as S +import Data.Time +import qualified Data.UUID as U + +import Shared.Common.Model.Common.Lens +import Shared.Common.Util.List +import Shared.Common.Util.Uuid +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO +import Wizard.Api.Resource.Project.Version.ProjectVersionRevertDTO +import Wizard.Api.Resource.User.UserDTO +import Wizard.Database.DAO.Common +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectFileDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO +import Wizard.Model.Context.AppContext +import Wizard.Model.Context.AppContextHelpers +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.Event.ProjectEventListLenses () +import Wizard.Model.Project.Project +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList +import Wizard.Service.Project.Collaboration.ProjectCollaborationService +import Wizard.Service.Project.Comment.ProjectCommentService +import Wizard.Service.Project.Compiler.ProjectCompilerService +import Wizard.Service.Project.ProjectAcl +import Wizard.Service.Project.ProjectMapper +import Wizard.Service.Project.Version.ProjectVersionMapper +import Wizard.Service.Project.Version.ProjectVersionValidation +import Wizard.Service.User.UserService + +getVersions :: U.UUID -> AppContextM [ProjectVersionList] +getVersions projectUuid = do + project <- findProjectByUuid projectUuid + checkViewPermissionToProject project.visibility project.sharing project.permissions + findProjectVersionListByProjectUuidAndCreatedAt projectUuid Nothing + +createVersion :: U.UUID -> ProjectVersionChangeDTO -> AppContextM ProjectVersionList +createVersion projectUuid reqDto = + runInTransaction $ do + project <- findProjectByUuid projectUuid + checkOwnerPermissionToProject project.visibility project.permissions + validateProjectVersionCreate projectUuid reqDto + uuid <- liftIO generateUuid + tenantUuid <- asks currentTenantUuid + currentUser <- getCurrentUser + now <- liftIO getCurrentTime + let version = fromVersionChangeDTO reqDto uuid projectUuid tenantUuid currentUser.uuid now + insertProjectVersion version + return $ toVersionList version (Just currentUser) + +cloneProjectVersions :: U.UUID -> U.UUID -> [(U.UUID, ProjectEventList)] -> AppContextM [(ProjectVersion, ProjectVersion)] +cloneProjectVersions oldProjectUuid newProjectUuid newProjectEventsWithOldEventUuid = do + runInTransaction $ do + oldVersions <- findProjectVersionsByProjectUuid oldProjectUuid + traverse + ( \oldVersion -> do + newVersionUuid <- liftIO generateUuid + let newEventUuid = + case L.find (\(oldEventUuid, newEvent) -> oldVersion.eventUuid == oldEventUuid) newProjectEventsWithOldEventUuid of + Just (_, newEvent) -> getUuid newEvent + Nothing -> oldVersion.eventUuid + let newVersion = oldVersion {uuid = newVersionUuid, projectUuid = newProjectUuid, eventUuid = newEventUuid} + insertProjectVersion newVersion + return (oldVersion, newVersion) + ) + oldVersions + +modifyVersion :: U.UUID -> U.UUID -> ProjectVersionChangeDTO -> AppContextM ProjectVersionList +modifyVersion projectUuid versionUuid reqDto = + runInTransaction $ do + project <- findProjectByUuid projectUuid + checkOwnerPermissionToProject project.visibility project.permissions + validateProjectVersionUpdate reqDto + now <- liftIO getCurrentTime + version <- findProjectVersionByUuid versionUuid + let updatedVersion = fromVersionChangeDTO' version reqDto now + updateProjectVersionByUuid updatedVersion + createdBy <- + case version.createdBy of + Just vCreatedBy -> do + user <- getUserById vCreatedBy + return . Just $ user + Nothing -> return Nothing + return $ toVersionList updatedVersion createdBy + +deleteVersion :: U.UUID -> U.UUID -> AppContextM () +deleteVersion projectUuid vUuid = + runInTransaction $ do + project <- findProjectByUuid projectUuid + checkOwnerPermissionToProject project.visibility project.permissions + _ <- findProjectVersionByUuid vUuid + void $ deleteProjectVersionByUuid vUuid + +revertToEvent :: U.UUID -> ProjectVersionRevertDTO -> Bool -> AppContextM ProjectContentDTO +revertToEvent projectUuid reqDto shouldSave = + runInTransaction $ do + project <- findProjectByUuid projectUuid + if shouldSave + then checkOwnerPermissionToProject project.visibility project.permissions + else checkViewPermissionToProject project.visibility project.sharing project.permissions + projectVersions <- findProjectVersionsByProjectUuid projectUuid + projectEvents <- findProjectEventListsByProjectUuid projectUuid + let updatedEvents = takeWhileInclusive (\e -> getUuid e /= reqDto.eventUuid) projectEvents + let eventsToDelete = dropWhileExclusive (\e -> getUuid e /= reqDto.eventUuid) projectEvents + let updatedEventUuids = S.fromList . fmap getUuid $ updatedEvents + let updatedVersions = filter (\v -> S.member v.eventUuid updatedEventUuids) projectVersions + when + shouldSave + ( do + let versionsToDelete = fmap (.uuid) . filter (\v -> not $ S.member v.eventUuid updatedEventUuids) $ projectVersions + deleteProjectVersionsByUuids versionsToDelete + deleteProjectEventsByUuids (fmap getUuid eventsToDelete) + event <- findProjectEventByUuid reqDto.eventUuid + deleteProjectFilesNewerThen projectUuid (getCreatedAt event) + void $ updateProjectUpdatedAtByUuid projectUuid + ) + let projectContent = compileProjectEvents updatedEvents + versionDto <- + traverse + ( \version -> do + createdBy <- + case version.createdBy of + Just vCreatedBy -> do + user <- getUserById vCreatedBy + return . Just $ user + Nothing -> return Nothing + return $ toVersionList version createdBy + ) + updatedVersions + when shouldSave (logOutOnlineUsersWhenProjectDramaticallyChanged projectUuid) + commentThreadsMap <- catchError (getProjectCommentsByProjectUuid projectUuid Nothing Nothing) (\_ -> return M.empty) + return $ toContentDTO projectContent commentThreadsMap updatedEvents versionDto diff --git a/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionValidation.hs b/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionValidation.hs new file mode 100644 index 000000000..409298022 --- /dev/null +++ b/wizard-server/src/Wizard/Service/Project/Version/ProjectVersionValidation.hs @@ -0,0 +1,34 @@ +module Wizard.Service.Project.Version.ProjectVersionValidation where + +import Control.Monad (when) +import Control.Monad.Except (throwError) +import Data.Maybe (isJust) +import qualified Data.UUID as U + +import Shared.Common.Model.Error.Error +import Wizard.Api.Resource.Project.Version.ProjectVersionChangeDTO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO +import Wizard.Localization.Messages.Public +import Wizard.Model.Context.AppContext + +validateProjectVersionCreate :: U.UUID -> ProjectVersionChangeDTO -> AppContextM () +validateProjectVersionCreate projectUuid reqDto = do + validateProjectVersionEventExistence reqDto + validateProjectVersionUniqueness projectUuid reqDto + +validateProjectVersionUpdate :: ProjectVersionChangeDTO -> AppContextM () +validateProjectVersionUpdate = validateProjectVersionEventExistence + +validateProjectVersionUniqueness :: U.UUID -> ProjectVersionChangeDTO -> AppContextM () +validateProjectVersionUniqueness projectUuid reqDto = do + mProjectVersion <- findProjectVersionByEventUuid' projectUuid reqDto.eventUuid + when + (isJust mProjectVersion) + (throwError . UserError $ _ERROR_SERVICE_PROJECT_VERSION__VERSION_UNIQUENESS (U.toString $ reqDto.eventUuid)) + +validateProjectVersionEventExistence :: ProjectVersionChangeDTO -> AppContextM () +validateProjectVersionEventExistence reqDto = + findProjectEventByUuid' reqDto.eventUuid >>= \case + Just _ -> return () + Nothing -> throwError . UserError $ _ERROR_SERVICE_PROJECT_VERSION__NON_EXISTENT_EVENT_UUID (U.toString $ reqDto.eventUuid) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationMapper.hs b/wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationMapper.hs deleted file mode 100644 index 5cb695d33..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Collaboration/CollaborationMapper.hs +++ /dev/null @@ -1,124 +0,0 @@ -module Wizard.Service.Questionnaire.Collaboration.CollaborationMapper where - -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO -import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import Wizard.Model.Websocket.WebsocketMessage -import Wizard.Model.Websocket.WebsocketRecord -import Wizard.Util.Websocket - -toWebsocketMessage :: WebsocketRecord -> content -> WebsocketMessage content -toWebsocketMessage record content = - WebsocketMessage - { connectionUuid = record.connectionUuid - , connection = record.connection - , entityId = record.entityId - , content = content - } - -toSetUserListMessage - :: [WebsocketRecord] -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toSetUserListMessage records record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetUserList_ServerQuestionnaireActionDTO $ - getCollaborators record.connectionUuid record.entityId records - -toSetReplyMessage - :: SetReplyEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toSetReplyMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . SetReplyEventDTO' $ - reqDto - -toClearReplyMessage - :: ClearReplyEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toClearReplyMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . ClearReplyEventDTO' $ - reqDto - -toSetPhaseMessage - :: SetPhaseEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toSetPhaseMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . SetPhaseEventDTO' $ - reqDto - -toSetLabelMessage - :: SetLabelsEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toSetLabelMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . SetLabelsEventDTO' $ - reqDto - -toResolveCommentThreadMessage - :: ResolveCommentThreadEventDTO - -> WebsocketRecord - -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toResolveCommentThreadMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . ResolveCommentThreadEventDTO' $ - reqDto - -toReopenCommentThreadMessage - :: ReopenCommentThreadEventDTO - -> WebsocketRecord - -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toReopenCommentThreadMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . ReopenCommentThreadEventDTO' $ - reqDto - -toAssignCommentThreadMessage - :: AssignCommentThreadEventDTO - -> WebsocketRecord - -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toAssignCommentThreadMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . AssignCommentThreadEventDTO' $ - reqDto - -toDeleteCommentThreadMessage - :: DeleteCommentThreadEventDTO - -> WebsocketRecord - -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toDeleteCommentThreadMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . DeleteCommentThreadEventDTO' $ - reqDto - -toAddCommentMessage - :: AddCommentEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toAddCommentMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . AddCommentEventDTO' $ - reqDto - -toEditCommentMessage - :: EditCommentEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toEditCommentMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . EditCommentEventDTO' $ - reqDto - -toDeleteCommentMessage - :: DeleteCommentEventDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toDeleteCommentMessage reqDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetContent_ServerQuestionnaireActionDTO . DeleteCommentEventDTO' $ - reqDto - -toSetQuestionnaireMessage - :: QuestionnaireDetailWsDTO -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toSetQuestionnaireMessage resWsDto record = - toWebsocketMessage record $ - Success_ServerActionDTO . SetQuestionnaire_ServerQuestionnaireActionDTO $ - resWsDto - -toAddFileMessage :: QuestionnaireFileSimple -> WebsocketRecord -> WebsocketMessage (Success_ServerActionDTO ServerQuestionnaireActionDTO) -toAddFileMessage file record = - toWebsocketMessage record $ - Success_ServerActionDTO . AddFile_ServerQuestionnaireActionDTO $ - file diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Comment/QuestionnaireCommentService.hs b/wizard-server/src/Wizard/Service/Questionnaire/Comment/QuestionnaireCommentService.hs deleted file mode 100644 index 26ea6a750..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Comment/QuestionnaireCommentService.hs +++ /dev/null @@ -1,77 +0,0 @@ -module Wizard.Service.Questionnaire.Comment.QuestionnaireCommentService where - -import Control.Monad.Except (catchError) -import Control.Monad.Reader (liftIO) -import Data.Foldable (traverse_) -import qualified Data.Map.Strict as M -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Shared.Common.Service.Acl.AclService -import Shared.Common.Util.List -import Shared.Common.Util.Uuid -import Wizard.Constant.Acl -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadNotification -import Wizard.Service.Mail.Mailer -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentMapper -import Wizard.Service.Questionnaire.QuestionnaireAcl -import WizardLib.Public.Model.User.UserSimple - -getQuestionnaireCommentThreadsPage :: Maybe String -> Maybe U.UUID -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireCommentThreadAssigned) -getQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid resolved pageable sort = do - checkPermission _QTN_PERM - findAssignedQuestionnaireCommentThreadsPage mQuery mQuestionnaireUuid resolved pageable sort - -getQuestionnaireCommentsByQuestionnaireUuid :: U.UUID -> Maybe String -> Maybe Bool -> AppContextM (M.Map String [QuestionnaireCommentThreadList]) -getQuestionnaireCommentsByQuestionnaireUuid qtnUuid mPath mResolved = do - qtn <- findQuestionnaireByUuid qtnUuid - checkCommentPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - editor <- catchError (hasEditPermissionToQtn qtn.visibility qtn.sharing qtn.permissions) (\_ -> return False) - threads <- findQuestionnaireCommentThreadsForQuestionnaire qtn.uuid mPath mResolved editor - return . toCommentThreadsMap $ threads - -duplicateCommentThreads :: U.UUID -> U.UUID -> AppContextM () -duplicateCommentThreads oldQtnUuid newQtnUuid = do - threads <- findQuestionnaireCommentThreads oldQtnUuid - traverse_ (duplicateCommentThread newQtnUuid) threads - -duplicateCommentThread :: U.UUID -> QuestionnaireCommentThread -> AppContextM () -duplicateCommentThread newQtnUuid thread = do - newUuid <- liftIO generateUuid - let updatedCommentThread = - thread - { uuid = newUuid - , questionnaireUuid = newQtnUuid - } - insertQuestionnaireCommentThread updatedCommentThread - traverse_ (duplicateComment newUuid) thread.comments - -duplicateComment :: U.UUID -> QuestionnaireComment -> AppContextM () -duplicateComment newThreadUuid comment = do - newUuid <- liftIO generateUuid - let updatedComment = - comment - { uuid = newUuid - , threadUuid = newThreadUuid - } - insertQuestionnaireComment updatedComment - return () - -sendNotificationToNewAssignees :: AppContextM () -sendNotificationToNewAssignees = - runInTransaction $ do - threads <- findQuestionnaireCommentThreadsForNotifying - let threadGroups = groupBy (\t1 t2 -> t1.assignedTo.uuid == t2.assignedTo.uuid && t1.tenantUuid == t2.tenantUuid) threads - traverse_ sendQuestionnaireCommentThreadAssignedMail threadGroups - unsetQuestionnaireCommentThreadNotificationRequired diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Compiler/CompilerService.hs b/wizard-server/src/Wizard/Service/Questionnaire/Compiler/CompilerService.hs deleted file mode 100644 index e08f5fdaf..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Compiler/CompilerService.hs +++ /dev/null @@ -1,22 +0,0 @@ -module Wizard.Service.Questionnaire.Compiler.CompilerService where - -import qualified Data.Map.Strict as M - -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireContentDM -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper - -compileQuestionnaire :: [QuestionnaireEventList] -> QuestionnaireContent -compileQuestionnaire = foldl applyEvent defaultQuestionnaireContent - -applyEvent :: QuestionnaireContent -> QuestionnaireEventList -> QuestionnaireContent -applyEvent qtnCtn (SetReplyEventList' event) = qtnCtn {replies = M.insert event.path (toReply' event) qtnCtn.replies} -applyEvent qtnCtn (ClearReplyEventList' event) = qtnCtn {replies = M.delete event.path qtnCtn.replies} -applyEvent qtnCtn (SetPhaseEventList' event) = qtnCtn {phaseUuid = event.phaseUuid} -applyEvent qtnCtn (SetLabelsEventList' event) = - qtnCtn - { labels = case event.value of - [] -> M.delete event.path qtnCtn.labels - newValue -> M.insert event.path newValue qtnCtn.labels - } diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Event/QuestionnaireEventService.hs b/wizard-server/src/Wizard/Service/Questionnaire/Event/QuestionnaireEventService.hs deleted file mode 100644 index 56f9314f4..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Event/QuestionnaireEventService.hs +++ /dev/null @@ -1,64 +0,0 @@ -module Wizard.Service.Questionnaire.Event.QuestionnaireEventService where - -import Data.Foldable (traverse_) -import qualified Data.List as L -import qualified Data.Map.Strict as M -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Lens -import Shared.Common.Util.List (groupBy) -import Shared.Common.Util.Logger -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO -import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireVersion - -squashQuestionnaireEvents :: AppContextM () -squashQuestionnaireEvents = do - qtnUuids <- findQuestionnaireForSquashing - traverse_ squashQuestionnaireEventsForQuestionnaire qtnUuids - -squashQuestionnaireEventsForQuestionnaire :: U.UUID -> AppContextM () -squashQuestionnaireEventsForQuestionnaire qtnUuid = - runInTransaction $ do - logInfoI _CMP_SERVICE (f' "Squashing events for questionnaire (qtnUuid: '%s')" [U.toString qtnUuid]) - events <- findQuestionnaireEventsByQuestionnaireUuid qtnUuid - versions <- findQuestionnaireVersionsByQuestionnaireUuid qtnUuid - let squashedEvents = squash versions events - syncQuestionnaireEventsWithDb events squashedEvents - updateQuestionnaireSquashedByUuid qtnUuid True - logInfoI - _CMP_SERVICE - ( f' - "Squashing for questionnaire '%s' finished successfully (before: %s, after %s)" - [U.toString qtnUuid, show . length $ events, show . length $ squashedEvents] - ) - -instance Ord QuestionnaireEvent where - compare a b = compare (getCreatedAt a) (getCreatedAt b) - -squash :: [QuestionnaireVersion] -> [QuestionnaireEvent] -> [QuestionnaireEvent] -squash versions events = - let groupedEvents = groupBy (\e1 e2 -> utctDay (getCreatedAt e1) == utctDay (getCreatedAt e2)) events - squashedEvents = fmap (squashOnePeriod versions) groupedEvents - in concat squashedEvents - -squashOnePeriod :: [QuestionnaireVersion] -> [QuestionnaireEvent] -> [QuestionnaireEvent] -squashOnePeriod versions = snd . foldr go (M.empty, []) - where - go - :: QuestionnaireEvent - -> (M.Map String (Maybe U.UUID), [QuestionnaireEvent]) - -> (M.Map String (Maybe U.UUID), [QuestionnaireEvent]) - go event' (questions, events) = - case event' of - SetReplyEvent' event -> - if not (L.any (\v -> v.eventUuid == event.uuid) versions) - && Just event.createdBy == M.lookup event.path questions - then (questions, events) - else (M.insert event.path event.createdBy questions, event' : events) - _ -> (questions, event' : events) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileAcl.hs b/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileAcl.hs deleted file mode 100644 index 99d8e84fc..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileAcl.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Service.Questionnaire.File.QuestionnaireFileAcl where - -import qualified Data.UUID as U - -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.QuestionnaireAcl - -checkViewPermissionToFile :: U.UUID -> AppContextM () -checkViewPermissionToFile qtnUuid = do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - -checkEditPermissionToFile :: U.UUID -> AppContextM () -checkEditPermissionToFile qtnUuid = do - qtn <- findQuestionnaireByUuid qtnUuid - checkEditPermissionToQtn qtn.visibility qtn.sharing qtn.permissions diff --git a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileMapper.hs b/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileMapper.hs deleted file mode 100644 index 5e3e6d020..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileMapper.hs +++ /dev/null @@ -1,48 +0,0 @@ -module Wizard.Service.Questionnaire.File.QuestionnaireFileMapper where - -import qualified Data.ByteString.Char8 as BS -import Data.Time -import qualified Data.UUID as U - -import Wizard.Api.Resource.File.FileCreateDTO -import Wizard.Api.Resource.User.UserDTO -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireFile -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.Model.Questionnaire.QuestionnaireFileSimple -import qualified Wizard.Service.Questionnaire.QuestionnaireMapper as QuestionnaireMapper -import qualified Wizard.Service.User.UserMapper as UserMapper - -toList :: QuestionnaireFile -> Questionnaire -> Maybe UserDTO -> QuestionnaireFileList -toList QuestionnaireFile {..} questionnaire mCreatedBy = - QuestionnaireFileList - { uuid = uuid - , fileName = fileName - , contentType = contentType - , fileSize = fileSize - , questionnaire = QuestionnaireMapper.toSimple questionnaire - , createdBy = fmap UserMapper.toSuggestion' mCreatedBy - , createdAt = createdAt - } - -toSimple :: QuestionnaireFile -> QuestionnaireFileSimple -toSimple QuestionnaireFile {..} = - QuestionnaireFileSimple - { uuid = uuid - , fileName = fileName - , contentType = contentType - , fileSize = fileSize - } - -fromFileCreateDTO :: FileCreateDTO -> U.UUID -> U.UUID -> Maybe UserDTO -> U.UUID -> UTCTime -> QuestionnaireFile -fromFileCreateDTO reqDto uuid qtnUuid mCreatedBy tenantUuid now = - QuestionnaireFile - { uuid = uuid - , fileName = reqDto.fileName - , contentType = reqDto.contentType - , fileSize = fromIntegral . BS.length $ reqDto.content - , questionnaireUuid = qtnUuid - , createdBy = fmap (.uuid) mCreatedBy - , tenantUuid = tenantUuid - , createdAt = now - } diff --git a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileService.hs b/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileService.hs deleted file mode 100644 index f6bc8581e..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileService.hs +++ /dev/null @@ -1,90 +0,0 @@ -module Wizard.Service.Questionnaire.File.QuestionnaireFileService where - -import Control.Monad (void) -import Control.Monad.Reader (asks, liftIO) -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Shared.Common.Service.Acl.AclService -import Shared.Common.Util.String -import Shared.Common.Util.Uuid -import Wizard.Api.Resource.File.FileCreateDTO -import Wizard.Constant.Acl -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireFile -import Wizard.Model.Questionnaire.QuestionnaireFileList -import Wizard.S3.Questionnaire.QuestionnaireFileS3 -import Wizard.Service.Questionnaire.Collaboration.CollaborationService -import Wizard.Service.Questionnaire.File.QuestionnaireFileAcl -import Wizard.Service.Questionnaire.File.QuestionnaireFileMapper -import Wizard.Service.Questionnaire.File.QuestionnaireFileValidation -import Wizard.Service.Questionnaire.QuestionnaireAcl -import WizardLib.Public.Api.Resource.TemporaryFile.TemporaryFileDTO -import qualified WizardLib.Public.Service.TemporaryFile.TemporaryFileMapper as TemporaryFileMapper -import WizardLib.Public.Service.TemporaryFile.TemporaryFileService - -getQuestionnaireFilesPage :: Maybe String -> Maybe U.UUID -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireFileList) -getQuestionnaireFilesPage mQuery mQtnUuid pageable sort = do - case mQtnUuid of - Just qtnUuid -> do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - Nothing -> checkPermission _QTN_FILE_PERM - findQuestionnaireFilesPage mQuery mQtnUuid pageable sort - -createQuestionnaireFile :: U.UUID -> U.UUID -> FileCreateDTO -> AppContextM QuestionnaireFileList -createQuestionnaireFile qtnUuid questionUuid reqDto = - runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - uuid <- liftIO generateUuid - mCurrentUser <- asks currentUser - tenantUuid <- asks currentTenantUuid - now <- liftIO getCurrentTime - let qtnFile = fromFileCreateDTO reqDto uuid qtnUuid mCurrentUser tenantUuid now - validateQuestionnaireFile qtn questionUuid qtnFile - insertQuestionnaireFile qtnFile - putFile qtnUuid uuid reqDto.contentType reqDto.content - addFile qtnUuid (toSimple qtnFile) - return $ toList qtnFile qtn mCurrentUser - -cloneQuestionnaireFiles :: U.UUID -> U.UUID -> AppContextM [(QuestionnaireFile, QuestionnaireFile)] -cloneQuestionnaireFiles oldQtnUuid newQtnUuid = do - runInTransaction $ do - oldFiles <- findQuestionnaireFilesByQuestionnaire oldQtnUuid - traverse - ( \oldFile -> do - contentAction <- retrieveFileConduitAction oldQtnUuid oldFile.uuid - newFileUuid <- liftIO generateUuid - let newFile = oldFile {uuid = newFileUuid, questionnaireUuid = newQtnUuid} - let contentDisposition = f' "attachment;filename=\"%s\"" [trim newFile.fileName] - insertQuestionnaireFile newFile - putFileConduit newQtnUuid newFile.uuid newFile.contentType contentDisposition contentAction - return (oldFile, newFile) - ) - oldFiles - -downloadQuestionnaireFile :: U.UUID -> U.UUID -> AppContextM TemporaryFileDTO -downloadQuestionnaireFile qtnUuid fileUuid = do - runInTransaction $ do - qtnFile <- findQuestionnaireFileByUuid fileUuid - checkViewPermissionToFile qtnUuid - contentAction <- retrieveFileConduitAction qtnUuid fileUuid - mCurrentUserUuid <- getCurrentUserUuid - url <- createTemporaryFileConduit qtnFile.fileName "application/octet-stream" mCurrentUserUuid contentAction - return $ TemporaryFileMapper.toDTO url qtnFile.contentType - -deleteQuestionnaireFile :: U.UUID -> U.UUID -> AppContextM () -deleteQuestionnaireFile qtnUuid fileUuid = do - runInTransaction $ do - _ <- findQuestionnaireFileByUuid fileUuid - checkEditPermissionToFile qtnUuid - void $ deleteQuestionnaireFileByUuid fileUuid diff --git a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileValidation.hs b/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileValidation.hs deleted file mode 100644 index d5a4dad30..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/File/QuestionnaireFileValidation.hs +++ /dev/null @@ -1,30 +0,0 @@ -module Wizard.Service.Questionnaire.File.QuestionnaireFileValidation where - -import Control.Monad (when) -import Control.Monad.Except (throwError) -import qualified Data.Map.Strict as M -import qualified Data.UUID as U - -import Shared.Common.Model.Error.Error -import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelLenses -import Wizard.Localization.Messages.Public -import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireFile -import Wizard.Service.KnowledgeModel.KnowledgeModelService -import Wizard.Service.Tenant.Limit.LimitService - -validateQuestionnaireFile :: Questionnaire -> U.UUID -> QuestionnaireFile -> AppContextM () -validateQuestionnaireFile qtn questionUuid qtnFile = do - checkStorageSize qtnFile.fileSize - km <- compileKnowledgeModel [] (Just qtn.knowledgeModelPackageId) qtn.selectedQuestionTagUuids - case M.lookup questionUuid (getQuestionsM km) of - Just (FileQuestion' question) -> - case question.maxSize of - (Just maxFileSize) -> - when - (maxFileSize < fromIntegral qtnFile.fileSize) - (throwError . UserError $ _ERROR_VALIDATION__QUESTIONNAIRE_FILE_SIZE_EXCEEDS_LIMIT qtnFile.fileSize maxFileSize) - Nothing -> return () - _ -> throwError . UserError $ _ERROR_VALIDATION__QUESTIONNAIRE_FILE_QUESTION_ABSENCE_OR_WRONG_TYPE diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationAudit.hs b/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationAudit.hs deleted file mode 100644 index c1c454545..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationAudit.hs +++ /dev/null @@ -1,49 +0,0 @@ -module Wizard.Service.Questionnaire.Migration.MigrationAudit where - -import qualified Data.Map.Strict as M -import qualified Data.UUID as U - -import Shared.Audit.Service.Audit.AuditService -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.Questionnaire - -auditQuestionnaireMigrationCreate :: MigratorStateCreateDTO -> Questionnaire -> Questionnaire -> AppContextM () -auditQuestionnaireMigrationCreate reqDto oldQtn newQtn = - logAuditWithBody - "questionnaire.migration" - "create" - (U.toString oldQtn.uuid) - ( M.fromList - [ ("sourceKnowledgeModelPackageId", oldQtn.knowledgeModelPackageId) - , ("targetKnowledgeModelPackageId", reqDto.targetKnowledgeModelPackageId) - , ("oldQuestionnaireUuid", U.toString $ oldQtn.uuid) - , ("newQuestionnaireUuid", U.toString $ newQtn.uuid) - ] - ) - -auditQuestionnaireMigrationModify :: MigratorStateDTO -> MigratorStateChangeDTO -> AppContextM () -auditQuestionnaireMigrationModify state resolvedQuestionUuids = - logAuditWithBody - "questionnaire.migration" - "modify" - (U.toString $ state.oldQuestionnaire.uuid) - (M.fromList [("resolvedQuestionUuids", show resolvedQuestionUuids)]) - -auditQuestionnaireMigrationFinish :: Questionnaire -> Questionnaire -> AppContextM () -auditQuestionnaireMigrationFinish oldQtn newQtn = - logAuditWithBody - "questionnaire.migration" - "finish" - (U.toString oldQtn.uuid) - ( M.fromList - [("oldQuestionnaireUuid", U.toString $ oldQtn.uuid), ("newQuestionnaireUuid", U.toString $ newQtn.uuid)] - ) - -auditQuestionnaireMigrationCancel :: MigratorStateDTO -> AppContextM () -auditQuestionnaireMigrationCancel state = - logAudit "questionnaire.migration" "cancel" (U.toString $ state.oldQuestionnaire.uuid) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationMapper.hs b/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationMapper.hs deleted file mode 100644 index cc9cbfde7..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationMapper.hs +++ /dev/null @@ -1,50 +0,0 @@ -module Wizard.Service.Questionnaire.Migration.MigrationMapper where - -import Data.Time -import qualified Data.UUID as U - -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.User.UserDTO -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.QuestionnaireEvent - -toDTO :: QuestionnaireDetailQuestionnaireDTO -> QuestionnaireDetailQuestionnaireDTO -> [U.UUID] -> U.UUID -> MigratorStateDTO -toDTO oldQtn newQtn qtnUuids tenantUuid = - MigratorStateDTO - { oldQuestionnaire = oldQtn - , newQuestionnaire = newQtn - , resolvedQuestionUuids = qtnUuids - , tenantUuid = tenantUuid - } - -fromCreateDTO :: U.UUID -> U.UUID -> U.UUID -> MigratorState -fromCreateDTO oldQtnUuid newQtnUuid tenantUuid = - MigratorState - { oldQuestionnaireUuid = oldQtnUuid - , newQuestionnaireUuid = newQtnUuid - , resolvedQuestionUuids = [] - , tenantUuid = tenantUuid - } - -fromChangeDTO :: MigratorStateChangeDTO -> MigratorStateDTO -> MigratorState -fromChangeDTO changeDto ms = - MigratorState - { oldQuestionnaireUuid = ms.oldQuestionnaire.uuid - , newQuestionnaireUuid = ms.newQuestionnaire.uuid - , resolvedQuestionUuids = changeDto.resolvedQuestionUuids - , tenantUuid = ms.tenantUuid - } - -toQuestionnairePhaseEvent :: U.UUID -> Maybe U.UUID -> U.UUID -> U.UUID -> Maybe UserDTO -> UTCTime -> QuestionnaireEvent -toQuestionnairePhaseEvent phaseEventUuid kmPhaseUuid questionnaireUuid tenantUuid mCurrentUserUuid now = - SetPhaseEvent' $ - SetPhaseEvent - { uuid = phaseEventUuid - , phaseUuid = kmPhaseUuid - , questionnaireUuid = questionnaireUuid - , tenantUuid = tenantUuid - , createdBy = fmap (.uuid) mCurrentUserUuid - , createdAt = now - } diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationService.hs b/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationService.hs deleted file mode 100644 index 5b067c693..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationService.hs +++ /dev/null @@ -1,205 +0,0 @@ -module Wizard.Service.Questionnaire.Migration.MigrationService where - -import Control.Monad.Reader (asks, liftIO) -import Data.Foldable (traverse_) -import qualified Data.List as L -import Data.Maybe (catMaybes) -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Lens -import Shared.Common.Util.List -import Shared.Common.Util.Uuid -import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO -import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateChangeDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateCreateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO -import Wizard.Model.Common.Lens -import Wizard.Model.Context.AclContext -import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Service.DocumentTemplate.DocumentTemplateUtil -import Wizard.Service.KnowledgeModel.KnowledgeModelService -import Wizard.Service.Questionnaire.Compiler.CompilerService -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper -import Wizard.Service.Questionnaire.Migration.MigrationAudit -import Wizard.Service.Questionnaire.Migration.MigrationMapper -import Wizard.Service.Questionnaire.Migration.MigrationValidation -import Wizard.Service.Questionnaire.Migration.Migrator.Sanitizer -import Wizard.Service.Questionnaire.QuestionnaireAcl -import Wizard.Service.Questionnaire.QuestionnaireService - -createQuestionnaireMigration :: U.UUID -> MigratorStateCreateDTO -> AppContextM MigratorStateDTO -createQuestionnaireMigration oldQtnUuid reqDto = - runInTransaction $ do - checkPermission _QTN_PERM - validateMigrationExistence oldQtnUuid - oldQtn <- findQuestionnaireByUuid oldQtnUuid - checkMigrationPermissionToQtn oldQtn.visibility oldQtn.permissions - (newQtn, newQtnEvents, newQtnVersions) <- upgradeQuestionnaire reqDto oldQtn - insertQuestionnaire newQtn - insertQuestionnaireEvents newQtnEvents - traverse_ insertQuestionnaireVersion newQtnVersions - tenantUuid <- asks currentTenantUuid - let state = fromCreateDTO oldQtn.uuid newQtn.uuid tenantUuid - insertMigratorState state - auditQuestionnaireMigrationCreate reqDto oldQtn newQtn - getQuestionnaireMigration newQtn.uuid - -getQuestionnaireMigration :: U.UUID -> AppContextM MigratorStateDTO -getQuestionnaireMigration qtnUuid = do - checkPermission _QTN_PERM - state <- findMigratorStateByNewQuestionnaireUuid qtnUuid - oldQtnDto <- getQuestionnaireDetailQuestionnaireByUuid state.oldQuestionnaireUuid - newQtnDto <- getQuestionnaireDetailQuestionnaireByUuid state.newQuestionnaireUuid - oldQtn <- findQuestionnaireByUuid state.oldQuestionnaireUuid - newQtn <- findQuestionnaireByUuid state.newQuestionnaireUuid - checkMigrationPermissionToQtn oldQtn.visibility oldQtn.permissions - checkMigrationPermissionToQtn newQtn.visibility newQtn.permissions - return $ toDTO oldQtnDto newQtnDto state.resolvedQuestionUuids state.tenantUuid - -modifyQuestionnaireMigration :: U.UUID -> MigratorStateChangeDTO -> AppContextM MigratorStateDTO -modifyQuestionnaireMigration qtnUuid reqDto = - runInTransaction $ do - checkPermission _QTN_PERM - state <- getQuestionnaireMigration qtnUuid - let updatedState = fromChangeDTO reqDto state - updateMigratorStateByNewQuestionnaireUuid updatedState - auditQuestionnaireMigrationModify state reqDto - return $ toDTO state.oldQuestionnaire state.newQuestionnaire updatedState.resolvedQuestionUuids updatedState.tenantUuid - -finishQuestionnaireMigration :: U.UUID -> AppContextM () -finishQuestionnaireMigration qtnUuid = - runInTransaction $ do - checkPermission _QTN_PERM - _ <- getQuestionnaireMigration qtnUuid - state <- findMigratorStateByNewQuestionnaireUuid qtnUuid - deleteMigratorStateByNewQuestionnaireUuid qtnUuid - oldQtn <- findQuestionnaireByUuid state.oldQuestionnaireUuid - newQtn <- findQuestionnaireByUuid state.newQuestionnaireUuid - newQtnEvents <- ensurePhaseIsSetIfNecessary newQtn - newQtnVersions <- findQuestionnaireVersionsByQuestionnaireUuid state.newQuestionnaireUuid - now <- liftIO getCurrentTime - let updatedNewQtn = - oldQtn - { formatUuid = newQtn.formatUuid - , documentTemplateId = newQtn.documentTemplateId - , selectedQuestionTagUuids = newQtn.selectedQuestionTagUuids - , knowledgeModelPackageId = newQtn.knowledgeModelPackageId - , updatedAt = now - } - :: Questionnaire - let newQtnEventsWithOldQtnUuid = fmap (\event -> setQuestionnaireUuid event oldQtn.uuid) newQtnEvents - newVersionsWithNewUuid <- traverse generateNewVersionUuid newQtnVersions - let newVersionsWithOldQtnUuid = fmap (\v -> v {questionnaireUuid = oldQtn.uuid} :: QuestionnaireVersion) newVersionsWithNewUuid - -- Delete the new questionnaire - deleteQuestionnaireEventsByQuestionnaireUuid newQtn.uuid - deleteQuestionnaire newQtn.uuid False - -- Update the old questionnaire with values from new questionnaire - updateQuestionnaireByUuid updatedNewQtn - deleteQuestionnaireEventsByQuestionnaireUuid oldQtn.uuid - insertQuestionnaireEvents newQtnEventsWithOldQtnUuid - traverse_ insertQuestionnaireVersion newVersionsWithOldQtnUuid - auditQuestionnaireMigrationFinish oldQtn newQtn - -cancelQuestionnaireMigration :: U.UUID -> AppContextM () -cancelQuestionnaireMigration qtnUuid = - runInTransaction $ do - checkPermission _QTN_PERM - state <- getQuestionnaireMigration qtnUuid - deleteQuestionnaire state.newQuestionnaire.uuid True - deleteMigratorStateByNewQuestionnaireUuid qtnUuid - auditQuestionnaireMigrationCancel state - return () - --- -------------------------------- --- PRIVATE --- -------------------------------- -upgradeQuestionnaire :: MigratorStateCreateDTO -> Questionnaire -> AppContextM (Questionnaire, [QuestionnaireEvent], [QuestionnaireVersion]) -upgradeQuestionnaire reqDto oldQtn = do - let newPkgId = reqDto.targetKnowledgeModelPackageId - let newTagUuids = reqDto.targetTagUuids - oldKm <- compileKnowledgeModel [] (Just oldQtn.knowledgeModelPackageId) newTagUuids - newKm <- compileKnowledgeModel [] (Just newPkgId) newTagUuids - newUuid <- liftIO generateUuid - oldQtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid oldQtn.uuid - clonedQtnEventsWithOldEventUuid <- cloneQuestionnaireEventsWithOldEventUuid oldQtnEvents - let clonedQtnEvents = fmap snd clonedQtnEventsWithOldEventUuid - newQtnEvents <- sanitizeQuestionnaireEvents newUuid oldKm newKm clonedQtnEvents - (newDocumentTemplateId, newFormatUuid) <- getNewDocumentTemplateIdAndFormatUuid oldQtn newPkgId - let newQtnEventUuids = fmap getUuid newQtnEvents - let clonedQtnEventsFiltered = filter (\e -> getUuid (snd e) `elem` newQtnEventUuids) clonedQtnEventsWithOldEventUuid - let newPermissions = fmap (\perm -> perm {questionnaireUuid = newUuid} :: QuestionnairePerm) oldQtn.permissions - let upgradedQtn = - oldQtn - { uuid = newUuid - , knowledgeModelPackageId = newPkgId - , selectedQuestionTagUuids = newTagUuids - , documentTemplateId = newDocumentTemplateId - , formatUuid = newFormatUuid - , permissions = newPermissions - } - :: Questionnaire - versionsWithOldQtnUuid <- findQuestionnaireVersionsByQuestionnaireUuid oldQtn.uuid - newVersionsWithNewUuid <- traverse generateNewVersionUuid versionsWithOldQtnUuid - let newVersionsWithNewEventUuid = - fmap - ( \v -> - case L.find (\(oldEventUuid, _) -> v.eventUuid == oldEventUuid) clonedQtnEventsWithOldEventUuid of - Just (_, newEvent) -> - Just $ - v - { questionnaireUuid = newUuid - , eventUuid = getUuid newEvent - } - Nothing -> Nothing - ) - newVersionsWithNewUuid - let newVersions = catMaybes newVersionsWithNewEventUuid - return (upgradedQtn, fmap (toEvent upgradedQtn.uuid upgradedQtn.tenantUuid) newQtnEvents, newVersions) - -ensurePhaseIsSetIfNecessary :: Questionnaire -> AppContextM [QuestionnaireEvent] -ensurePhaseIsSetIfNecessary newQtn = do - uuid <- liftIO generateUuid - mCurrentUser <- asks currentUser - now <- liftIO getCurrentTime - newQtnListEvents <- findQuestionnaireEventListsByQuestionnaireUuid newQtn.uuid - let qtnCtn = compileQuestionnaire newQtnListEvents - knowledgeModel <- compileKnowledgeModel [] (Just newQtn.knowledgeModelPackageId) newQtn.selectedQuestionTagUuids - let newQtnEvents = fmap (toEvent newQtn.uuid newQtn.tenantUuid) newQtnListEvents - return $ - case (headSafe knowledgeModel.phaseUuids, qtnCtn.phaseUuid) of - (Nothing, Nothing) -> newQtnEvents - (Nothing, Just qtnPhaseUuid) -> newQtnEvents ++ [toQuestionnairePhaseEvent uuid Nothing newQtn.uuid newQtn.tenantUuid mCurrentUser now] - (Just kmPhaseUuid, Nothing) -> newQtnEvents ++ [toQuestionnairePhaseEvent uuid (Just kmPhaseUuid) newQtn.uuid newQtn.tenantUuid mCurrentUser now] - (Just kmPhaseUuid, Just qtnPhaseUuid) -> - if qtnPhaseUuid `notElem` knowledgeModel.phaseUuids - then newQtnEvents ++ [toQuestionnairePhaseEvent uuid (Just kmPhaseUuid) newQtn.uuid newQtn.tenantUuid mCurrentUser now] - else newQtnEvents - -generateNewVersionUuid :: QuestionnaireVersion -> AppContextM QuestionnaireVersion -generateNewVersionUuid version = do - newVersionUuid <- liftIO generateUuid - return $ version {uuid = newVersionUuid} - -getNewDocumentTemplateIdAndFormatUuid :: Questionnaire -> String -> AppContextM (Maybe String, Maybe U.UUID) -getNewDocumentTemplateIdAndFormatUuid oldQtn newPkgId = do - case oldQtn.documentTemplateId of - Just id -> do - documentTemplate <- findDocumentTemplateById id - if isPkgAllowedByDocumentTemplate newPkgId documentTemplate - then return (Just id, oldQtn.formatUuid) - else return (Nothing, Nothing) - Nothing -> return (Nothing, Nothing) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationValidation.hs b/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationValidation.hs deleted file mode 100644 index 77fd9dbb5..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Migration/MigrationValidation.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Service.Questionnaire.Migration.MigrationValidation where - -import Control.Monad (unless) -import Control.Monad.Except (throwError) - -import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Localization.Messages.Public - -validateMigrationExistence oldQtnUuid = do - states <- findMigratorStatesByOldQuestionnaireUuid oldQtnUuid - unless (null states) (throwError . UserError $ _ERROR_VALIDATION__QTN_MIGRATION_UNIQUENESS) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireAudit.hs b/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireAudit.hs deleted file mode 100644 index 37f142379..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireAudit.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Service.Questionnaire.QuestionnaireAudit where - -import qualified Data.UUID as U - -import Shared.Audit.Service.Audit.AuditService -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () - -auditQuestionnaireListEvents :: U.UUID -> AppContextM () -auditQuestionnaireListEvents qtnUuid = logAudit "questionnaire" "listEvents" (U.toString qtnUuid) - -auditQuestionnaireDetailEvent :: U.UUID -> AppContextM () -auditQuestionnaireDetailEvent qtnUuid = logAudit "questionnaire" "detailEvent" (U.toString qtnUuid) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireMapper.hs b/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireMapper.hs deleted file mode 100644 index a51b096f5..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireMapper.hs +++ /dev/null @@ -1,371 +0,0 @@ -module Wizard.Service.Questionnaire.QuestionnaireMapper where - -import qualified Data.Map.Strict as M -import Data.Time -import qualified Data.UUID as U - -import Shared.DocumentTemplate.Api.Resource.DocumentTemplate.DocumentTemplateDTO -import Shared.DocumentTemplate.Constant.DocumentTemplate -import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate -import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplateFormatSimple -import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage -import qualified Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageMapper as SPM -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailWsDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireReportDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO -import Wizard.Api.Resource.User.UserDTO -import Wizard.Constant.Acl -import Wizard.Model.DocumentTemplate.DocumentTemplateState -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireCommentList -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireDetail -import Wizard.Model.Questionnaire.QuestionnaireDetailQuestionnaire -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireList -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireSimple -import Wizard.Model.Questionnaire.QuestionnaireState -import Wizard.Model.Questionnaire.QuestionnaireSuggestion -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import Wizard.Model.Report.Report -import Wizard.Model.Tenant.Config.TenantConfig -import Wizard.Model.User.User -import Wizard.Service.Acl.AclMapper -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper -import WizardLib.Public.Model.PersistentCommand.Questionnaire.CreateQuestionnaireCommand -import WizardLib.Public.Model.User.UserGroup - -toDTO :: Questionnaire -> KnowledgeModelPackage -> QuestionnaireState -> [QuestionnairePermDTO] -> QuestionnaireDTO -toDTO qtn kmPackage state permissions = - QuestionnaireDTO - { uuid = qtn.uuid - , name = qtn.name - , description = qtn.description - , visibility = qtn.visibility - , sharing = qtn.sharing - , state = state - , knowledgeModelPackage = SPM.toSimple kmPackage - , permissions = permissions - , isTemplate = qtn.isTemplate - , createdAt = qtn.createdAt - , updatedAt = qtn.updatedAt - } - -toDTO' :: QuestionnaireList -> QuestionnaireDTO -toDTO' qtn = - QuestionnaireDTO - { uuid = qtn.uuid - , name = qtn.name - , description = qtn.description - , visibility = qtn.visibility - , sharing = qtn.sharing - , state = qtn.state - , knowledgeModelPackage = qtn.knowledgeModelPackage - , permissions = qtn.permissions - , isTemplate = qtn.isTemplate - , createdAt = qtn.createdAt - , updatedAt = qtn.updatedAt - } - -toSimpleDTO :: Questionnaire -> KnowledgeModelPackage -> QuestionnaireState -> [QuestionnairePermDTO] -> QuestionnaireDTO -toSimpleDTO qtn kmPackage state permissions = - QuestionnaireDTO - { uuid = qtn.uuid - , name = qtn.name - , description = qtn.description - , visibility = qtn.visibility - , sharing = qtn.sharing - , state = state - , knowledgeModelPackage = SPM.toSimple kmPackage - , permissions = permissions - , isTemplate = qtn.isTemplate - , createdAt = qtn.createdAt - , updatedAt = qtn.updatedAt - } - -toDetailQuestionnaire :: Questionnaire -> Maybe U.UUID -> [QuestionnairePermDTO] -> Int -> Int -> QuestionnaireDetailQuestionnaire -toDetailQuestionnaire qtn migrationUuid permissions questionnaireActionsAvailable questionnaireImportersAvailable = - QuestionnaireDetailQuestionnaire - { uuid = qtn.uuid - , name = qtn.name - , visibility = qtn.visibility - , sharing = qtn.sharing - , knowledgeModelPackageId = qtn.knowledgeModelPackageId - , selectedQuestionTagUuids = qtn.selectedQuestionTagUuids - , isTemplate = qtn.isTemplate - , migrationUuid = migrationUuid - , permissions = permissions - , files = [] - , questionnaireActionsAvailable = questionnaireActionsAvailable - , questionnaireImportersAvailable = questionnaireImportersAvailable - } - -toDetailDTO :: QuestionnaireDetail -> QuestionnaireDetailDTO -toDetailDTO QuestionnaireDetail {..} = - QuestionnaireDetailDTO {..} - -toDetailQuestionnaireDTO :: QuestionnaireDetailQuestionnaire -> M.Map String (M.Map U.UUID Int) -> M.Map String (M.Map U.UUID Int) -> KnowledgeModel -> Maybe U.UUID -> M.Map String Reply -> M.Map String [U.UUID] -> QuestionnaireDetailQuestionnaireDTO -toDetailQuestionnaireDTO QuestionnaireDetailQuestionnaire {..} unresolvedCommentCounts resolvedCommentCounts knowledgeModel phaseUuid replies labels = - let fileCount = length files - in QuestionnaireDetailQuestionnaireDTO {..} - -toDetailWsDTO :: Questionnaire -> Maybe DocumentTemplateDTO -> Maybe DocumentTemplateFormatSimple -> [QuestionnairePermDTO] -> M.Map String [U.UUID] -> M.Map String (M.Map U.UUID Int) -> M.Map String (M.Map U.UUID Int) -> QuestionnaireDetailWsDTO -toDetailWsDTO qtn mTemplate mFormat qtnPerms labels unresolvedCommentCounts resolvedCommentCounts = - QuestionnaireDetailWsDTO - { name = qtn.name - , description = qtn.description - , visibility = qtn.visibility - , sharing = qtn.sharing - , projectTags = qtn.projectTags - , documentTemplateId = qtn.documentTemplateId - , documentTemplate = mTemplate - , formatUuid = qtn.formatUuid - , format = mFormat - , permissions = qtnPerms - , isTemplate = qtn.isTemplate - , labels = labels - , unresolvedCommentCounts = unresolvedCommentCounts - , resolvedCommentCounts = resolvedCommentCounts - } - -toContentDTO - :: QuestionnaireContent - -> M.Map String [QuestionnaireCommentThreadList] - -> [QuestionnaireEventList] - -> [QuestionnaireVersionList] - -> QuestionnaireContentDTO -toContentDTO qtnCtn threads events versions = - QuestionnaireContentDTO - { phaseUuid = qtnCtn.phaseUuid - , replies = qtnCtn.replies - , commentThreadsMap = threads - , labels = qtnCtn.labels - , events = events - , versions = versions - } - -toQuestionnaireReportDTO :: [Indication] -> QuestionnaireReportDTO -toQuestionnaireReportDTO indications = QuestionnaireReportDTO {indications = indications} - -toChangeDTO :: Questionnaire -> QuestionnaireShareChangeDTO -toChangeDTO qtn = - QuestionnaireShareChangeDTO - { visibility = qtn.visibility - , sharing = qtn.sharing - , permissions = fmap toQuestionnairePermChangeDTO qtn.permissions - } - -toUserQuestionnairePerm :: U.UUID -> U.UUID -> [String] -> U.UUID -> QuestionnairePerm -toUserQuestionnairePerm questionnaireUuid userUuid perms tenantUuid = - QuestionnairePerm - { questionnaireUuid = questionnaireUuid - , memberType = UserQuestionnairePermType - , memberUuid = userUuid - , perms = perms - , tenantUuid = tenantUuid - } - -toUserGroupQuestionnairePerm :: U.UUID -> U.UUID -> [String] -> U.UUID -> QuestionnairePerm -toUserGroupQuestionnairePerm questionnaireUuid userGroupUuid perms tenantUuid = - QuestionnairePerm - { questionnaireUuid = questionnaireUuid - , memberType = UserGroupQuestionnairePermType - , memberUuid = userGroupUuid - , perms = perms - , tenantUuid = tenantUuid - } - -toUserQuestionnairePermDTO :: QuestionnairePerm -> User -> QuestionnairePermDTO -toUserQuestionnairePermDTO qtnPerm user = - QuestionnairePermDTO - { questionnaireUuid = qtnPerm.questionnaireUuid - , member = toUserMemberDTO user - , perms = qtnPerm.perms - } - -toUserGroupQuestionnairePermDTO :: QuestionnairePerm -> UserGroup -> QuestionnairePermDTO -toUserGroupQuestionnairePermDTO qtnPerm userGroup = - QuestionnairePermDTO - { questionnaireUuid = qtnPerm.questionnaireUuid - , member = toUserGroupMemberDTO userGroup - , perms = qtnPerm.perms - } - -toQuestionnairePermChangeDTO :: QuestionnairePerm -> QuestionnairePermChangeDTO -toQuestionnairePermChangeDTO qtnPerm = - QuestionnairePermChangeDTO - { memberUuid = qtnPerm.memberUuid - , memberType = qtnPerm.memberType - , perms = qtnPerm.perms - } - -toSimple :: Questionnaire -> QuestionnaireSimple -toSimple qtn = QuestionnaireSimple {uuid = qtn.uuid, name = qtn.name} - -toSuggestion :: Questionnaire -> QuestionnaireSuggestion -toSuggestion qtn = QuestionnaireSuggestion {uuid = qtn.uuid, name = qtn.name, description = qtn.description} - -toCreateFromTemplateDTO :: Questionnaire -> QuestionnaireCreateFromTemplateDTO -toCreateFromTemplateDTO qtn = - QuestionnaireCreateFromTemplateDTO - { name = qtn.name - , questionnaireUuid = qtn.uuid - } - -toQuestionnaireDetailTemplateState :: Maybe DocumentTemplate -> Maybe DocumentTemplateState -toQuestionnaireDetailTemplateState = - fmap - ( \tml -> - if tml.metamodelVersion /= documentTemplateMetamodelVersion - then UnsupportedMetamodelVersionDocumentTemplateState - else DefaultDocumentTemplateState - ) - -fromShareChangeDTO :: Questionnaire -> QuestionnaireShareChangeDTO -> QuestionnaireVisibility -> QuestionnaireSharing -> UTCTime -> Questionnaire -fromShareChangeDTO qtn dto visibility sharing now = - Questionnaire - { uuid = qtn.uuid - , name = qtn.name - , description = qtn.description - , visibility = visibility - , sharing = sharing - , knowledgeModelPackageId = qtn.knowledgeModelPackageId - , selectedQuestionTagUuids = qtn.selectedQuestionTagUuids - , projectTags = qtn.projectTags - , documentTemplateId = qtn.documentTemplateId - , formatUuid = qtn.formatUuid - , creatorUuid = qtn.creatorUuid - , permissions = fmap (fromQuestionnairePermChangeDTO qtn.uuid qtn.tenantUuid) dto.permissions - , isTemplate = qtn.isTemplate - , squashed = qtn.squashed - , tenantUuid = qtn.tenantUuid - , createdAt = qtn.createdAt - , updatedAt = now - } - -fromSettingsChangeDTO :: Questionnaire -> QuestionnaireSettingsChangeDTO -> UserDTO -> UTCTime -> Questionnaire -fromSettingsChangeDTO qtn dto currentUser now = - Questionnaire - { uuid = qtn.uuid - , name = dto.name - , description = dto.description - , visibility = qtn.visibility - , sharing = qtn.sharing - , knowledgeModelPackageId = qtn.knowledgeModelPackageId - , selectedQuestionTagUuids = qtn.selectedQuestionTagUuids - , projectTags = dto.projectTags - , documentTemplateId = dto.documentTemplateId - , formatUuid = dto.formatUuid - , creatorUuid = qtn.creatorUuid - , permissions = qtn.permissions - , isTemplate = - if _QTN_TML_PERM `elem` currentUser.permissions - then dto.isTemplate - else qtn.isTemplate - , squashed = qtn.squashed - , tenantUuid = qtn.tenantUuid - , createdAt = qtn.createdAt - , updatedAt = now - } - -fromQuestionnaireCreateDTO - :: QuestionnaireCreateDTO - -> U.UUID - -> QuestionnaireVisibility - -> QuestionnaireSharing - -> Maybe U.UUID - -> String - -> U.UUID - -> Maybe U.UUID - -> U.UUID - -> UTCTime - -> (Questionnaire, [QuestionnaireEvent]) -fromQuestionnaireCreateDTO dto qtnUuid visibility sharing mCurrentUserUuid pkgId phaseEventUuid mPhase tenantUuid now = - ( Questionnaire - { uuid = qtnUuid - , name = dto.name - , description = Nothing - , visibility = visibility - , sharing = sharing - , knowledgeModelPackageId = pkgId - , selectedQuestionTagUuids = dto.questionTagUuids - , projectTags = [] - , documentTemplateId = dto.documentTemplateId - , formatUuid = dto.formatUuid - , creatorUuid = mCurrentUserUuid - , permissions = - case mCurrentUserUuid of - Just currentUserUuid -> [toUserQuestionnairePerm qtnUuid currentUserUuid ownerPermissions tenantUuid] - Nothing -> [] - , isTemplate = False - , squashed = True - , tenantUuid = tenantUuid - , createdAt = now - , updatedAt = now - } - , case mPhase of - Just phase -> - [ SetPhaseEvent' $ - SetPhaseEvent - { uuid = phaseEventUuid - , phaseUuid = Just phase - , questionnaireUuid = qtnUuid - , tenantUuid = tenantUuid - , createdBy = mCurrentUserUuid - , createdAt = now - } - ] - Nothing -> [] - ) - -fromContentChangeDTO :: Questionnaire -> [QuestionnaireEvent] -> QuestionnaireContentChangeDTO -> Maybe UserDTO -> UTCTime -> (Questionnaire, [QuestionnaireEvent]) -fromContentChangeDTO qtn events dto mCurrentUser now = - let newTodoEvents = fmap (\e -> fromEventChangeDTO e qtn.uuid qtn.tenantUuid (fmap (.uuid) mCurrentUser) now) dto.events - updatedEvents = events ++ newTodoEvents - in (qtn {updatedAt = now}, updatedEvents) - -fromQuestionnairePermChangeDTO :: U.UUID -> U.UUID -> QuestionnairePermChangeDTO -> QuestionnairePerm -fromQuestionnairePermChangeDTO qtnUuid tenantUuid dto = - QuestionnairePerm - { questionnaireUuid = qtnUuid - , memberType = dto.memberType - , memberUuid = dto.memberUuid - , perms = dto.perms - , tenantUuid = tenantUuid - } - -fromCreateQuestionnaireCommand :: CreateQuestionnaireCommand -> U.UUID -> [QuestionnairePerm] -> TenantConfigQuestionnaire -> U.UUID -> UTCTime -> Questionnaire -fromCreateQuestionnaireCommand command uuid permissions tcQuestionnaire createdBy now = do - Questionnaire - { uuid = uuid - , name = command.name - , description = Nothing - , visibility = tcQuestionnaire.questionnaireVisibility.defaultValue - , sharing = tcQuestionnaire.questionnaireSharing.defaultValue - , knowledgeModelPackageId = command.knowledgeModelPackageId - , selectedQuestionTagUuids = [] - , projectTags = [] - , documentTemplateId = command.documentTemplateId - , formatUuid = Nothing - , creatorUuid = Just createdBy - , permissions = permissions - , isTemplate = False - , squashed = True - , tenantUuid = tcQuestionnaire.tenantUuid - , createdAt = now - , updatedAt = now - } diff --git a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireService.hs b/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireService.hs deleted file mode 100644 index 9f590aace..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireService.hs +++ /dev/null @@ -1,454 +0,0 @@ -module Wizard.Service.Questionnaire.QuestionnaireService where - -import Control.Monad (void, when) -import Control.Monad.Except (catchError, throwError) -import Control.Monad.Reader (asks, liftIO) -import Data.Foldable (traverse_) -import qualified Data.List as L -import qualified Data.Map.Strict as M -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Localization.Messages.Public -import Shared.Common.Model.Common.Lens -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Shared.Common.Model.Error.Error -import Shared.Common.Util.List -import Shared.Common.Util.Logger -import Shared.Common.Util.Uuid -import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO -import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateFormatDAO -import qualified Shared.DocumentTemplate.Service.DocumentTemplate.DocumentTemplateMapper as STM -import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO -import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Shared.KnowledgeModel.Model.KnowledgeModel.Package.KnowledgeModelPackage -import Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageUtil -import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleDTO -import Wizard.Api.Resource.Questionnaire.Event.QuestionnaireEventDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO -import Wizard.Api.Resource.User.UserDTO -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.User.UserDAO -import Wizard.Localization.Messages.Internal -import Wizard.Model.Context.AclContext -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireAclHelpers -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireDetail -import Wizard.Model.Questionnaire.QuestionnaireDetailPreview -import Wizard.Model.Questionnaire.QuestionnaireDetailQuestionnaire -import Wizard.Model.Questionnaire.QuestionnaireDetailSettings -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireFile -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Tenant.Config.TenantConfig -import Wizard.Service.KnowledgeModel.KnowledgeModelService -import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService -import Wizard.Service.Mail.Mailer -import Wizard.Service.Questionnaire.Collaboration.CollaborationService -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentService -import Wizard.Service.Questionnaire.Compiler.CompilerService -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper -import Wizard.Service.Questionnaire.File.QuestionnaireFileService -import Wizard.Service.Questionnaire.QuestionnaireAcl -import Wizard.Service.Questionnaire.QuestionnaireAudit -import Wizard.Service.Questionnaire.QuestionnaireMapper -import Wizard.Service.Questionnaire.QuestionnaireUtil -import Wizard.Service.Questionnaire.QuestionnaireValidation -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionService -import Wizard.Service.Tenant.Config.ConfigService -import Wizard.Service.Tenant.Limit.LimitService -import WizardLib.Public.Model.PersistentCommand.Questionnaire.CreateQuestionnaireCommand - -getQuestionnairesForCurrentUserPageDto - :: Maybe String - -> Maybe Bool - -> Maybe Bool - -> Maybe [String] - -> Maybe String - -> Maybe [String] - -> Maybe String - -> Maybe [String] - -> Maybe String - -> Pageable - -> [Sort] - -> AppContextM (Page QuestionnaireDTO) -getQuestionnairesForCurrentUserPageDto mQuery mIsTemplate mIsMigrating mProjectTags mProjectTagsOp mUserUuids mUserUuidsOp mKnowledgeModelPackageIds mKnowledgeModelPackageIdsOp pageable sort = do - checkPermission _QTN_PERM - currentUser <- getCurrentUser - qtnPage <- - findQuestionnairesForCurrentUserPage - mQuery - mIsTemplate - mIsMigrating - mProjectTags - mProjectTagsOp - mUserUuids - mUserUuidsOp - mKnowledgeModelPackageIds - mKnowledgeModelPackageIdsOp - pageable - sort - return . fmap toDTO' $ qtnPage - -createQuestionnaire :: QuestionnaireCreateDTO -> AppContextM QuestionnaireDTO -createQuestionnaire questionnaireCreateDto = - liftIO generateUuid >>= createQuestionnaireWithGivenUuid questionnaireCreateDto - -createQuestionnaireWithGivenUuid :: QuestionnaireCreateDTO -> U.UUID -> AppContextM QuestionnaireDTO -createQuestionnaireWithGivenUuid reqDto qtnUuid = - runInTransaction $ do - checkQuestionnaireLimit - checkCreatePermissionToQtn - pkgId <- resolvePackageId reqDto.knowledgeModelPackageId - pkg <- findPackageById pkgId - qtnState <- getQuestionnaireState qtnUuid pkgId - now <- liftIO getCurrentTime - tenantUuid <- asks currentTenantUuid - visibility <- extractVisibility reqDto - sharing <- extractSharing reqDto - mCurrentUser <- asks currentUser - knowledgeModel <- compileKnowledgeModel [] (Just pkgId) reqDto.questionTagUuids - phaseEventUuid <- liftIO generateUuid - let (qtn, qtnEvents) = - fromQuestionnaireCreateDTO - reqDto - qtnUuid - visibility - sharing - (fmap (.uuid) mCurrentUser) - pkgId - phaseEventUuid - (headSafe knowledgeModel.phaseUuids) - tenantUuid - now - insertQuestionnaire qtn - insertQuestionnaireEvents qtnEvents - permissionDtos <- traverse enhanceQuestionnairePerm qtn.permissions - return $ toSimpleDTO qtn pkg qtnState permissionDtos - -createQuestionnaireFromTemplate :: QuestionnaireCreateFromTemplateDTO -> AppContextM QuestionnaireDTO -createQuestionnaireFromTemplate reqDto = - runInTransaction $ do - checkQuestionnaireLimit - originQtn <- findQuestionnaireByUuid reqDto.questionnaireUuid - checkCreateFromTemplatePermissionToQtn originQtn.isTemplate - pkg <- findPackageById originQtn.knowledgeModelPackageId - newQtnUuid <- liftIO generateUuid - currentUser <- getCurrentUser - now <- liftIO getCurrentTime - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - originQtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid reqDto.questionnaireUuid - let newVisibility = tcQuestionnaire.questionnaireVisibility.defaultValue - let newSharing = tcQuestionnaire.questionnaireSharing.defaultValue - let newPermissions = [toUserQuestionnairePerm newQtnUuid currentUser.uuid ownerPermissions tcQuestionnaire.tenantUuid] - let newQtn = - originQtn - { uuid = newQtnUuid - , name = reqDto.name - , description = Nothing - , sharing = newSharing - , visibility = newVisibility - , permissions = newPermissions - , isTemplate = False - , creatorUuid = Just $ currentUser.uuid - , createdAt = now - , updatedAt = now - } - :: Questionnaire - insertQuestionnaire newQtn - clonedFiles <- cloneQuestionnaireFiles originQtn.uuid newQtn.uuid - newQtnEventsWithOldEventUuid <- cloneQuestionnaireEventsWithOldEventUuid originQtnEvents - let newQtnEvents = fmap snd newQtnEventsWithOldEventUuid - let newQtnEventsWithReplacedFiles = replaceQuestionnaireEventsWithNewFiles clonedFiles newQtnEvents - insertQuestionnaireEvents (fmap (toEvent newQtnUuid newQtn.tenantUuid) newQtnEventsWithReplacedFiles) - duplicateCommentThreads reqDto.questionnaireUuid newQtnUuid - cloneQuestionnaireVersions originQtn.uuid newQtn.uuid newQtnEventsWithOldEventUuid - state <- getQuestionnaireState newQtnUuid pkg.pId - permissionDtos <- traverse enhanceQuestionnairePerm newQtn.permissions - return $ toSimpleDTO newQtn pkg state permissionDtos - -cloneQuestionnaire :: U.UUID -> AppContextM QuestionnaireDTO -cloneQuestionnaire cloneUuid = - runInTransaction $ do - checkQuestionnaireLimit - originQtn <- findQuestionnaireByUuid cloneUuid - checkClonePermissionToQtn originQtn.visibility originQtn.sharing originQtn.permissions - pkg <- findPackageById originQtn.knowledgeModelPackageId - newQtnUuid <- liftIO generateUuid - currentUser <- getCurrentUser - now <- liftIO getCurrentTime - originQtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid originQtn.uuid - let ownerPerm = toUserQuestionnairePerm newQtnUuid currentUser.uuid ownerPermissions originQtn.tenantUuid - let newPermissions = ownerPerm : removeUserPermission currentUser.uuid originQtn.permissions - let newDuplicatedPermissions = fmap (\permission -> permission {questionnaireUuid = newQtnUuid} :: QuestionnairePerm) newPermissions - let newQtn = - originQtn - { uuid = newQtnUuid - , name = "Copy of " ++ originQtn.name - , permissions = newDuplicatedPermissions - , updatedAt = now - } - :: Questionnaire - insertQuestionnaire newQtn - clonedFiles <- cloneQuestionnaireFiles originQtn.uuid newQtn.uuid - newQtnEventsWithOldEventUuid <- cloneQuestionnaireEventsWithOldEventUuid originQtnEvents - let newQtnEvents = fmap snd newQtnEventsWithOldEventUuid - let newQtnEventsWithReplacedFiles = replaceQuestionnaireEventsWithNewFiles clonedFiles newQtnEvents - insertQuestionnaireEvents (fmap (toEvent newQtnUuid newQtn.tenantUuid) newQtnEventsWithReplacedFiles) - cloneQuestionnaireVersions originQtn.uuid newQtn.uuid newQtnEventsWithOldEventUuid - duplicateCommentThreads cloneUuid newQtnUuid - state <- getQuestionnaireState newQtnUuid pkg.pId - permissionDtos <- traverse enhanceQuestionnairePerm newQtn.permissions - return $ toSimpleDTO newQtn pkg state permissionDtos - -createQuestionnairesFromCommands :: [CreateQuestionnaireCommand] -> AppContextM () -createQuestionnairesFromCommands = runInTransaction . traverse_ create - where - create :: CreateQuestionnaireCommand -> AppContextM () - create command = do - uuid <- liftIO generateUuid - currentUser <- getCurrentUser - now <- liftIO getCurrentTime - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - users <- findUsersByEmails command.emails - let permissions = fmap (createPermission uuid) users - let questionnaire = fromCreateQuestionnaireCommand command uuid permissions tcQuestionnaire currentUser.uuid now - insertQuestionnaire questionnaire - return () - createPermission :: U.UUID -> User -> QuestionnairePerm - createPermission questionnaireUuid user = toUserQuestionnairePerm questionnaireUuid user.uuid ownerPermissions user.tenantUuid - -getQuestionnaireById :: U.UUID -> AppContextM QuestionnaireDTO -getQuestionnaireById qtnUuid = do - mQtn <- getQuestionnaireById' qtnUuid - case mQtn of - Just qtn -> return qtn - Nothing -> throwError $ NotExistsError $ _ERROR_DATABASE__ENTITY_NOT_FOUND "questionnaire" [("uuid", U.toString qtnUuid)] - -getQuestionnaireById' :: U.UUID -> AppContextM (Maybe QuestionnaireDTO) -getQuestionnaireById' qtnUuid = do - mQtn <- findQuestionnaireByUuid' qtnUuid - case mQtn of - Just qtn -> do - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - package <- getPackageById qtn.knowledgeModelPackageId - state <- getQuestionnaireState qtnUuid package.pId - permissionDtos <- traverse enhanceQuestionnairePerm qtn.permissions - return . Just $ toDTO qtn package state permissionDtos - Nothing -> return Nothing - -getQuestionnaireDetailByUuid :: U.UUID -> AppContextM QuestionnaireDetailDTO -getQuestionnaireDetailByUuid qtnUuid = do - qtn <- findQuestionnaireDetail qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - return $ toDetailDTO qtn - -getQuestionnaireDetailQuestionnaireByUuid :: U.UUID -> AppContextM QuestionnaireDetailQuestionnaireDTO -getQuestionnaireDetailQuestionnaireByUuid qtnUuid = do - qtn <- findQuestionnaireDetailQuestionnaire qtnUuid - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - editor <- catchError (hasEditPermissionToQtn qtn.visibility qtn.sharing qtn.permissions) (\_ -> return False) - commenter <- catchError (hasCommentPermissionToQtn qtn.visibility qtn.sharing qtn.permissions) (\_ -> return False) - unresolvedCommentCounts <- - if commenter - then findQuestionnaireCommentThreadsSimple qtnUuid False editor - else return M.empty - resolvedCommentCounts <- - if commenter - then findQuestionnaireCommentThreadsSimple qtnUuid True editor - else return M.empty - knowledgeModel <- compileKnowledgeModel [] (Just qtn.knowledgeModelPackageId) qtn.selectedQuestionTagUuids - let qtnCtn = compileQuestionnaire qtnEvents - let labels = - if editor - then qtnCtn.labels - else M.empty - return $ toDetailQuestionnaireDTO qtn unresolvedCommentCounts resolvedCommentCounts knowledgeModel qtnCtn.phaseUuid qtnCtn.replies labels - -getQuestionnaireDetailPreviewById :: U.UUID -> AppContextM QuestionnaireDetailPreview -getQuestionnaireDetailPreviewById qtnUuid = do - qtn <- findQuestionnaireDetailPreview qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - return qtn - -getQuestionnaireDetailSettingsById :: U.UUID -> AppContextM QuestionnaireDetailSettings -getQuestionnaireDetailSettingsById qtnUuid = do - qtn <- findQuestionnaireDetailSettings qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - knowledgeModel <- compileKnowledgeModel [] (Just qtn.knowledgeModelPackage.pId) qtn.selectedQuestionTagUuids - return $ qtn {knowledgeModelTags = M.elems knowledgeModel.entities.tags} - -getQuestionnaireEventsPage :: U.UUID -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireEventList) -getQuestionnaireEventsPage qtnUuid pageable sort = do - qtn <- findQuestionnaireByUuid qtnUuid - events <- findQuestionnaireEventsPage qtnUuid pageable sort - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - auditQuestionnaireListEvents qtnUuid - return events - -getQuestionnaireEventForQtnUuid :: U.UUID -> U.UUID -> AppContextM QuestionnaireEventDTO -getQuestionnaireEventForQtnUuid qtnUuid eventUuid = do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - auditQuestionnaireDetailEvent qtnUuid - event <- findQuestionnaireEventByUuid eventUuid - mUser <- - case getCreatedBy event of - Just userUuid -> findUserByUuid' userUuid - Nothing -> return Nothing - return $ toEventDTO event mUser - -modifyQuestionnaireShare :: U.UUID -> QuestionnaireShareChangeDTO -> AppContextM QuestionnaireShareChangeDTO -modifyQuestionnaireShare qtnUuid reqDto = - runInTransaction $ do - checkPermission _QTN_PERM - qtn <- findQuestionnaireByUuid qtnUuid - skipIfAssigningProject qtn (checkOwnerPermissionToQtn qtn.visibility qtn.permissions) - now <- liftIO getCurrentTime - qVisibility <- extractVisibility reqDto - qSharing <- extractSharing reqDto - let updatedQtn = fromShareChangeDTO qtn reqDto qVisibility qSharing now - updateQuestionnaireByUuid updatedQtn - updatePermsForOnlineUsers qtnUuid updatedQtn.visibility updatedQtn.sharing updatedQtn.permissions - permissionDtos <- traverse enhanceQuestionnairePerm updatedQtn.permissions - skipIfAssigningProject - qtn - ( catchError - (sendQuestionnaireInvitationMail qtn updatedQtn) - (\errMessage -> throwError $ GeneralServerError _ERROR_SERVICE_QTN__INVITATION_EMAIL_NOT_SENT) - ) - mTemplate <- - case updatedQtn.documentTemplateId of - Just tId -> do - tml <- findDocumentTemplateById tId - formats <- findDocumentTemplateFormats tId - return . Just $ STM.toDTO tml formats - _ -> return Nothing - mFormat <- - case (updatedQtn.documentTemplateId, updatedQtn.formatUuid) of - (Just dtId, Just formatUuid) -> do - format <- findDocumentTemplateFormatByDocumentTemplateIdAndUuid dtId formatUuid - return $ Just format - _ -> return Nothing - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtnUuid - let qtnCtn = compileQuestionnaire qtnEvents - unresolvedCommentCounts <- findQuestionnaireCommentThreadsSimple qtnUuid False True - resolvedCommentCounts <- findQuestionnaireCommentThreadsSimple qtnUuid True True - let restWsDto = toDetailWsDTO updatedQtn mTemplate mFormat permissionDtos qtnCtn.labels unresolvedCommentCounts resolvedCommentCounts - setQuestionnaire qtnUuid restWsDto - return reqDto - -modifyQuestionnaireSettings :: U.UUID -> QuestionnaireSettingsChangeDTO -> AppContextM QuestionnaireSettingsChangeDTO -modifyQuestionnaireSettings qtnUuid reqDto = - runInTransaction $ do - checkPermission _QTN_PERM - validateQuestionnaireSettingsChangeDTO reqDto - qtn <- findQuestionnaireByUuid qtnUuid - skipIfAssigningProject qtn (checkOwnerPermissionToQtn qtn.visibility qtn.permissions) - currentUser <- getCurrentUser - now <- liftIO getCurrentTime - let updatedQtn = fromSettingsChangeDTO qtn reqDto currentUser now - updateQuestionnaireByUuid updatedQtn - permissionDtos <- traverse enhanceQuestionnairePerm updatedQtn.permissions - deleteTemporalDocumentsByQuestionnaireUuid qtn.uuid - mTemplate <- - case updatedQtn.documentTemplateId of - Just tId -> do - tml <- findDocumentTemplateById tId - formats <- findDocumentTemplateFormats tId - return . Just $ STM.toDTO tml formats - _ -> return Nothing - mFormat <- - case (updatedQtn.documentTemplateId, updatedQtn.formatUuid) of - (Just dtId, Just formatUuid) -> do - format <- findDocumentTemplateFormatByDocumentTemplateIdAndUuid dtId formatUuid - return $ Just format - _ -> return Nothing - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtnUuid - let qtnCtn = compileQuestionnaire qtnEvents - unresolvedCommentCounts <- findQuestionnaireCommentThreadsSimple qtnUuid False True - resolvedCommentCounts <- findQuestionnaireCommentThreadsSimple qtnUuid True True - let restWsDto = toDetailWsDTO updatedQtn mTemplate mFormat permissionDtos qtnCtn.labels unresolvedCommentCounts resolvedCommentCounts - setQuestionnaire qtnUuid restWsDto - return reqDto - -deleteQuestionnaire :: U.UUID -> Bool -> AppContextM () -deleteQuestionnaire qtnUuid shouldValidatePermission = - runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - validateQuestionnaireDeletion qtnUuid - when shouldValidatePermission (checkOwnerPermissionToQtn qtn.visibility qtn.permissions) - deleteQuestionnaireByUuid qtnUuid - void $ logOutOnlineUsersWhenQtnDramaticallyChanged qtnUuid - -modifyContent :: U.UUID -> QuestionnaireContentChangeDTO -> AppContextM QuestionnaireContentChangeDTO -modifyContent qtnUuid reqDto = - runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - checkEditPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - mCurrentUser <- asks currentUser - now <- liftIO getCurrentTime - qtnEvents <- findQuestionnaireEventsByQuestionnaireUuid qtnUuid - let (updatedQtn, updatedQtnEvents) = fromContentChangeDTO qtn qtnEvents reqDto mCurrentUser now - syncQuestionnaireEventsWithDb qtnEvents updatedQtnEvents - updateQuestionnaireSquashedAndUpdatedAtByUuid qtnUuid False now - return reqDto - -cleanQuestionnaires :: AppContextM () -cleanQuestionnaires = - runInTransaction $ do - qtns <- findQuestionnaireWithZeroAcl - traverse_ - ( \qtn -> do - logInfoI _CMP_SERVICE (f' "Clean questionnaire with empty ACL (qtnUuid: '%s')" [U.toString qtn.uuid]) - deleteQuestionnaire qtn.uuid False - ) - qtns - -cloneQuestionnaireEvents :: [QuestionnaireEventList] -> AppContextM [QuestionnaireEventList] -cloneQuestionnaireEvents oldEvents = do - newEvents <- cloneQuestionnaireEventsWithOldEventUuid oldEvents - return $ fmap snd newEvents - -cloneQuestionnaireEventsWithOldEventUuid :: [QuestionnaireEventList] -> AppContextM [(U.UUID, QuestionnaireEventList)] -cloneQuestionnaireEventsWithOldEventUuid = - traverse - ( \event -> do - newEventUuid <- liftIO generateUuid - return (getUuid event, setUuid event newEventUuid) - ) - -replaceQuestionnaireEventsWithNewFiles :: [(QuestionnaireFile, QuestionnaireFile)] -> [QuestionnaireEventList] -> [QuestionnaireEventList] -replaceQuestionnaireEventsWithNewFiles clonedFiles qtnEvents = - let findFile :: U.UUID -> Maybe (QuestionnaireFile, QuestionnaireFile) - findFile fileUuid = L.find (\(oldFile, newFile) -> oldFile.uuid == fileUuid) clonedFiles - replaceEvent :: QuestionnaireEventList -> QuestionnaireEventList - replaceEvent (SetReplyEventList' event) = - let value' = - case event.value of - r@FileReply {..} -> - case findFile r.fValue of - Just (oldFile, newFile) -> r {fValue = newFile.uuid} - _ -> r - r -> r - in SetReplyEventList' (event {value = value'}) - replaceEvent event' = event' - in fmap replaceEvent qtnEvents diff --git a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireUtil.hs b/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireUtil.hs deleted file mode 100644 index 0b9e58c42..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireUtil.hs +++ /dev/null @@ -1,60 +0,0 @@ -module Wizard.Service.Questionnaire.QuestionnaireUtil where - -import Control.Monad (when) -import qualified Data.UUID as U - -import Wizard.Api.Resource.Questionnaire.QuestionnairePermDTO -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.User.UserDAO -import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireEventLenses () -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireState -import Wizard.Model.Tenant.Config.TenantConfig -import Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageService -import Wizard.Service.Questionnaire.QuestionnaireMapper -import Wizard.Service.Tenant.Config.ConfigService -import WizardLib.Public.Database.DAO.User.UserGroupDAO - -extractVisibility dto = do - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - if tcQuestionnaire.questionnaireVisibility.enabled - then return dto.visibility - else return $ tcQuestionnaire.questionnaireVisibility.defaultValue - -extractSharing dto = do - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - if tcQuestionnaire.questionnaireSharing.enabled - then return dto.sharing - else return $ tcQuestionnaire.questionnaireSharing.defaultValue - -enhanceQuestionnairePerm :: QuestionnairePerm -> AppContextM QuestionnairePermDTO -enhanceQuestionnairePerm qtnPerm = - case qtnPerm.memberType of - UserQuestionnairePermType -> do - user <- findUserByUuid qtnPerm.memberUuid - return $ toUserQuestionnairePermDTO qtnPerm user - UserGroupQuestionnairePermType -> do - userGroup <- findUserGroupByUuid qtnPerm.memberUuid - return $ toUserGroupQuestionnairePermDTO qtnPerm userGroup - -getQuestionnaireState :: U.UUID -> String -> AppContextM QuestionnaireState -getQuestionnaireState qtnUuid pkgId = do - mMs <- findMigratorStateByNewQuestionnaireUuid' qtnUuid - case mMs of - Just _ -> return QSMigrating - Nothing -> do - pkgs <- getNewerPackages pkgId True - if null pkgs - then return QSDefault - else return QSOutdated - -skipIfAssigningProject :: Questionnaire -> AppContextM () -> AppContextM () -skipIfAssigningProject qtn action = do - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - let questionnaireSharingEnabled = tcQuestionnaire.questionnaireSharing.enabled - let questionnaireSharingAnonymousEnabled = tcQuestionnaire.questionnaireSharing.anonymousEnabled - when - (not (questionnaireSharingEnabled && questionnaireSharingAnonymousEnabled) || (not . null $ qtn.permissions)) - action diff --git a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireValidation.hs b/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireValidation.hs deleted file mode 100644 index 4c7d8afc4..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/QuestionnaireValidation.hs +++ /dev/null @@ -1,39 +0,0 @@ -module Wizard.Service.Questionnaire.QuestionnaireValidation where - -import Control.Monad.Except (throwError) -import Data.Foldable (forM_, traverse_) -import qualified Data.Map.Strict as M -import qualified Data.UUID as U -import Text.Regex.TDFA - -import Shared.Common.Localization.Messages.Public -import Shared.Common.Model.Error.Error -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Localization.Messages.Public -import Wizard.Model.Context.AppContext - -validateQuestionnaireSettingsChangeDTO :: QuestionnaireSettingsChangeDTO -> AppContextM () -validateQuestionnaireSettingsChangeDTO reqDto = validateQuestionnaireTags reqDto.projectTags - -validateQuestionnaireDeletion :: U.UUID -> AppContextM () -validateQuestionnaireDeletion = validateUsageByQtnMigration - -validateUsageByQtnMigration :: U.UUID -> AppContextM () -validateUsageByQtnMigration qtnUuid = do - result <- findMigratorStatesByOldQuestionnaireUuid qtnUuid - case result of - [] -> return () - _ -> throwError . UserError $ _ERROR_SERVICE_QTN__QTN_CANT_BE_DELETED_BECAUSE_IT_IS_USED_IN_MIGRATION - -validateQuestionnaireTags :: [String] -> AppContextM () -validateQuestionnaireTags = traverse_ validateQuestionnaireTag - -validateQuestionnaireTag :: String -> AppContextM () -validateQuestionnaireTag tag = forM_ (isValidProjectTag tag) throwError - -isValidProjectTag :: String -> Maybe AppError -isValidProjectTag tag = - if tag =~ "^[^,]+$" - then Nothing - else Just $ ValidationError [] (M.singleton "tags" [_ERROR_VALIDATION__FORBIDDEN_CHARACTERS tag]) diff --git a/wizard-server/src/Wizard/Service/Questionnaire/User/QuestionnaireUserService.hs b/wizard-server/src/Wizard/Service/Questionnaire/User/QuestionnaireUserService.hs deleted file mode 100644 index 2658e652d..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/User/QuestionnaireUserService.hs +++ /dev/null @@ -1,29 +0,0 @@ -module Wizard.Service.Questionnaire.User.QuestionnaireUserService where - -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireUserDAO -import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.QuestionnaireAcl -import Wizard.Service.User.UserMapper -import Wizard.Service.User.UserService -import WizardLib.Public.Model.User.UserSuggestion - -getQuestionnaireUserSuggestionsPage :: U.UUID -> Maybe String -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page UserSuggestion) -getQuestionnaireUserSuggestionsPage qtnUuid mQuery mEditor pageable sort = do - qtn <- findQuestionnaireByUuid qtnUuid - checkCommentPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - if qtn.visibility == VisibleCommentQuestionnaire || qtn.visibility == VisibleEditQuestionnaire || qtn.sharing == AnyoneWithLinkCommentQuestionnaire || qtn.sharing == AnyoneWithLinkEditQuestionnaire - then getUserSuggestionsPage mQuery Nothing Nothing pageable sort - else do - let perm = - case mEditor of - Just True -> "EDIT" - _ -> "COMMENT" - suggestionPage <- findQuestionnaireUserSuggestionsPage qtnUuid perm mQuery pageable sort - return . fmap toSuggestion $ suggestionPage diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionService.hs b/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionService.hs deleted file mode 100644 index cbff99257..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionService.hs +++ /dev/null @@ -1,141 +0,0 @@ -module Wizard.Service.Questionnaire.Version.QuestionnaireVersionService where - -import Control.Monad (void, when) -import Control.Monad.Except (catchError) -import Control.Monad.Reader (asks, liftIO) -import qualified Data.List as L -import qualified Data.Map.Strict as M -import qualified Data.Set as S -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Lens -import Shared.Common.Util.List -import Shared.Common.Util.Uuid -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionRevertDTO -import Wizard.Api.Resource.User.UserDTO -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireEventListLenses () -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList -import Wizard.Service.Questionnaire.Collaboration.CollaborationService -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentService -import Wizard.Service.Questionnaire.Compiler.CompilerService -import Wizard.Service.Questionnaire.QuestionnaireAcl -import Wizard.Service.Questionnaire.QuestionnaireMapper -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionMapper -import Wizard.Service.Questionnaire.Version.QuestionnaireVersionValidation -import Wizard.Service.User.UserService - -getVersions :: U.UUID -> AppContextM [QuestionnaireVersionList] -getVersions qtnUuid = do - qtn <- findQuestionnaireByUuid qtnUuid - checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - findQuestionnaireVersionListByQuestionnaireUuidAndCreatedAt qtnUuid Nothing - -createVersion :: U.UUID -> QuestionnaireVersionChangeDTO -> AppContextM QuestionnaireVersionList -createVersion qtnUuid reqDto = - runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - checkOwnerPermissionToQtn qtn.visibility qtn.permissions - validateQuestionnaireVersionCreate qtnUuid reqDto - uuid <- liftIO generateUuid - tenantUuid <- asks currentTenantUuid - currentUser <- getCurrentUser - now <- liftIO getCurrentTime - let version = fromVersionChangeDTO reqDto uuid qtnUuid tenantUuid currentUser.uuid now - insertQuestionnaireVersion version - return $ toVersionList version (Just currentUser) - -cloneQuestionnaireVersions :: U.UUID -> U.UUID -> [(U.UUID, QuestionnaireEventList)] -> AppContextM [(QuestionnaireVersion, QuestionnaireVersion)] -cloneQuestionnaireVersions oldQtnUuid newQtnUuid newQtnEventsWithOldEventUuid = do - runInTransaction $ do - oldVersions <- findQuestionnaireVersionsByQuestionnaireUuid oldQtnUuid - traverse - ( \oldVersion -> do - newVersionUuid <- liftIO generateUuid - let newEvenUuid = - case L.find (\(oldEventUuid, newEvent) -> oldVersion.eventUuid == oldEventUuid) newQtnEventsWithOldEventUuid of - Just (_, newEvent) -> getUuid newEvent - Nothing -> oldVersion.eventUuid - let newVersion = oldVersion {uuid = newVersionUuid, questionnaireUuid = newQtnUuid, eventUuid = newEvenUuid} - insertQuestionnaireVersion newVersion - return (oldVersion, newVersion) - ) - oldVersions - -modifyVersion :: U.UUID -> U.UUID -> QuestionnaireVersionChangeDTO -> AppContextM QuestionnaireVersionList -modifyVersion qtnUuid versionUuid reqDto = - runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - checkOwnerPermissionToQtn qtn.visibility qtn.permissions - validateQuestionnaireVersionUpdate reqDto - now <- liftIO getCurrentTime - version <- findQuestionnaireVersionByUuid versionUuid - let updatedVersion = fromVersionChangeDTO' version reqDto now - updateQuestionnaireVersionByUuid updatedVersion - createdBy <- - case version.createdBy of - Just vCreatedBy -> do - user <- getUserById vCreatedBy - return . Just $ user - Nothing -> return Nothing - return $ toVersionList updatedVersion createdBy - -deleteVersion :: U.UUID -> U.UUID -> AppContextM () -deleteVersion qtnUuid vUuid = - runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - checkOwnerPermissionToQtn qtn.visibility qtn.permissions - _ <- findQuestionnaireVersionByUuid vUuid - void $ deleteQuestionnaireVersionByUuid vUuid - -revertToEvent :: U.UUID -> QuestionnaireVersionRevertDTO -> Bool -> AppContextM QuestionnaireContentDTO -revertToEvent qtnUuid reqDto shouldSave = - runInTransaction $ do - qtn <- findQuestionnaireByUuid qtnUuid - if shouldSave - then checkOwnerPermissionToQtn qtn.visibility qtn.permissions - else checkViewPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - qtnVersions <- findQuestionnaireVersionsByQuestionnaireUuid qtnUuid - qtnEvents <- findQuestionnaireEventListsByQuestionnaireUuid qtnUuid - let updatedEvents = takeWhileInclusive (\e -> getUuid e /= reqDto.eventUuid) qtnEvents - let eventsToDelete = dropWhileExclusive (\e -> getUuid e /= reqDto.eventUuid) qtnEvents - let updatedEventUuids = S.fromList . fmap getUuid $ updatedEvents - let updatedVersions = filter (\v -> S.member v.eventUuid updatedEventUuids) qtnVersions - when - shouldSave - ( do - let versionsToDelete = fmap (.uuid) . filter (\v -> not $ S.member v.eventUuid updatedEventUuids) $ qtnVersions - deleteQuestionnaireVersionsByUuids versionsToDelete - deleteQuestionnaireEventsByUuids (fmap getUuid eventsToDelete) - event <- findQuestionnaireEventByUuid reqDto.eventUuid - deleteQuestionnaireFilesNewerThen qtnUuid (getCreatedAt event) - void $ updateQuestionnaireUpdatedAtByUuid qtnUuid - ) - let qtnCtn = compileQuestionnaire updatedEvents - versionDto <- - traverse - ( \version -> do - createdBy <- - case version.createdBy of - Just vCreatedBy -> do - user <- getUserById vCreatedBy - return . Just $ user - Nothing -> return Nothing - return $ toVersionList version createdBy - ) - updatedVersions - when shouldSave (logOutOnlineUsersWhenQtnDramaticallyChanged qtnUuid) - commentThreadsMap <- catchError (getQuestionnaireCommentsByQuestionnaireUuid qtnUuid Nothing Nothing) (\_ -> return M.empty) - return $ toContentDTO qtnCtn commentThreadsMap updatedEvents versionDto diff --git a/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionValidation.hs b/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionValidation.hs deleted file mode 100644 index cb0af9c91..000000000 --- a/wizard-server/src/Wizard/Service/Questionnaire/Version/QuestionnaireVersionValidation.hs +++ /dev/null @@ -1,34 +0,0 @@ -module Wizard.Service.Questionnaire.Version.QuestionnaireVersionValidation where - -import Control.Monad (when) -import Control.Monad.Except (throwError) -import Data.Maybe (isJust) -import qualified Data.UUID as U - -import Shared.Common.Model.Error.Error -import Wizard.Api.Resource.Questionnaire.Version.QuestionnaireVersionChangeDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO -import Wizard.Localization.Messages.Public -import Wizard.Model.Context.AppContext - -validateQuestionnaireVersionCreate :: U.UUID -> QuestionnaireVersionChangeDTO -> AppContextM () -validateQuestionnaireVersionCreate qtnUuid reqDto = do - validateQuestionnaireVersionEventExistence reqDto - validateQuestionnaireVersionUniqueness qtnUuid reqDto - -validateQuestionnaireVersionUpdate :: QuestionnaireVersionChangeDTO -> AppContextM () -validateQuestionnaireVersionUpdate = validateQuestionnaireVersionEventExistence - -validateQuestionnaireVersionUniqueness :: U.UUID -> QuestionnaireVersionChangeDTO -> AppContextM () -validateQuestionnaireVersionUniqueness qtnUuid reqDto = do - mQtnVersion <- findQuestionnaireVersionByEventUuid' qtnUuid reqDto.eventUuid - when - (isJust mQtnVersion) - (throwError . UserError $ _ERROR_SERVICE_QTN_VERSION__VERSION_UNIQUENESS (U.toString $ reqDto.eventUuid)) - -validateQuestionnaireVersionEventExistence :: QuestionnaireVersionChangeDTO -> AppContextM () -validateQuestionnaireVersionEventExistence reqDto = - findQuestionnaireEventByUuid' reqDto.eventUuid >>= \case - Just _ -> return () - Nothing -> throwError . UserError $ _ERROR_SERVICE_QTN_VERSION__NON_EXISTENT_EVENT_UUID (U.toString $ reqDto.eventUuid) diff --git a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionAudit.hs b/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionAudit.hs deleted file mode 100644 index 0a0c0d9d9..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionAudit.hs +++ /dev/null @@ -1,8 +0,0 @@ -module Wizard.Service.QuestionnaireAction.QuestionnaireActionAudit where - -import Shared.Audit.Service.Audit.AuditService -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () - -auditQuestionnaireActionStartEvent :: String -> AppContextM () -auditQuestionnaireActionStartEvent = logAudit "questionnaireAction" "startEvent" diff --git a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionMapper.hs b/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionMapper.hs deleted file mode 100644 index 15afd861e..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionMapper.hs +++ /dev/null @@ -1,26 +0,0 @@ -module Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper where - -import Data.Time - -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Model.QuestionnaireAction.QuestionnaireAction - -toDTO :: QuestionnaireAction -> QuestionnaireActionDTO -toDTO action = - QuestionnaireActionDTO - { qaId = action.qaId - , name = action.name - , description = action.description - , url = action.url - , enabled = action.enabled - , createdAt = action.createdAt - , updatedAt = action.updatedAt - } - -toChangeDTO :: QuestionnaireAction -> QuestionnaireActionChangeDTO -toChangeDTO action = QuestionnaireActionChangeDTO {enabled = action.enabled} - -fromChangeDTO :: QuestionnaireAction -> QuestionnaireActionChangeDTO -> UTCTime -> QuestionnaireAction -fromChangeDTO action reqDto now = - action {enabled = reqDto.enabled, updatedAt = now} diff --git a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionService.hs b/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionService.hs deleted file mode 100644 index 685376e46..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionService.hs +++ /dev/null @@ -1,74 +0,0 @@ -module Wizard.Service.QuestionnaireAction.QuestionnaireActionService where - -import Control.Monad.Reader (liftIO) -import Data.Maybe (fromMaybe) -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.PageMetadata -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionChangeDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.QuestionnaireAction.QuestionnaireActionDAO -import Wizard.Model.Context.AclContext -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.QuestionnaireAction.QuestionnaireAction -import Wizard.Service.QuestionnaireAction.QuestionnaireActionAudit -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper -import Wizard.Service.QuestionnaireAction.QuestionnaireActionUtil - -getQuestionnaireActionsPageDto :: Maybe String -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireActionDTO) -getQuestionnaireActionsPageDto mQuery pageable sort = do - checkPermission _QTN_PERM - currentUser <- getCurrentUser - importersPage <- findQuestionnaireActionsPage Nothing Nothing mQuery Nothing pageable sort - return $ fmap toDTO importersPage - -getQuestionnaireActionSuggestions - :: Maybe U.UUID -> Maybe String -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireActionDTO) -getQuestionnaireActionSuggestions mQuestionnaireUuid mQuery mEnabled pageable sort = do - checkPermission _QTN_PERM - mPkgId <- - case mQuestionnaireUuid of - Just qtnUuid -> do - qtn <- findQuestionnaireByUuid qtnUuid - return . Just $ qtn.knowledgeModelPackageId - Nothing -> return Nothing - page <- findQuestionnaireActionsPage Nothing Nothing mQuery mEnabled (Pageable (Just 0) (Just 999999999)) sort - return . fmap toDTO . updatePage page . filterImportersInGroup mPkgId $ page - where - updatePage :: Page QuestionnaireAction -> [QuestionnaireAction] -> Page QuestionnaireAction - updatePage (Page name _ _) array = - let updatedArray = take updatedSize array - updatedSize = fromMaybe 20 pageable.size - updatedTotalElements = length updatedArray - updatedTotalPages = computeTotalPage updatedTotalElements updatedSize - updatedNumber = fromMaybe 0 pageable.page - in Page name (PageMetadata updatedSize updatedTotalElements updatedTotalPages updatedNumber) updatedArray - filterImportersInGroup :: Maybe String -> Page QuestionnaireAction -> [QuestionnaireAction] - filterImportersInGroup mPkgId page = - filter isQuestionnaireActionSupported . filterQuestionnaireActions mPkgId $ page.entities - -getQuestionnaireAction :: String -> AppContextM QuestionnaireActionDTO -getQuestionnaireAction qiId = - runInTransaction $ do - checkPermission _QTN_PERM - importer <- findQuestionnaireActionById qiId - auditQuestionnaireActionStartEvent qiId - return $ toDTO importer - -modifyQuestionnaireAction :: String -> QuestionnaireActionChangeDTO -> AppContextM QuestionnaireActionDTO -modifyQuestionnaireAction qiId reqDto = - runInTransaction $ do - checkPermission _QTN_ACTION_PERM - importer <- findQuestionnaireActionById qiId - now <- liftIO getCurrentTime - let updatedImporter = fromChangeDTO importer reqDto now - updateQuestionnaireActionById updatedImporter - return $ toDTO updatedImporter diff --git a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionUtil.hs b/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionUtil.hs deleted file mode 100644 index 6c1b145ad..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireAction/QuestionnaireActionUtil.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Service.QuestionnaireAction.QuestionnaireActionUtil where - -import Shared.Coordinate.Util.Coordinate -import Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageUtil -import Wizard.Constant.QuestionnaireAction -import Wizard.Model.QuestionnaireAction.QuestionnaireAction - -isQuestionnaireActionSupported :: QuestionnaireAction -> Bool -isQuestionnaireActionSupported importer = importer.metamodelVersion == questionnaireActionMetamodelVersion - -filterQuestionnaireActions :: Maybe String -> [QuestionnaireAction] -> [QuestionnaireAction] -filterQuestionnaireActions mPkgId importers = - case mPkgId of - Just pkgId -> filter (filterQuestionnaireAction . splitCoordinate $ pkgId) importers - Nothing -> importers - where - filterQuestionnaireAction :: [String] -> QuestionnaireAction -> Bool - filterQuestionnaireAction pkgIdSplit importer = fitsIntoKMSpecs pkgIdSplit importer.allowedPackages diff --git a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterAudit.hs b/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterAudit.hs deleted file mode 100644 index 9b21a0878..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterAudit.hs +++ /dev/null @@ -1,8 +0,0 @@ -module Wizard.Service.QuestionnaireImporter.QuestionnaireImporterAudit where - -import Shared.Audit.Service.Audit.AuditService -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.ContextLenses () - -auditQuestionnaireImporterStartEvent :: String -> AppContextM () -auditQuestionnaireImporterStartEvent = logAudit "questionnaireImporter" "startEvent" diff --git a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterMapper.hs b/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterMapper.hs deleted file mode 100644 index 2bcf859a0..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterMapper.hs +++ /dev/null @@ -1,26 +0,0 @@ -module Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper where - -import Data.Time - -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter - -toDTO :: QuestionnaireImporter -> QuestionnaireImporterDTO -toDTO importer = - QuestionnaireImporterDTO - { qiId = importer.qiId - , name = importer.name - , description = importer.description - , url = importer.url - , enabled = importer.enabled - , createdAt = importer.createdAt - , updatedAt = importer.updatedAt - } - -toChangeDTO :: QuestionnaireImporter -> QuestionnaireImporterChangeDTO -toChangeDTO importer = QuestionnaireImporterChangeDTO {enabled = importer.enabled} - -fromChangeDTO :: QuestionnaireImporter -> QuestionnaireImporterChangeDTO -> UTCTime -> QuestionnaireImporter -fromChangeDTO importer reqDto now = - importer {enabled = reqDto.enabled, updatedAt = now} diff --git a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterService.hs b/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterService.hs deleted file mode 100644 index 82e4b91cf..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterService.hs +++ /dev/null @@ -1,74 +0,0 @@ -module Wizard.Service.QuestionnaireImporter.QuestionnaireImporterService where - -import Control.Monad.Reader (liftIO) -import Data.Maybe (fromMaybe) -import Data.Time -import qualified Data.UUID as U - -import Shared.Common.Model.Common.Page -import Shared.Common.Model.Common.PageMetadata -import Shared.Common.Model.Common.Pageable -import Shared.Common.Model.Common.Sort -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterChangeDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.QuestionnaireImporter.QuestionnaireImporterDAO -import Wizard.Model.Context.AclContext -import Wizard.Model.Context.AppContext -import Wizard.Model.Context.AppContextHelpers -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterAudit -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterUtil - -getQuestionnaireImportersPageDto :: Maybe String -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireImporterDTO) -getQuestionnaireImportersPageDto mQuery pageable sort = do - checkPermission _QTN_PERM - currentUser <- getCurrentUser - importersPage <- findQuestionnaireImportersPage Nothing Nothing mQuery Nothing pageable sort - return $ fmap toDTO importersPage - -getQuestionnaireImporterSuggestions - :: Maybe U.UUID -> Maybe String -> Maybe Bool -> Pageable -> [Sort] -> AppContextM (Page QuestionnaireImporterDTO) -getQuestionnaireImporterSuggestions mQuestionnaireUuid mQuery mEnabled pageable sort = do - checkPermission _QTN_PERM - mPkgId <- - case mQuestionnaireUuid of - Just qtnUuid -> do - qtn <- findQuestionnaireByUuid qtnUuid - return . Just $ qtn.knowledgeModelPackageId - Nothing -> return Nothing - page <- findQuestionnaireImportersPage Nothing Nothing mQuery mEnabled (Pageable (Just 0) (Just 999999999)) sort - return . fmap toDTO . updatePage page . filterImportersInGroup mPkgId $ page - where - updatePage :: Page QuestionnaireImporter -> [QuestionnaireImporter] -> Page QuestionnaireImporter - updatePage (Page name _ _) array = - let updatedArray = take updatedSize array - updatedSize = fromMaybe 20 pageable.size - updatedTotalElements = length updatedArray - updatedTotalPages = computeTotalPage updatedTotalElements updatedSize - updatedNumber = fromMaybe 0 pageable.page - in Page name (PageMetadata updatedSize updatedTotalElements updatedTotalPages updatedNumber) updatedArray - filterImportersInGroup :: Maybe String -> Page QuestionnaireImporter -> [QuestionnaireImporter] - filterImportersInGroup mPkgId page = - filter isQuestionnaireImporterSupported . filterQuestionnaireImporters mPkgId $ page.entities - -getQuestionnaireImporter :: String -> AppContextM QuestionnaireImporterDTO -getQuestionnaireImporter qiId = - runInTransaction $ do - checkPermission _QTN_PERM - importer <- findQuestionnaireImporterById qiId - auditQuestionnaireImporterStartEvent qiId - return $ toDTO importer - -modifyQuestionnaireImporter :: String -> QuestionnaireImporterChangeDTO -> AppContextM QuestionnaireImporterDTO -modifyQuestionnaireImporter qiId reqDto = - runInTransaction $ do - checkPermission _QTN_IMPORTER_PERM - importer <- findQuestionnaireImporterById qiId - now <- liftIO getCurrentTime - let updatedImporter = fromChangeDTO importer reqDto now - updateQuestionnaireImporterById updatedImporter - return $ toDTO updatedImporter diff --git a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterUtil.hs b/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterUtil.hs deleted file mode 100644 index 9474e324a..000000000 --- a/wizard-server/src/Wizard/Service/QuestionnaireImporter/QuestionnaireImporterUtil.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Service.QuestionnaireImporter.QuestionnaireImporterUtil where - -import Shared.Coordinate.Util.Coordinate -import Shared.KnowledgeModel.Service.KnowledgeModel.Package.KnowledgeModelPackageUtil -import Wizard.Constant.QuestionnaireImporter -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter - -isQuestionnaireImporterSupported :: QuestionnaireImporter -> Bool -isQuestionnaireImporterSupported importer = importer.metamodelVersion == questionnaireImporterMetamodelVersion - -filterQuestionnaireImporters :: Maybe String -> [QuestionnaireImporter] -> [QuestionnaireImporter] -filterQuestionnaireImporters mPkgId importers = - case mPkgId of - Just pkgId -> filter (filterQuestionnaireImporter . splitCoordinate $ pkgId) importers - Nothing -> importers - where - filterQuestionnaireImporter :: [String] -> QuestionnaireImporter -> Bool - filterQuestionnaireImporter pkgIdSplit importer = fitsIntoKMSpecs pkgIdSplit importer.allowedPackages diff --git a/wizard-server/src/Wizard/Service/Report/Evaluator/Common.hs b/wizard-server/src/Wizard/Service/Report/Evaluator/Common.hs index 2b3ec8efb..bf187fb6a 100644 --- a/wizard-server/src/Wizard/Service/Report/Evaluator/Common.hs +++ b/wizard-server/src/Wizard/Service/Report/Evaluator/Common.hs @@ -4,20 +4,20 @@ import qualified Data.List as L import Data.Maybe (fromMaybe, isNothing) import qualified Data.UUID as U -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply getReply :: [ReplyTuple] -> String -> Maybe ReplyTuple getReply replies p = L.find (\(path, _) -> path == p) replies isRequiredNow :: [U.UUID] -> Maybe U.UUID -> Maybe U.UUID -> Int -> Int -isRequiredNow phaseUuids mQPhase mQtnPhase currentValue - | isNothing mQtnPhase = currentValue - | qPhaseIndex <= qtnPhaseIndex = currentValue +isRequiredNow phaseUuids mQPhase mProjectPhase currentValue + | isNothing mProjectPhase = currentValue + | qPhaseIndex <= projectPhaseIndex = currentValue | otherwise = 0 where - qtnPhaseIndex = - case mQtnPhase of - Just qtnPhase -> fromMaybe 9999 (qtnPhase `L.elemIndex` phaseUuids) + projectPhaseIndex = + case mProjectPhase of + Just projectPhase -> fromMaybe 9999 (projectPhase `L.elemIndex` phaseUuids) Nothing -> 9999 qPhaseIndex = case mQPhase of diff --git a/wizard-server/src/Wizard/Service/Report/Evaluator/Indication.hs b/wizard-server/src/Wizard/Service/Report/Evaluator/Indication.hs index 95f744261..4cb3ab3fc 100644 --- a/wizard-server/src/Wizard/Service/Report/Evaluator/Indication.hs +++ b/wizard-server/src/Wizard/Service/Report/Evaluator/Indication.hs @@ -8,90 +8,90 @@ import qualified Data.UUID as U import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelAccessors import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelLenses -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import Wizard.Model.Report.Report import Wizard.Service.Report.Evaluator.Common computeIndications :: Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> Chapter -> [Indication] -computeIndications mQtnPhase km replies ch = - [computePhasesAnsweredIndication mQtnPhase km replies ch, computeAnsweredIndication Nothing km replies ch] +computeIndications mProjectPhase km replies ch = + [computePhasesAnsweredIndication mProjectPhase km replies ch, computeAnsweredIndication Nothing km replies ch] -- -------------------------------- -- PRIVATE -- -------------------------------- computeAnsweredIndication :: Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> Chapter -> Indication -computeAnsweredIndication mQtnPhase km replies ch = +computeAnsweredIndication mProjectPhase km replies ch = AnsweredIndication' $ AnsweredIndication - { answeredQuestions = evaluateChapter 1 0 mQtnPhase km replies ch - , unansweredQuestions = evaluateChapter 0 1 mQtnPhase km replies ch + { answeredQuestions = evaluateChapter 1 0 mProjectPhase km replies ch + , unansweredQuestions = evaluateChapter 0 1 mProjectPhase km replies ch } computePhasesAnsweredIndication :: Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> Chapter -> Indication -computePhasesAnsweredIndication mQtnPhase km replies ch = +computePhasesAnsweredIndication mProjectPhase km replies ch = PhasesAnsweredIndication' $ PhasesAnsweredIndication - { answeredQuestions = evaluateChapter 1 0 mQtnPhase km replies ch - , unansweredQuestions = evaluateChapter 0 1 mQtnPhase km replies ch + { answeredQuestions = evaluateChapter 1 0 mProjectPhase km replies ch + , unansweredQuestions = evaluateChapter 0 1 mProjectPhase km replies ch } evaluateChapter :: Int -> Int -> Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> Chapter -> Int -evaluateChapter found notFound mQtnPhase km replies ch = +evaluateChapter found notFound mProjectPhase km replies ch = let currentPath = U.toString $ ch.uuid qs = getQuestionsForChapterUuid km ch.uuid - in sum . fmap (evaluateQuestion found notFound mQtnPhase km replies currentPath) $ qs + in sum . fmap (evaluateQuestion found notFound mProjectPhase km replies currentPath) $ qs evaluateQuestion :: Int -> Int -> Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> String -> Question -> Int -evaluateQuestion found notFound mQtnPhase km replies path q' = +evaluateQuestion found notFound mProjectPhase km replies path q' = let currentPath = composePathUuid path $ getUuid q' in case M.lookup currentPath replies of Just reply -> children currentPath - Nothing -> isRequiredNow km.phaseUuids (getRequiredPhaseUuid q') mQtnPhase notFound + Nothing -> isRequiredNow km.phaseUuids (getRequiredPhaseUuid q') mProjectPhase notFound where children currentPath = case q' of - MultiChoiceQuestion' q -> evaluateMultiChoiceQuestion q found notFound mQtnPhase km replies currentPath + MultiChoiceQuestion' q -> evaluateMultiChoiceQuestion q found notFound mProjectPhase km replies currentPath ValueQuestion' q -> rFound IntegrationQuestion' q -> rFound ItemSelectQuestion' q -> rFound - OptionsQuestion' q -> rFound + evaluateOptionsQuestion q found notFound mQtnPhase km replies currentPath - ListQuestion' q -> evaluateListQuestion found notFound mQtnPhase km replies currentPath q + OptionsQuestion' q -> rFound + evaluateOptionsQuestion q found notFound mProjectPhase km replies currentPath + ListQuestion' q -> evaluateListQuestion found notFound mProjectPhase km replies currentPath q FileQuestion' q -> rFound where - rFound = isRequiredNow km.phaseUuids (getRequiredPhaseUuid q') mQtnPhase found + rFound = isRequiredNow km.phaseUuids (getRequiredPhaseUuid q') mProjectPhase found evaluateOptionsQuestion :: OptionsQuestion -> Int -> Int -> Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> String -> Int -evaluateOptionsQuestion q found notFound mQtnPhase km replies path = +evaluateOptionsQuestion q found notFound mProjectPhase km replies path = case M.lookup path replies of Just (Reply {value = AnswerReply {..}}) -> let currentPath = composePathUuid path aValue qs = getQuestionsForAnswerUuid km aValue - in sum . fmap (evaluateQuestion found notFound mQtnPhase km replies currentPath) $ qs - _ -> isRequiredNow km.phaseUuids q.requiredPhaseUuid mQtnPhase notFound + in sum . fmap (evaluateQuestion found notFound mProjectPhase km replies currentPath) $ qs + _ -> isRequiredNow km.phaseUuids q.requiredPhaseUuid mProjectPhase notFound evaluateListQuestion :: Int -> Int -> Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> String -> ListQuestion -> Int -evaluateListQuestion found notFound mQtnPhase km replies currentPath q = +evaluateListQuestion found notFound mProjectPhase km replies currentPath q = let itemQs = getItemTemplateQuestionsForQuestionUuid km $ q.uuid items = case M.lookup currentPath replies of Just (Reply {value = ItemListReply {..}}) -> ilValue _ -> [] evaluateQuestion' item = - fmap (evaluateQuestion found notFound mQtnPhase km replies (composePath currentPath $ U.toString item)) itemQs + fmap (evaluateQuestion found notFound mProjectPhase km replies (composePath currentPath $ U.toString item)) itemQs current = if not (null items) - then isRequiredNow km.phaseUuids q.requiredPhaseUuid mQtnPhase found - else isRequiredNow km.phaseUuids q.requiredPhaseUuid mQtnPhase notFound + then isRequiredNow km.phaseUuids q.requiredPhaseUuid mProjectPhase found + else isRequiredNow km.phaseUuids q.requiredPhaseUuid mProjectPhase notFound children = sum . concatMap evaluateQuestion' $ items in current + children evaluateMultiChoiceQuestion :: MultiChoiceQuestion -> Int -> Int -> Maybe U.UUID -> KnowledgeModel -> M.Map String Reply -> String -> Int -evaluateMultiChoiceQuestion q found notFound mQtnPhase km replies path = +evaluateMultiChoiceQuestion q found notFound mProjectPhase km replies path = case M.lookup path replies of Just (Reply {value = MultiChoiceReply {..}}) -> if not (null mcValue) - then isRequiredNow km.phaseUuids q.requiredPhaseUuid mQtnPhase found - else isRequiredNow km.phaseUuids q.requiredPhaseUuid mQtnPhase notFound - _ -> isRequiredNow km.phaseUuids q.requiredPhaseUuid mQtnPhase notFound + then isRequiredNow km.phaseUuids q.requiredPhaseUuid mProjectPhase found + else isRequiredNow km.phaseUuids q.requiredPhaseUuid mProjectPhase notFound + _ -> isRequiredNow km.phaseUuids q.requiredPhaseUuid mProjectPhase notFound diff --git a/wizard-server/src/Wizard/Service/Report/Evaluator/Metric.hs b/wizard-server/src/Wizard/Service/Report/Evaluator/Metric.hs index 025547c8f..acb5725b5 100644 --- a/wizard-server/src/Wizard/Service/Report/Evaluator/Metric.hs +++ b/wizard-server/src/Wizard/Service/Report/Evaluator/Metric.hs @@ -8,7 +8,7 @@ import Shared.Common.Util.Math import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelAccessors import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelLenses -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import Wizard.Model.Report.Report import Wizard.Service.Report.Evaluator.Common diff --git a/wizard-server/src/Wizard/Service/Report/ReportGenerator.hs b/wizard-server/src/Wizard/Service/Report/ReportGenerator.hs index 4e8b168fa..c8dd6f608 100644 --- a/wizard-server/src/Wizard/Service/Report/ReportGenerator.hs +++ b/wizard-server/src/Wizard/Service/Report/ReportGenerator.hs @@ -9,7 +9,7 @@ import Shared.Common.Util.Uuid import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelAccessors import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.QuestionnaireReply +import Wizard.Model.Project.ProjectReply import Wizard.Model.Report.Report import Wizard.Service.Report.Evaluator.Indication import Wizard.Service.Report.Evaluator.Metric diff --git a/wizard-server/src/Wizard/Service/Report/ReportMapper.hs b/wizard-server/src/Wizard/Service/Report/ReportMapper.hs index b157776c8..5433b942e 100644 --- a/wizard-server/src/Wizard/Service/Report/ReportMapper.hs +++ b/wizard-server/src/Wizard/Service/Report/ReportMapper.hs @@ -1,21 +1,21 @@ module Wizard.Service.Report.ReportMapper where -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportDTO import Wizard.Model.Report.Report -toDTO :: QuestionnaireDetailQuestionnaireDTO -> Report -> QuestionnaireDetailReportDTO -toDTO qtn report = - QuestionnaireDetailReportDTO - { uuid = qtn.uuid - , name = qtn.name - , visibility = qtn.visibility - , sharing = qtn.sharing - , knowledgeModelPackageId = qtn.knowledgeModelPackageId - , isTemplate = qtn.isTemplate - , permissions = qtn.permissions - , migrationUuid = qtn.migrationUuid - , fileCount = qtn.fileCount +toDTO :: ProjectDetailQuestionnaireDTO -> Report -> ProjectDetailReportDTO +toDTO project report = + ProjectDetailReportDTO + { uuid = project.uuid + , name = project.name + , visibility = project.visibility + , sharing = project.sharing + , knowledgeModelPackageId = project.knowledgeModelPackageId + , isTemplate = project.isTemplate + , permissions = project.permissions + , migrationUuid = project.migrationUuid + , fileCount = project.fileCount , totalReport = report.totalReport , chapters = report.chapters , chapterReports = report.chapterReports diff --git a/wizard-server/src/Wizard/Service/Report/ReportService.hs b/wizard-server/src/Wizard/Service/Report/ReportService.hs index 30f793247..c68113285 100644 --- a/wizard-server/src/Wizard/Service/Report/ReportService.hs +++ b/wizard-server/src/Wizard/Service/Report/ReportService.hs @@ -2,17 +2,17 @@ module Wizard.Service.Report.ReportService where import qualified Data.UUID as U -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportDTO import Wizard.Model.Context.AppContext import Wizard.Service.KnowledgeModel.KnowledgeModelService -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.ProjectService import Wizard.Service.Report.ReportGenerator import Wizard.Service.Report.ReportMapper -getReportByQuestionnaireUuid :: U.UUID -> AppContextM QuestionnaireDetailReportDTO -getReportByQuestionnaireUuid qtnUuid = do - qtnDto <- getQuestionnaireDetailQuestionnaireByUuid qtnUuid - knowledgeModel <- compileKnowledgeModel [] (Just qtnDto.knowledgeModelPackageId) qtnDto.selectedQuestionTagUuids - report <- generateReport qtnDto.phaseUuid knowledgeModel qtnDto.replies - return $ toDTO qtnDto report +getReportByProjectUuid :: U.UUID -> AppContextM ProjectDetailReportDTO +getReportByProjectUuid projectUuid = do + projectDto <- getProjectDetailQuestionnaireByUuid projectUuid + knowledgeModel <- compileKnowledgeModel [] (Just projectDto.knowledgeModelPackageId) projectDto.selectedQuestionTagUuids + report <- generateReport projectDto.phaseUuid knowledgeModel projectDto.replies + return $ toDTO projectDto report diff --git a/wizard-server/src/Wizard/Service/Statistics/StatisticsService.hs b/wizard-server/src/Wizard/Service/Statistics/StatisticsService.hs index 52785bae5..9d246bddb 100644 --- a/wizard-server/src/Wizard/Service/Statistics/StatisticsService.hs +++ b/wizard-server/src/Wizard/Service/Statistics/StatisticsService.hs @@ -4,7 +4,7 @@ import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Wizard.Database.DAO.Document.DocumentDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.DAO.User.UserDAO import Wizard.Model.Context.AppContext import Wizard.Model.Statistics.InstanceStatistics @@ -13,7 +13,7 @@ getInstanceStatistics :: AppContextM InstanceStatistics getInstanceStatistics = do uCount <- countUsers pCount <- countPackagesGroupedByOrganizationIdAndKmId - qCount <- countQuestionnaires + qCount <- countProjects bCount <- countKnowledgeModelEditors docCount <- countDocuments tmlCount <- countDocumentTemplatesGroupedByOrganizationIdAndKmId @@ -21,7 +21,7 @@ getInstanceStatistics = do InstanceStatistics { userCount = uCount , pkgCount = pCount - , qtnCount = qCount + , prjCount = qCount , knowledgeModelEditorCount = bCount , docCount = docCount , tmlCount = tmlCount diff --git a/wizard-server/src/Wizard/Service/Submission/SubmissionAcl.hs b/wizard-server/src/Wizard/Service/Submission/SubmissionAcl.hs index 71ba56c1a..db344b840 100644 --- a/wizard-server/src/Wizard/Service/Submission/SubmissionAcl.hs +++ b/wizard-server/src/Wizard/Service/Submission/SubmissionAcl.hs @@ -8,9 +8,9 @@ import Wizard.Service.Document.DocumentAcl checkViewPermissionToSubmission :: Document -> AppContextM () checkViewPermissionToSubmission doc = do checkPermission _SUBM_PERM - checkViewPermissionToDoc doc.questionnaireUuid + checkViewPermissionToDoc doc.projectUuid checkEditPermissionToSubmission :: Document -> AppContextM () checkEditPermissionToSubmission doc = do checkPermission _SUBM_PERM - checkEditPermissionToDoc doc.questionnaireUuid + checkEditPermissionToDoc doc.projectUuid diff --git a/wizard-server/src/Wizard/Service/Submission/SubmissionService.hs b/wizard-server/src/Wizard/Service/Submission/SubmissionService.hs index 59521c44f..b706d089c 100644 --- a/wizard-server/src/Wizard/Service/Submission/SubmissionService.hs +++ b/wizard-server/src/Wizard/Service/Submission/SubmissionService.hs @@ -41,7 +41,7 @@ getSubmissionsForDocument :: U.UUID -> AppContextM [SubmissionList] getSubmissionsForDocument docUuid = do checkIfSubmissionIsEnabled doc <- findDocumentByUuid docUuid - checkViewPermissionToDoc doc.questionnaireUuid + checkViewPermissionToDoc doc.projectUuid findSubmissionsByDocumentUuid docUuid submitDocument :: U.UUID -> SubmissionCreateDTO -> AppContextM SubmissionList diff --git a/wizard-server/src/Wizard/Service/Tenant/Config/ConfigMapper.hs b/wizard-server/src/Wizard/Service/Tenant/Config/ConfigMapper.hs index c5f173a0f..230a935e8 100644 --- a/wizard-server/src/Wizard/Service/Tenant/Config/ConfigMapper.hs +++ b/wizard-server/src/Wizard/Service/Tenant/Config/ConfigMapper.hs @@ -28,11 +28,11 @@ toChangeDTO -> TenantConfigLookAndFeelChangeDTO -> TenantConfigRegistryChangeDTO -> TenantConfigKnowledgeModelChangeDTO - -> TenantConfigQuestionnaireChangeDTO + -> TenantConfigProjectChangeDTO -> TenantConfigSubmissionChangeDTO -> TenantConfigFeaturesChangeDTO -> TenantConfigChangeDTO -toChangeDTO organization authentication privacyAndSupport dashboardAndLoginScreen lookAndFeel registry knowledgeModel questionnaire submission features = TenantConfigChangeDTO {..} +toChangeDTO organization authentication privacyAndSupport dashboardAndLoginScreen lookAndFeel registry knowledgeModel project submission features = TenantConfigChangeDTO {..} toSubmissionServiceSimple :: TenantConfigSubmissionService -> TenantConfigSubmissionServiceSimple toSubmissionServiceSimple config = @@ -50,12 +50,12 @@ toTenantConfig -> TenantConfigLookAndFeel -> TenantConfigRegistry -> TenantConfigKnowledgeModel - -> TenantConfigQuestionnaire + -> TenantConfigProject -> TenantConfigSubmission -> TenantConfigFeatures -> TenantConfigOwl -> TenantConfig -toTenantConfig organization authentication privacyAndSupport dashboardAndLoginScreen lookAndFeel registry knowledgeModel questionnaire submission features owl = +toTenantConfig organization authentication privacyAndSupport dashboardAndLoginScreen lookAndFeel registry knowledgeModel project submission features owl = let uuid = organization.tenantUuid mailConfigUuid = Nothing createdAt = organization.createdAt @@ -94,8 +94,8 @@ fromKnowledgeModelChangeDTO dto@TenantConfigKnowledgeModelChangeDTO {..} tenantU fromKnowledgeModelPublicPackagePatternChangeDTO :: KnowledgeModelPackagePattern -> U.UUID -> Int -> UTCTime -> UTCTime -> TenantConfigKnowledgeModelPublicPackagePattern fromKnowledgeModelPublicPackagePatternChangeDTO KnowledgeModelPackagePattern {..} tenantUuid position createdAt updatedAt = TenantConfigKnowledgeModelPublicPackagePattern {..} -fromQuestionnaireChangeDTO :: TenantConfigQuestionnaireChangeDTO -> U.UUID -> UTCTime -> UTCTime -> TenantConfigQuestionnaire -fromQuestionnaireChangeDTO TenantConfigQuestionnaireChangeDTO {..} tenantUuid createdAt updatedAt = TenantConfigQuestionnaire {..} +fromProjectChangeDTO :: TenantConfigProjectChangeDTO -> U.UUID -> UTCTime -> UTCTime -> TenantConfigProject +fromProjectChangeDTO TenantConfigProjectChangeDTO {..} tenantUuid createdAt updatedAt = TenantConfigProject {..} fromSubmissionChangeDTO :: TenantConfigSubmissionChangeDTO -> U.UUID -> UTCTime -> UTCTime -> TenantConfigSubmission fromSubmissionChangeDTO dto@TenantConfigSubmissionChangeDTO {..} tenantUuid createdAt updatedAt = diff --git a/wizard-server/src/Wizard/Service/Tenant/Config/ConfigService.hs b/wizard-server/src/Wizard/Service/Tenant/Config/ConfigService.hs index 3623ae72f..8dba47b85 100644 --- a/wizard-server/src/Wizard/Service/Tenant/Config/ConfigService.hs +++ b/wizard-server/src/Wizard/Service/Tenant/Config/ConfigService.hs @@ -13,7 +13,7 @@ import Wizard.Database.DAO.Tenant.Config.TenantConfigKnowledgeModelDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOwlDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigPrivacyAndSupportDAO -import Wizard.Database.DAO.Tenant.Config.TenantConfigQuestionnaireDAO +import Wizard.Database.DAO.Tenant.Config.TenantConfigProjectDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigRegistryDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Model.Config.ServerConfig @@ -38,11 +38,11 @@ getCurrentTenantConfigDto = do tcLookAndFeel <- findTenantConfigLookAndFeel tcRegistry <- getCurrentTenantConfigRegistry tcKnowledgeModel <- getCurrentTenantConfigKnowledgeModel - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire + tcProject <- getCurrentTenantConfigProject tcSubmission <- findTenantConfigSubmission tcFeatures <- findTenantConfigFeatures tcOwl <- findTenantConfigOwl - return $ toTenantConfig tcOrganization tcAuthentication tcPrivacyAndSupport tcDashboardAndLoginScreen tcLookAndFeel tcRegistry tcKnowledgeModel tcQuestionnaire tcSubmission tcFeatures tcOwl + return $ toTenantConfig tcOrganization tcAuthentication tcPrivacyAndSupport tcDashboardAndLoginScreen tcLookAndFeel tcRegistry tcKnowledgeModel tcProject tcSubmission tcFeatures tcOwl modifyTenantConfigDto :: TenantConfigChangeDTO -> AppContextM TenantConfig modifyTenantConfigDto reqDto = @@ -78,10 +78,10 @@ modifyTenantConfigDto reqDto = tcKnowledgeModelUpdated <- getCurrentTenantConfigKnowledgeModel let tcKnowledgeModelUpdatedUpdated = fromKnowledgeModelChangeDTO reqDto.knowledgeModel tcKnowledgeModelUpdated.tenantUuid tcKnowledgeModelUpdated.createdAt now modifyTenantConfigKnowledgeModel tcKnowledgeModelUpdatedUpdated - -- Questionnaire - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - let tcQuestionnaireUpdated = fromQuestionnaireChangeDTO reqDto.questionnaire tcQuestionnaire.tenantUuid tcQuestionnaire.createdAt now - modifyTenantConfigQuestionnaire tcQuestionnaireUpdated + -- Project + tcProject <- getCurrentTenantConfigProject + let tcProjectUpdated = fromProjectChangeDTO reqDto.project tcProject.tenantUuid tcProject.createdAt now + modifyTenantConfigProject tcProjectUpdated -- Submission tcSubmission <- findTenantConfigSubmission let tcSubmissionUpdated = fromSubmissionChangeDTO reqDto.submission tcSubmission.tenantUuid tcSubmission.createdAt now @@ -92,7 +92,7 @@ modifyTenantConfigDto reqDto = updateTenantConfigFeatures tcFeaturesUpdated -- Owl tcOwl <- findTenantConfigOwl - return $ toTenantConfig tcOrganizationUpdated tcAuthenticationUpdated tcPrivacyAndSupportUpdated tcDashboardAndLoginScreenUpdated tcLookAndFeelUpdated tcRegistryUpdated tcKnowledgeModelUpdated tcQuestionnaireUpdated tcSubmissionUpdated tcFeaturesUpdated tcOwl + return $ toTenantConfig tcOrganizationUpdated tcAuthenticationUpdated tcPrivacyAndSupportUpdated tcDashboardAndLoginScreenUpdated tcLookAndFeelUpdated tcRegistryUpdated tcKnowledgeModelUpdated tcProjectUpdated tcSubmissionUpdated tcFeaturesUpdated tcOwl getCurrentTenantConfigAuthentication :: AppContextM TenantConfigAuthentication getCurrentTenantConfigAuthentication = do @@ -154,22 +154,22 @@ modifyTenantConfigKnowledgeModel tcKnowledgeModel = updateTenantConfigKnowledgeModel encryptedUpdatedTcKnowledgeModel return tcKnowledgeModel -getCurrentTenantConfigQuestionnaire :: AppContextM TenantConfigQuestionnaire -getCurrentTenantConfigQuestionnaire = do +getCurrentTenantConfigProject :: AppContextM TenantConfigProject +getCurrentTenantConfigProject = do serverConfig <- asks serverConfig - encryptedTcQuestionnaire <- findTenantConfigQuestionnaire - return $ process serverConfig.general.secret encryptedTcQuestionnaire + encryptedTcProject <- findTenantConfigProject + return $ process serverConfig.general.secret encryptedTcProject -getTenantConfigQuestionnaireByUuid :: U.UUID -> AppContextM TenantConfigQuestionnaire -getTenantConfigQuestionnaireByUuid tenantUuid = do +getTenantConfigProjectByUuid :: U.UUID -> AppContextM TenantConfigProject +getTenantConfigProjectByUuid tenantUuid = do serverConfig <- asks serverConfig - encryptedTcQuestionnaire <- findTenantConfigQuestionnaireByUuid tenantUuid - return $ process serverConfig.general.secret encryptedTcQuestionnaire + encryptedTcProject <- findTenantConfigProjectByUuid tenantUuid + return $ process serverConfig.general.secret encryptedTcProject -modifyTenantConfigQuestionnaire :: TenantConfigQuestionnaire -> AppContextM TenantConfigQuestionnaire -modifyTenantConfigQuestionnaire tcQuestionnaire = +modifyTenantConfigProject :: TenantConfigProject -> AppContextM TenantConfigProject +modifyTenantConfigProject tcProject = runInTransaction $ do serverConfig <- asks serverConfig - let encryptedUpdatedTcQuestionnaire = process serverConfig.general.secret tcQuestionnaire - updateTenantConfigQuestionnaire encryptedUpdatedTcQuestionnaire - return tcQuestionnaire + let encryptedUpdatedTcProject = process serverConfig.general.secret tcProject + updateTenantConfigProject encryptedUpdatedTcProject + return tcProject diff --git a/wizard-server/src/Wizard/Service/Tenant/Config/ConfigValidation.hs b/wizard-server/src/Wizard/Service/Tenant/Config/ConfigValidation.hs index 3022f4676..7094e14d0 100644 --- a/wizard-server/src/Wizard/Service/Tenant/Config/ConfigValidation.hs +++ b/wizard-server/src/Wizard/Service/Tenant/Config/ConfigValidation.hs @@ -12,13 +12,13 @@ import Shared.Coordinate.Localization.Messages.Public import Wizard.Api.Resource.Tenant.Config.TenantConfigChangeDTO import Wizard.Model.Context.AppContext import Wizard.Model.Tenant.Config.TenantConfig -import Wizard.Service.Questionnaire.QuestionnaireValidation +import Wizard.Service.Project.ProjectValidation validateTenantConfig :: TenantConfigChangeDTO -> AppContextM () validateTenantConfig reqDto = do validateOrganization reqDto.organization validateAuthentication reqDto.authentication - validateQuestionnaire reqDto.questionnaire + validateProject reqDto.project validateOrganization :: TenantConfigOrganizationChangeDTO -> AppContextM () validateOrganization config = forM_ (isValidOrganizationId config.organizationId) throwError @@ -41,5 +41,5 @@ validateAuthentication config = validationRegex = mkRegex "^[a-z0-9-]+$" in traverse_ validate config.external.services -validateQuestionnaire :: TenantConfigQuestionnaireChangeDTO -> AppContextM () -validateQuestionnaire config = validateQuestionnaireTags config.projectTagging.tags +validateProject :: TenantConfigProjectChangeDTO -> AppContextM () +validateProject config = validateProjectTags config.projectTagging.tags diff --git a/wizard-server/src/Wizard/Service/Tenant/Limit/LimitMapper.hs b/wizard-server/src/Wizard/Service/Tenant/Limit/LimitMapper.hs index b069bbd24..eab400197 100644 --- a/wizard-server/src/Wizard/Service/Tenant/Limit/LimitMapper.hs +++ b/wizard-server/src/Wizard/Service/Tenant/Limit/LimitMapper.hs @@ -16,7 +16,7 @@ fromCreate aUuid now = , knowledgeModelEditors = -1000 , documentTemplates = -1000 , documentTemplateDrafts = -1000 - , questionnaires = -1000 + , projects = -1000 , documents = -1000 , locales = -1000 , storage = -1000 * 5 * 1000 * 1000 @@ -34,7 +34,7 @@ fromChangeDTO limitBundle reqDto now = , knowledgeModelEditors = reqDto.knowledgeModelEditors , documentTemplates = reqDto.documentTemplates , documentTemplateDrafts = reqDto.documentTemplateDrafts - , questionnaires = reqDto.questionnaires + , projects = reqDto.projects , documents = reqDto.documents , locales = reqDto.locales , storage = reqDto.storage diff --git a/wizard-server/src/Wizard/Service/Tenant/Limit/LimitService.hs b/wizard-server/src/Wizard/Service/Tenant/Limit/LimitService.hs index e1bb6db2e..5171f31f4 100644 --- a/wizard-server/src/Wizard/Service/Tenant/Limit/LimitService.hs +++ b/wizard-server/src/Wizard/Service/Tenant/Limit/LimitService.hs @@ -14,8 +14,8 @@ import Wizard.Database.DAO.Common import Wizard.Database.DAO.Document.DocumentDAO import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectFileDAO import Wizard.Database.DAO.Tenant.TenantLimitBundleDAO import Wizard.Database.DAO.User.UserDAO import Wizard.Model.Context.AclContext @@ -66,11 +66,11 @@ checkPackageLimit = do count <- countPackagesGroupedByOrganizationIdAndKmId checkLimit "knowledge models" count limit.knowledgeModels -checkQuestionnaireLimit :: AppContextM () -checkQuestionnaireLimit = do +checkProjectLimit :: AppContextM () +checkProjectLimit = do limit <- findLimitBundleForCurrentTenant - count <- countQuestionnaires - checkLimit "questionnaires" count limit.questionnaires + count <- countProjects + checkLimit "projects" count limit.projects checkDocumentTemplateLimit :: AppContextM () checkDocumentTemplateLimit = do @@ -101,6 +101,6 @@ checkStorageSize newFileSize = do limit <- findLimitBundleForCurrentTenant docSize <- sumDocumentFileSize templateAssetSize <- sumAssetFileSize - qtnFileSize <- sumQuestionnaireFileSize - let storageCount = docSize + templateAssetSize + qtnFileSize + projectFileSize <- sumProjectFileSize + let storageCount = docSize + templateAssetSize + projectFileSize checkLimit "storage" (storageCount + newFileSize) limit.storage diff --git a/wizard-server/src/Wizard/Service/Tenant/TenantService.hs b/wizard-server/src/Wizard/Service/Tenant/TenantService.hs index 4a4bc2118..e2a44ef54 100644 --- a/wizard-server/src/Wizard/Service/Tenant/TenantService.hs +++ b/wizard-server/src/Wizard/Service/Tenant/TenantService.hs @@ -24,7 +24,7 @@ import Wizard.Database.DAO.Tenant.Config.TenantConfigKnowledgeModelDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOwlDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigPrivacyAndSupportDAO -import Wizard.Database.DAO.Tenant.Config.TenantConfigQuestionnaireDAO +import Wizard.Database.DAO.Tenant.Config.TenantConfigProjectDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigRegistryDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Database.DAO.Tenant.TenantDAO @@ -153,7 +153,7 @@ createConfig uuid now = do insertTenantConfigLookAndFeel (defaultLookAndFeel {tenantUuid = uuid, createdAt = now, updatedAt = now} :: TenantConfigLookAndFeel) insertTenantConfigRegistry (defaultRegistry {tenantUuid = uuid, createdAt = now, updatedAt = now} :: TenantConfigRegistry) insertTenantConfigKnowledgeModel (defaultKnowledgeModel {tenantUuid = uuid, createdAt = now, updatedAt = now} :: TenantConfigKnowledgeModel) - insertTenantConfigQuestionnaire (defaultQuestionnaire {tenantUuid = uuid, createdAt = now, updatedAt = now} :: TenantConfigQuestionnaire) + insertTenantConfigProject (defaultProject {tenantUuid = uuid, createdAt = now, updatedAt = now} :: TenantConfigProject) insertTenantConfigSubmission (defaultSubmission {tenantUuid = uuid, createdAt = now, updatedAt = now} :: TenantConfigSubmission) insertTenantConfigMail (defaultMail {tenantUuid = uuid, createdAt = now, updatedAt = now}) insertTenantConfigFeatures (defaultFeatures {tenantUuid = uuid, createdAt = now, updatedAt = now}) diff --git a/wizard-server/src/Wizard/Service/Tenant/Usage/UsageMapper.hs b/wizard-server/src/Wizard/Service/Tenant/Usage/UsageMapper.hs index 81ad2fb2c..34e2d83a4 100644 --- a/wizard-server/src/Wizard/Service/Tenant/Usage/UsageMapper.hs +++ b/wizard-server/src/Wizard/Service/Tenant/Usage/UsageMapper.hs @@ -7,7 +7,7 @@ import Wizard.Model.Tenant.Limit.TenantLimitBundle import WizardLib.Public.Api.Resource.Tenant.Usage.WizardUsageDTO toDTO :: TenantLimitBundle -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int -> Int64 -> WizardUsageDTO -toDTO limitBundle userCount activeUserCount knowledgeModelEditorCount kmCount qtnCount tmlCount tmlDraftCount docCount localeCount storageSize = +toDTO limitBundle userCount activeUserCount knowledgeModelEditorCount kmCount prjCount tmlCount tmlDraftCount docCount localeCount storageSize = WizardUsageDTO { users = UsageEntryDTO @@ -39,10 +39,10 @@ toDTO limitBundle userCount activeUserCount knowledgeModelEditorCount kmCount qt { current = fromIntegral tmlDraftCount , max = fromIntegral limitBundle.documentTemplateDrafts } - , questionnaires = + , projects = UsageEntryDTO - { current = fromIntegral qtnCount - , max = fromIntegral limitBundle.questionnaires + { current = fromIntegral prjCount + , max = fromIntegral limitBundle.projects } , documents = UsageEntryDTO diff --git a/wizard-server/src/Wizard/Service/Tenant/Usage/UsageService.hs b/wizard-server/src/Wizard/Service/Tenant/Usage/UsageService.hs index 82c9376e1..fc3fb934f 100644 --- a/wizard-server/src/Wizard/Service/Tenant/Usage/UsageService.hs +++ b/wizard-server/src/Wizard/Service/Tenant/Usage/UsageService.hs @@ -9,8 +9,8 @@ import Shared.Locale.Database.DAO.Locale.LocaleDAO import Wizard.Database.DAO.Document.DocumentDAO import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectFileDAO import Wizard.Database.DAO.Tenant.TenantLimitBundleDAO import Wizard.Database.DAO.User.UserDAO import Wizard.Model.Context.AclContext @@ -25,16 +25,16 @@ getUsage tenantUuid = do activeUserCount <- countActiveUsersWithTenant tenantUuid knowledgeModelEditorCount <- countKnowledgeModelEditorsWithTenant tenantUuid kmCount <- countPackagesGroupedByOrganizationIdAndKmIdWithTenant tenantUuid - qtnCount <- countQuestionnairesWithTenant tenantUuid + prjCount <- countProjectsWithTenant tenantUuid documentTemplateCount <- countDocumentTemplatesGroupedByOrganizationIdAndKmIdWithTenant tenantUuid documentTemplateDraftCount <- countDraftsGroupedByOrganizationIdAndKmIdWithTenant tenantUuid docCount <- countDocumentsWithTenant tenantUuid localeCount <- countLocalesGroupedByOrganizationIdAndLocaleIdWithTenant tenantUuid docSize <- sumDocumentFileSizeWithTenant tenantUuid templateAssetSize <- sumAssetFileSizeWithTenant tenantUuid - qtnFileSize <- sumQuestionnaireFileSizeWithTenant tenantUuid - let storageCount = docSize + templateAssetSize + qtnFileSize - return $ toDTO limitBundle userCount activeUserCount knowledgeModelEditorCount kmCount qtnCount documentTemplateCount documentTemplateDraftCount docCount localeCount storageCount + projectFileSize <- sumProjectFileSizeWithTenant tenantUuid + let storageCount = docSize + templateAssetSize + projectFileSize + return $ toDTO limitBundle userCount activeUserCount knowledgeModelEditorCount kmCount prjCount documentTemplateCount documentTemplateDraftCount docCount localeCount storageCount getUsageForCurrentTenant :: AppContextM WizardUsageDTO getUsageForCurrentTenant = do @@ -44,13 +44,13 @@ getUsageForCurrentTenant = do activeUserCount <- countActiveUsers knowledgeModelEditorCount <- countKnowledgeModelEditors kmCount <- countPackagesGroupedByOrganizationIdAndKmId - qtnCount <- countQuestionnaires + prjCount <- countProjects documentTemplateCount <- countDocumentTemplatesGroupedByOrganizationIdAndKmId documentTemplateDraftCount <- countDraftsGroupedByOrganizationIdAndKmId docCount <- countDocuments localeCount <- countLocalesGroupedByOrganizationIdAndLocaleId docSize <- sumDocumentFileSize templateAssetSize <- sumAssetFileSize - qtnFileSize <- sumQuestionnaireFileSize - let storageCount = docSize + templateAssetSize + qtnFileSize - return $ toDTO limitBundle userCount activeUserCount knowledgeModelEditorCount kmCount qtnCount documentTemplateCount documentTemplateDraftCount docCount localeCount storageCount + projectFileSize <- sumProjectFileSize + let storageCount = docSize + templateAssetSize + projectFileSize + return $ toDTO limitBundle userCount activeUserCount knowledgeModelEditorCount kmCount prjCount documentTemplateCount documentTemplateDraftCount docCount localeCount storageCount diff --git a/wizard-server/src/Wizard/Service/TypeHint/TypeHintService.hs b/wizard-server/src/Wizard/Service/TypeHint/TypeHintService.hs index a6dc5da8e..10ae6320a 100644 --- a/wizard-server/src/Wizard/Service/TypeHint/TypeHintService.hs +++ b/wizard-server/src/Wizard/Service/TypeHint/TypeHintService.hs @@ -14,7 +14,7 @@ import Wizard.Database.DAO.Common import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorEventDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelSecretDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Integration.Http.TypeHint.Runner import Wizard.Integration.Resource.TypeHint.TypeHintIDTO import Wizard.Localization.Messages.Public @@ -22,11 +22,11 @@ import Wizard.Model.Context.AclContext import Wizard.Model.Context.AppContext import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditor import Wizard.Model.KnowledgeModel.KnowledgeModelSecret -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Service.Config.Integration.IntegrationConfigService import Wizard.Service.KnowledgeModel.Editor.EditorMapper import Wizard.Service.KnowledgeModel.KnowledgeModelService -import Wizard.Service.Questionnaire.QuestionnaireAcl +import Wizard.Service.Project.ProjectAcl getLegacyTypeHints :: TypeHintLegacyRequestDTO -> AppContextM [TypeHintLegacyIDTO] getLegacyTypeHints reqDto = @@ -73,11 +73,11 @@ getTypeHints (KnowledgeModelEditorQuestionTypeHintRequest' reqDto) = case integration' of ApiIntegration' integration -> runApiIntegrationTypeHints integration question.variables reqDto.q _ -> throwError . UserError $ _ERROR_SERVICE_TYPEHINT__BAD_TYPE_OF_INTEGRATION -getTypeHints (QuestionnaireTypeHintRequest' reqDto) = +getTypeHints (ProjectTypeHintRequest' reqDto) = runInTransaction $ do - qtn <- findQuestionnaireByUuid reqDto.questionnaireUuid - checkEditPermissionToQtn qtn.visibility qtn.sharing qtn.permissions - km <- compileKnowledgeModel [] (Just qtn.knowledgeModelPackageId) [] + project <- findProjectByUuid reqDto.projectUuid + checkEditPermissionToProject project.visibility project.sharing project.permissions + km <- compileKnowledgeModel [] (Just project.knowledgeModelPackageId) [] question <- getQuestion km reqDto.questionUuid integration' <- getIntegration km question.integrationUuid case integration' of diff --git a/wizard-server/src/Wizard/Service/User/Group/UserGroupService.hs b/wizard-server/src/Wizard/Service/User/Group/UserGroupService.hs index a6c6e2cb5..526b930ce 100644 --- a/wizard-server/src/Wizard/Service/User/Group/UserGroupService.hs +++ b/wizard-server/src/Wizard/Service/User/Group/UserGroupService.hs @@ -9,16 +9,16 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.Pageable import Shared.Common.Model.Common.Sort import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectPermDAO import Wizard.Database.DAO.User.UserDAO import Wizard.Database.DAO.User.UserGroupDAO import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnairePerm -import Wizard.Model.Questionnaire.QuestionnaireSimpleWithPerm +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.ProjectSimpleWithPerm import Wizard.Model.User.UserGroupSuggestion -import Wizard.Service.Questionnaire.Collaboration.CollaborationService +import Wizard.Service.Project.Collaboration.ProjectCollaborationService import Wizard.Service.User.Group.UserGroupAcl import Wizard.Service.User.Group.UserGroupMapper import WizardLib.Public.Api.Resource.User.Group.UserGroupDetailDTO @@ -56,12 +56,12 @@ modifyUserGroup uuid name description private = do deleteUserGroup :: U.UUID -> AppContextM () deleteUserGroup userGroupUuid = runInTransaction $ do - -- 1. Recompute all questionnaire permissions for websockets - questionnaires <- findQuestionnairesSimpleWithPermByUserGroupUuid userGroupUuid - let questionnairesWithoutUserGroup = fmap (\qtn -> qtn {permissions = filter (\qtnPerm -> qtnPerm.memberUuid /= userGroupUuid) qtn.permissions}) questionnaires - traverse_ (\qtn -> updatePermsForOnlineUsers qtn.uuid qtn.visibility qtn.sharing qtn.permissions) questionnairesWithoutUserGroup - -- 2. Delete questionnaire perm group - deleteQuestionnairePermGroupByUserGroupUuid userGroupUuid + -- 1. Recompute all project permissions for websockets + projects <- findProjectsSimpleWithPermByUserGroupUuid userGroupUuid + let projectsWithoutUserGroup = fmap (\project -> project {permissions = filter (\projectPerm -> projectPerm.memberUuid /= userGroupUuid) project.permissions}) projects + traverse_ (\project -> updatePermsForOnlineUsers project.uuid project.visibility project.sharing project.permissions) projectsWithoutUserGroup + -- 2. Delete project perm group + deleteProjectPermGroupByUserGroupUuid userGroupUuid -- 3. Delete user group memberships deleteUserGroupMembershipsByUserGroupUuid userGroupUuid -- 4. Delete user group diff --git a/wizard-server/src/Wizard/Service/User/GroupMembership/UserGroupMembershipService.hs b/wizard-server/src/Wizard/Service/User/GroupMembership/UserGroupMembershipService.hs index e75039f13..506bab10a 100644 --- a/wizard-server/src/Wizard/Service/User/GroupMembership/UserGroupMembershipService.hs +++ b/wizard-server/src/Wizard/Service/User/GroupMembership/UserGroupMembershipService.hs @@ -9,11 +9,11 @@ import qualified Data.UUID as U import Shared.Common.Util.List import Wizard.Database.DAO.Common -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Model.Context.AppContext import Wizard.Model.Context.ContextLenses () -import Wizard.Model.Questionnaire.QuestionnaireSimpleWithPerm -import Wizard.Service.Questionnaire.Collaboration.CollaborationService +import Wizard.Model.Project.ProjectSimpleWithPerm +import Wizard.Service.Project.Collaboration.ProjectCollaborationService import Wizard.Service.User.GroupMembership.UserGroupMembershipMapper import WizardLib.Public.Database.DAO.User.UserGroupDAO import WizardLib.Public.Database.DAO.User.UserGroupMembershipDAO @@ -44,6 +44,6 @@ deleteUserGroupMembership userGroupUuid userUuids = do deleteUserGroupMembershipsByUserGroupUuidAndUserUuids userGroupUuid userUuids -- 2. Remove user group from cached websocket records removeUserGroupFromUsers userGroupUuid userUuids - -- 3. Recompute all questionnaire permissions for websockets - questionnaires <- findQuestionnairesSimpleWithPermByUserGroupUuid userGroupUuid - traverse_ (\qtn -> updatePermsForOnlineUsers qtn.uuid qtn.visibility qtn.sharing qtn.permissions) questionnaires + -- 3. Recompute all project permissions for websockets + projects <- findProjectsSimpleWithPermByUserGroupUuid userGroupUuid + traverse_ (\project -> updatePermsForOnlineUsers project.uuid project.visibility project.sharing project.permissions) projects diff --git a/wizard-server/src/Wizard/Util/Websocket.hs b/wizard-server/src/Wizard/Util/Websocket.hs index 0fbde3b71..f49a5fe18 100644 --- a/wizard-server/src/Wizard/Util/Websocket.hs +++ b/wizard-server/src/Wizard/Util/Websocket.hs @@ -67,7 +67,7 @@ exceptMyself :: U.UUID -> WebsocketRecord -> Bool exceptMyself myConnectionUuid record = record.connectionUuid /= myConnectionUuid filterByEntityId :: String -> WebsocketRecord -> Bool -filterByEntityId questionnaireUuid record = questionnaireUuid == record.entityId +filterByEntityId projectUuid record = projectUuid == record.entityId -- Accessors getCollaborators :: U.UUID -> String -> [WebsocketRecord] -> [OnlineUserInfo] diff --git a/wizard-server/src/Wizard/Worker/CronWorkers.hs b/wizard-server/src/Wizard/Worker/CronWorkers.hs index 4d4db6c42..c1fb6c842 100644 --- a/wizard-server/src/Wizard/Worker/CronWorkers.hs +++ b/wizard-server/src/Wizard/Worker/CronWorkers.hs @@ -15,9 +15,9 @@ import Wizard.Service.Document.DocumentCleanService import Wizard.Service.Feedback.FeedbackService import Wizard.Service.KnowledgeModel.Editor.Event.EditorEventService hiding (squash) import Wizard.Service.PersistentCommand.PersistentCommandService -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentService -import Wizard.Service.Questionnaire.Event.QuestionnaireEventService hiding (squash) -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.Comment.ProjectCommentService +import Wizard.Service.Project.Event.ProjectEventService hiding (squash) +import Wizard.Service.Project.ProjectService import Wizard.Service.Registry.RegistryService import Wizard.Service.UserToken.ApiKey.ApiKeyService import WizardLib.Public.Service.TemporaryFile.TemporaryFileService @@ -32,8 +32,8 @@ workers = , squashKnowledgeModelEditorEventsWorker , persistentCommandRetryWorker , persistentCommandRetryLambdaWorker - , cleanQuestionnaireWorker - , squashQuestionnaireEventsWorker + , cleanProjectWorker + , squashProjectEventsWorker , assigneeNotificationWorker , registrySyncWorker , temporaryFileWorker @@ -69,9 +69,9 @@ documentWorker :: CronWorker BaseContext AppContextM documentWorker = CronWorker { name = "DocumentWorker" - , condition = (.serverConfig.questionnaire.clean.enabled) + , condition = (.serverConfig.project.clean.enabled) , cronDefault = "0 */4 * * *" - , cron = (.serverConfig.questionnaire.clean.cron) + , cron = (.serverConfig.project.clean.cron) , function = cleanDocuments , wrapInTransaction = True } @@ -120,25 +120,25 @@ persistentCommandRetryLambdaWorker = , wrapInTransaction = False } -cleanQuestionnaireWorker :: CronWorker BaseContext AppContextM -cleanQuestionnaireWorker = +cleanProjectWorker :: CronWorker BaseContext AppContextM +cleanProjectWorker = CronWorker - { name = "CleanQuestionnaireWorker" - , condition = (.serverConfig.questionnaire.clean.enabled) + { name = "CleanProjectWorker" + , condition = (.serverConfig.project.clean.enabled) , cronDefault = "15 */4 * * *" - , cron = (.serverConfig.questionnaire.clean.cron) - , function = cleanQuestionnaires + , cron = (.serverConfig.project.clean.cron) + , function = cleanProjects , wrapInTransaction = True } -squashQuestionnaireEventsWorker :: CronWorker BaseContext AppContextM -squashQuestionnaireEventsWorker = +squashProjectEventsWorker :: CronWorker BaseContext AppContextM +squashProjectEventsWorker = CronWorker - { name = "SquashQuestionnaireEventsWorker" - , condition = (.serverConfig.questionnaire.squash.enabled) + { name = "SquashProjectEventsWorker" + , condition = (.serverConfig.project.squash.enabled) , cronDefault = "*/4 * * * *" - , cron = (.serverConfig.questionnaire.squash.cron) - , function = squashQuestionnaireEvents + , cron = (.serverConfig.project.squash.cron) + , function = squashProjectEvents , wrapInTransaction = True } @@ -146,9 +146,9 @@ assigneeNotificationWorker :: CronWorker BaseContext AppContextM assigneeNotificationWorker = CronWorker { name = "AssigneeNotificationWorker" - , condition = (.serverConfig.questionnaire.assigneeNotification.enabled) + , condition = (.serverConfig.project.assigneeNotification.enabled) , cronDefault = "*/5 * * * *" - , cron = (.serverConfig.questionnaire.assigneeNotification.cron) + , cron = (.serverConfig.project.assigneeNotification.cron) , function = sendNotificationToNewAssignees , wrapInTransaction = True } diff --git a/wizard-server/test/Spec.hs b/wizard-server/test/Spec.hs index e02fa8616..185d0eb87 100644 --- a/wizard-server/test/Spec.hs +++ b/wizard-server/test/Spec.hs @@ -25,7 +25,6 @@ import Wizard.Service.User.UserMapper import Wizard.Specs.API.ApiKey.APISpec import Wizard.Specs.API.AppKey.APISpec -import Wizard.Specs.API.CommentThread.APISpec import Wizard.Specs.API.Config.APISpec import Wizard.Specs.API.Document.APISpec import Wizard.Specs.API.DocumentTemplate.APISpec @@ -42,17 +41,11 @@ import Wizard.Specs.API.KnowledgeModelEditor.APISpec import Wizard.Specs.API.KnowledgeModelPackage.APISpec import Wizard.Specs.API.KnowledgeModelSecret.APISpec import Wizard.Specs.API.Locale.APISpec -import qualified Wizard.Specs.API.Migration.KnowledgeModel.APISpec as KM_MigrationAPI -import qualified Wizard.Specs.API.Migration.Questionnaire.APISpec as QTN_MigrationAPI import Wizard.Specs.API.Prefab.APISpec -import Wizard.Specs.API.Questionnaire.APISpec -import Wizard.Specs.API.Questionnaire.Comment.APISpec -import Wizard.Specs.API.Questionnaire.Event.APISpec -import Wizard.Specs.API.Questionnaire.ProjectTag.APISpec -import Wizard.Specs.API.Questionnaire.User.APISpec -import Wizard.Specs.API.Questionnaire.Version.APISpec -import Wizard.Specs.API.QuestionnaireAction.APISpec -import Wizard.Specs.API.QuestionnaireImporter.APISpec +import Wizard.Specs.API.Project.APISpec +import Wizard.Specs.API.ProjectAction.APISpec +import Wizard.Specs.API.ProjectCommentThread.APISpec +import Wizard.Specs.API.ProjectImporter.APISpec import Wizard.Specs.API.Submission.APISpec import Wizard.Specs.API.Swagger.APISpec import Wizard.Specs.API.Tenant.APISpec @@ -78,15 +71,15 @@ import qualified Wizard.Specs.Service.KnowledgeModel.Migration.Migrator.Sanitize import Wizard.Specs.Service.KnowledgeModel.Package.PackageUtilSpec import Wizard.Specs.Service.KnowledgeModel.Package.PackageValidationSpec import Wizard.Specs.Service.KnowledgeModel.Squash.SquasherSpec -import Wizard.Specs.Service.Questionnaire.Collaboration.CollaborationAclSpec -import Wizard.Specs.Service.Questionnaire.Compiler.CompilerServiceSpec -import Wizard.Specs.Service.Questionnaire.Event.QuestionnaireEventServiceSpec -import qualified Wizard.Specs.Service.Questionnaire.Migration.Migrator.ChangeQTypeSanitizerSpec as QTN_ChangeQTypeSanitizer -import qualified Wizard.Specs.Service.Questionnaire.Migration.Migrator.MoveSanitizerSpec as QTN_MoveSanitizerSpec -import qualified Wizard.Specs.Service.Questionnaire.Migration.Migrator.SanitizerSpec as QTN_SanitizerSpec -import Wizard.Specs.Service.Questionnaire.QuestionnaireAclSpec -import Wizard.Specs.Service.Questionnaire.QuestionnaireServiceSpec -import Wizard.Specs.Service.Questionnaire.QuestionnaireValidationSpec +import Wizard.Specs.Service.Project.Collaboration.ProjectCollaborationAclSpec +import Wizard.Specs.Service.Project.Compiler.ProjectCompilerServiceSpec +import Wizard.Specs.Service.Project.Event.ProjectEventServiceSpec +import qualified Wizard.Specs.Service.Project.Migration.Migrator.ChangeQTypeSanitizerSpec as PRJ_ChangeQTypeSanitizer +import qualified Wizard.Specs.Service.Project.Migration.Migrator.MoveSanitizerSpec as PRJ_MoveSanitizerSpec +import qualified Wizard.Specs.Service.Project.Migration.Migrator.SanitizerSpec as PRJ_SanitizerSpec +import Wizard.Specs.Service.Project.ProjectAclSpec +import Wizard.Specs.Service.Project.ProjectServiceSpec +import Wizard.Specs.Service.Project.ProjectValidationSpec import Wizard.Specs.Service.Report.ReportGeneratorSpec import Wizard.Specs.Service.Tenant.Config.TenantConfigValidationSpec import Wizard.Specs.Service.Tenant.TenantValidationSpec @@ -94,7 +87,7 @@ import Wizard.Specs.Service.User.UserServiceSpec import Wizard.Specs.Util.JinjaSpec import Wizard.Specs.Websocket.Common import Wizard.Specs.Websocket.KnowledgeModelEditor.Detail.WebsocketSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.WebsocketSpec +import Wizard.Specs.Websocket.Project.Detail.WebsocketSpec import Wizard.TestMigration hLoadConfig fileName loadFn callback = do @@ -167,6 +160,10 @@ main = describe "SERVICE" $ do describe "Document Template" documentTemplateUtilSpec describe "KnowledgeModel" $ do + describe "Metamodel" $ + describe + "Migration" + eventMigratorSpec describe "Compiler" $ do describe "Modifier" modifierSpec compilerSpec @@ -174,16 +171,14 @@ main = describe "Squash" $ do squasherSpec knowledgeModelFilterSpec describe "Migration" $ do - describe "Metamodel" $ describe "Migrator" $ do - eventMigratorSpec - describe "Questionnaire" $ describe "Migrator" $ do - QTN_ChangeQTypeSanitizer.sanitizerSpec - QTN_MoveSanitizerSpec.sanitizerSpec - describe "Questionnaire" $ do + describe "Project" $ describe "Migration" $ do + PRJ_ChangeQTypeSanitizer.sanitizerSpec + PRJ_MoveSanitizerSpec.sanitizerSpec + describe "Project" $ do describe "Event" $ do - questionnaireCompilerServiceSpec - questionnaireEventServiceSpec - questionnaireValidationSpec + projectCompilerServiceSpec + projectEventServiceSpec + projectValidationSpec describe "Report" reportGeneratorSpec describe "Tenant" $ do describe "Config" tenantConfigValidationSpec @@ -192,7 +187,6 @@ main = describe "API" $ do apiKeyAPI baseContext appContext appKeyAPI baseContext appContext - commentThreadAPI baseContext appContext configAPI baseContext appContext documentAPI baseContext appContext documentTemplateAPI baseContext appContext @@ -209,17 +203,11 @@ main = knowledgeModelPackageAPI baseContext appContext knowledgeModelSecretAPI baseContext appContext localeAPI baseContext appContext - KM_MigrationAPI.migrationAPI baseContext appContext - QTN_MigrationAPI.migrationAPI baseContext appContext prefabAPI baseContext appContext - questionnaireAPI baseContext appContext - questionnaireCommentAPI baseContext appContext - questionnaireEventAPI baseContext appContext - questionnaireProjectTagAPI baseContext appContext - questionnaireUserAPI baseContext appContext - questionnaireVersionAPI baseContext appContext - questionnaireActionAPI baseContext appContext - questionnaireImporterAPI baseContext appContext + projectAPI baseContext appContext + projectActionAPI baseContext appContext + projectCommentThreadAPI baseContext appContext + projectImporterAPI baseContext appContext submissionAPI baseContext appContext swaggerAPI baseContext appContext tenantAPI baseContext appContext @@ -235,23 +223,22 @@ main = describe "SERVICE" $ do documentIntegrationSpec appContext describe "KnowledgeModel" $ do - describe "Editor" $ knowledgeModelEditorServiceSpec appContext - describe "Migration" $ - describe "Migrator" $ do + describe "Editor" $ do + describe "Migration" $ do migratorSpec appContext KM_SanitizerSpec.sanitizerSpec appContext + knowledgeModelEditorServiceSpec appContext describe "Package" $ packageValidationSpec appContext - describe "Questionnaire" $ do + describe "Project" $ do describe "Migration" $ - describe "Migrator" $ - QTN_SanitizerSpec.sanitizerIntegrationSpec appContext - questionnaireAclSpec appContext - questionnaireCollaborationAclSpec appContext - questionnaireServiceSpec appContext + PRJ_SanitizerSpec.sanitizerIntegrationSpec appContext + projectAclSpec appContext + projectCollaborationAclSpec appContext + projectServiceSpec appContext userServiceIntegrationSpec appContext describe "UTIL" $ do jinjaSpec describe "WEBSOCKET" $ do knowledgeModelEditorWebsocketAPI appContext - questionnaireWebsocketAPI appContext + projectWebsocketAPI appContext ) diff --git a/wizard-server/test/Wizard/Specs/API/CommentThread/APISpec.hs b/wizard-server/test/Wizard/Specs/API/CommentThread/APISpec.hs deleted file mode 100644 index 5fe223b2c..000000000 --- a/wizard-server/test/Wizard/Specs/API/CommentThread/APISpec.hs +++ /dev/null @@ -1,13 +0,0 @@ -module Wizard.Specs.API.CommentThread.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common - -import Wizard.Specs.API.CommentThread.List_GET - -commentThreadAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "COMMENT THREAD API Spec" $ do - list_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Config/Common.hs b/wizard-server/test/Wizard/Specs/API/Config/Common.hs index 6c17a3da3..34f1cc2ad 100644 --- a/wizard-server/test/Wizard/Specs/API/Config/Common.hs +++ b/wizard-server/test/Wizard/Specs/API/Config/Common.hs @@ -12,11 +12,11 @@ import Wizard.Specs.Common -- -------------------------------- -- ASSERTS -- -------------------------------- -assertExistenceOfTenantConfigQuestionnaireInDB appContext tcQuestionnaire = do - eitherTcQuestionnaire <- runInContextIO getCurrentTenantConfigQuestionnaire appContext - liftIO $ isRight eitherTcQuestionnaire `shouldBe` True - let (Right tcQuestionnaireFromDb) = eitherTcQuestionnaire - compareDtos tcQuestionnaireFromDb tcQuestionnaire +assertExistenceOfTenantConfigProjectInDB appContext tcProject = do + eitherTcProject <- runInContextIO getCurrentTenantConfigProject appContext + liftIO $ isRight eitherTcProject `shouldBe` True + let (Right tcProjectFromDb) = eitherTcProject + compareDtos tcProjectFromDb tcProject -- -------------------------------- -- COMPARATORS diff --git a/wizard-server/test/Wizard/Specs/API/Config/List_Bootstrap_GET.hs b/wizard-server/test/Wizard/Specs/API/Config/List_Bootstrap_GET.hs index a57572212..2c6fdd7c3 100644 --- a/wizard-server/test/Wizard/Specs/API/Config/List_Bootstrap_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Config/List_Bootstrap_GET.hs @@ -54,7 +54,7 @@ create_test_200 title appContext authHeaders mUserProfile = -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = toClientConfigDTO appContext.serverConfig defaultOrganization defaultAuthentication defaultPrivacyAndSupport defaultDashboardAndLoginScreen defaultLookAndFeel defaultRegistry defaultQuestionnaire defaultSubmission defaultFeatures defaultOwl mUserProfile [] defaultTenant + let expDto = toClientConfigDTO appContext.serverConfig defaultOrganization defaultAuthentication defaultPrivacyAndSupport defaultDashboardAndLoginScreen defaultLookAndFeel defaultRegistry defaultProject defaultSubmission defaultFeatures defaultOwl mUserProfile [] defaultTenant let expBody = encode expDto -- AND: Run migrations runInContextIO U.runMigration appContext diff --git a/wizard-server/test/Wizard/Specs/API/Document/Common.hs b/wizard-server/test/Wizard/Specs/API/Document/Common.hs index 5156e449f..c026213a6 100644 --- a/wizard-server/test/Wizard/Specs/API/Document/Common.hs +++ b/wizard-server/test/Wizard/Specs/API/Document/Common.hs @@ -23,7 +23,7 @@ import Wizard.Specs.Common assertExistenceOfDocumentInDB appContext reqDto = do docFromDb <- getFirstFromDB findDocuments appContext liftIO $ docFromDb.name `shouldBe` reqDto.name - liftIO $ docFromDb.questionnaireUuid `shouldBe` Just reqDto.questionnaireUuid + liftIO $ docFromDb.projectUuid `shouldBe` Just reqDto.projectUuid liftIO $ docFromDb.documentTemplateId `shouldBe` reqDto.documentTemplateId liftIO $ docFromDb.formatUuid `shouldBe` reqDto.formatUuid @@ -41,5 +41,5 @@ assertAbsenceOfDocumentInDB appContext doc = do -- -------------------------------- compareDocumentDtos resDto expDto = do liftIO $ resDto.name `shouldBe` expDto.name - liftIO $ (fromJust resDto.questionnaire).uuid `shouldBe` expDto.questionnaireUuid + liftIO $ (fromJust resDto.project).uuid `shouldBe` expDto.projectUuid liftIO $ (fmap (.uuid) resDto.format) `shouldBe` Just expDto.formatUuid diff --git a/wizard-server/test/Wizard/Specs/API/Document/Detail_Available_Submission_Services_GET.hs b/wizard-server/test/Wizard/Specs/API/Document/Detail_Available_Submission_Services_GET.hs index 392605779..fa878a18d 100644 --- a/wizard-server/test/Wizard/Specs/API/Document/Detail_Available_Submission_Services_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Document/Detail_Available_Submission_Services_GET.hs @@ -13,18 +13,18 @@ import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Database.Migration.Development.Document.Data.Documents import Wizard.Database.Migration.Development.Document.DocumentMigration as DOC_Migration import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import Wizard.Database.Migration.Development.Tenant.Data.TenantConfigs import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Service.Tenant.Config.ConfigMapper import SharedTest.Specs.API.Common @@ -57,10 +57,10 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_200 appContext = do - create_test_200 "HTTP 200 OK (Owner, Private)" appContext questionnaire1 [reqAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext questionnaire3 [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Owner, Private)" appContext project1 [reqAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext project3 [reqNonAdminAuthHeader] -create_test_200 title appContext qtn authHeader = +create_test_200 title appContext project authHeader = it title $ -- GIVEN: Prepare request do @@ -73,11 +73,11 @@ create_test_200 title appContext qtn authHeader = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO (insertProject project10) appContext runInContextIO DOC_Migration.runMigration appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext runInContextIO (insertOrUpdateConfigSubmissionService defaultSubmissionService) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -98,17 +98,17 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 + project2 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do @@ -121,11 +121,11 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext runInContextIO DOC_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project7) appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/Document/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/Document/Detail_DELETE.hs index c452bf0b3..867c60347 100644 --- a/wizard-server/test/Wizard/Specs/API/Document/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/Document/Detail_DELETE.hs @@ -13,16 +13,16 @@ import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.Migration.Development.Document.Data.Documents import Wizard.Database.Migration.Development.Document.DocumentMigration as DOC_Migration import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common @@ -54,10 +54,10 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_204 appContext = do - create_test_204 "HTTP 204 NO CONTENT (Owner, Private)" appContext questionnaire1 [reqAuthHeader] - create_test_204 "HTTP 204 NO CONTENT (Non-Owner, VisibleEdit)" appContext questionnaire3 [reqNonAdminAuthHeader] + create_test_204 "HTTP 204 NO CONTENT (Owner, Private)" appContext project1 [reqAuthHeader] + create_test_204 "HTTP 204 NO CONTENT (Non-Owner, VisibleEdit)" appContext project3 [reqNonAdminAuthHeader] -create_test_204 title appContext qtn authHeader = +create_test_204 title appContext project authHeader = it title $ -- GIVEN: Prepare request do @@ -69,11 +69,11 @@ create_test_204 title appContext qtn authHeader = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO (insertProject project10) appContext runInContextIO DOC_Migration.runMigration appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -95,17 +95,17 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 + project2 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do @@ -118,11 +118,11 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext runInContextIO DOC_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project7) appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/Document/List_GET.hs b/wizard-server/test/Wizard/Specs/API/Document/List_GET.hs index 61338179c..fa2e7784b 100644 --- a/wizard-server/test/Wizard/Specs/API/Document/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Document/List_GET.hs @@ -20,8 +20,8 @@ import Wizard.Api.Resource.Document.DocumentDTO import Wizard.Database.Migration.Development.Document.Data.Documents import Wizard.Database.Migration.Development.Document.DocumentMigration as DOC_Migration import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext import Wizard.Service.Document.DocumentMapper @@ -62,16 +62,16 @@ test_200 appContext = do ( Page "documents" (PageMetadata 20 3 1 0) - [ toDTOWithDocTemplate doc1 questionnaire1 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple - , toDTOWithDocTemplate doc2 questionnaire2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple - , toDTOWithDocTemplate doc3 questionnaire2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple + [ toDTOWithDocTemplate doc1 project1 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple + , toDTOWithDocTemplate doc2 project2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple + , toDTOWithDocTemplate doc3 project2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple ] ) create_test_200 "HTTP 200 OK (query)" appContext "/wizard-api/documents?q=My exported document 2" - (Page "documents" (PageMetadata 20 1 1 0) [toDTOWithDocTemplate doc2 questionnaire2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple]) + (Page "documents" (PageMetadata 20 1 1 0) [toDTOWithDocTemplate doc2 project2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple]) create_test_200 "HTTP 200 OK (query for non-existing)" appContext @@ -80,13 +80,13 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (documentTemplateId)" appContext - "/wizard-api/documents?documentTemplateId=global:questionnaire-report:1.0.0&sort=name,asc" + "/wizard-api/documents?documentTemplateId=global:project-report:1.0.0&sort=name,asc" ( Page "documents" (PageMetadata 20 3 1 0) - [ toDTOWithDocTemplate doc1 questionnaire1 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple - , toDTOWithDocTemplate doc2 questionnaire2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple - , toDTOWithDocTemplate doc3 questionnaire2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple + [ toDTOWithDocTemplate doc1 project1 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple + , toDTOWithDocTemplate doc2 project2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple + , toDTOWithDocTemplate doc3 project2 (Just "Version 1") [] wizardDocumentTemplate formatJsonSimple ] ) @@ -102,7 +102,7 @@ create_test_200 title appContext reqUrl expDto = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext runInContextIO DOC_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -132,7 +132,7 @@ test_403 appContext = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext runInContextIO DOC_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody diff --git a/wizard-server/test/Wizard/Specs/API/Document/List_POST.hs b/wizard-server/test/Wizard/Specs/API/Document/List_POST.hs index b4c998c4a..0af702778 100644 --- a/wizard-server/test/Wizard/Specs/API/Document/List_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Document/List_POST.hs @@ -27,14 +27,14 @@ import Wizard.Api.Resource.Document.DocumentJM () import Wizard.Database.DAO.Document.DocumentDAO import Wizard.Database.Migration.Development.Document.Data.Documents import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireEventLenses () -import Wizard.Model.Questionnaire.QuestionnaireSimple +import Wizard.Model.Project.Event.ProjectEventLenses () +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectSimple import SharedTest.Specs.API.Common import Wizard.Specs.API.Common @@ -61,30 +61,30 @@ reqUrl = "/wizard-api/documents" reqHeadersT authHeader = reqCtHeader : authHeader -reqDtoT qtn qtnEvents = +reqDtoT project projectEvents = DocumentCreateDTO { name = "Document" - , questionnaireUuid = qtn.uuid - , questionnaireEventUuid = Just . getUuid . last $ qtnEvents + , projectUuid = project.uuid + , projectEventUuid = Just . getUuid . last $ projectEvents , documentTemplateId = doc1.documentTemplateId , formatUuid = doc1.formatUuid } -reqBodyT qtn qtnEvents = encode $ reqDtoT qtn qtnEvents +reqBodyT project projectEvents = encode $ reqDtoT project projectEvents -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_201 appContext = do - create_test_201 "HTTP 201 CREATED (Owner, Private)" appContext questionnaire1 questionnaire1Events [reqAuthHeader] - create_test_201 "HTTP 201 CREATED (Non-Owner, VisibleEdit)" appContext questionnaire3 questionnaire3Events [reqNonAdminAuthHeader] + create_test_201 "HTTP 201 CREATED (Owner, Private)" appContext project1 project1Events [reqAuthHeader] + create_test_201 "HTTP 201 CREATED (Non-Owner, VisibleEdit)" appContext project3 project3Events [reqNonAdminAuthHeader] -create_test_201 title appContext qtn qtnEvents authHeader = +create_test_201 title appContext project projectEvents authHeader = it title $ -- GIVEN: Prepare request do let reqHeaders = reqHeadersT authHeader - let reqDto = reqDtoT qtn qtnEvents + let reqDto = reqDtoT project projectEvents let reqBody = encode reqDto -- AND: Prepare expectation let expStatus = 201 @@ -92,7 +92,7 @@ create_test_201 title appContext qtn qtnEvents authHeader = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext runInContextIO deleteDocuments appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -114,7 +114,7 @@ test_400 appContext = do -- GIVEN: Prepare request do let reqHeaders = reqHeadersT [reqAuthHeader] - let reqDto = reqDtoT questionnaire1 questionnaire1Events + let reqDto = reqDtoT project1 project1Events let reqBody = encode reqDto -- AND: Prepare expectation let expStatus = 400 @@ -126,7 +126,7 @@ test_400 appContext = do -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext runInContextIO (updateDocumentTemplateById (wizardDocumentTemplate {metamodelVersion = SemVer2Tuple 1 0})) appContext runInContextIO deleteDocuments appContext -- WHEN: Call API @@ -141,7 +141,7 @@ test_400 appContext = do -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] (reqBodyT questionnaire1 questionnaire1Events) +test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] (reqBodyT project1 project1Events) -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -150,24 +150,24 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 - questionnaire1Events + project1 + project1Events [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 - questionnaire2Events + project2 + project2Events [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") -create_test_403 title appContext qtn qtnEvents authHeader errorMessage = +create_test_403 title appContext project projectEvents authHeader errorMessage = it title $ -- GIVEN: Prepare request do let reqHeaders = reqHeadersT authHeader - let reqDto = reqDtoT qtn qtnEvents + let reqDto = reqDtoT project projectEvents let reqBody = encode reqDto -- AND: Prepare expectation let expStatus = 403 @@ -177,7 +177,7 @@ create_test_403 title appContext qtn qtnEvents authHeader errorMessage = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext runInContextIO deleteDocuments appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_DELETE.hs index 773f9f461..5e327242d 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_DELETE.hs @@ -14,7 +14,7 @@ import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import Wizard.Localization.Messages.Public import Wizard.Model.Context.AppContext @@ -39,7 +39,7 @@ detail_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrl = "/wizard-api/document-templates/global:questionnaire-report:1.0.0" +reqUrl = "/wizard-api/document-templates/global:project-report:1.0.0" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -85,11 +85,11 @@ test_400 appContext = UserError $ _ERROR_VALIDATION__TML_CANT_BE_DELETED_BECAUSE_IT_IS_USED_BY_SOME_OTHER_ENTITY wizardDocumentTemplate.tId - "questionnaire" + "project" let expBody = encode expDto -- AND: Run migrations runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_GET.hs index 3f0fcfb4d..14e3132e6 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_GET.hs @@ -33,7 +33,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/document-templates/global:questionnaire-report:1.0.0" +reqUrl = "/wizard-api/document-templates/global:project-report:1.0.0" reqHeadersT reqAuthHeader = reqAuthHeader @@ -72,8 +72,8 @@ create_test_200 title appContext reqAuthHeader = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/document-templates/global:questionnaire-report:9.9.9" + "/wizard-api/document-templates/global:project-report:9.9.9" (reqHeadersT [reqAuthHeader]) reqBody "document_template" - [("id", "global:questionnaire-report:9.9.9")] + [("id", "global:project-report:9.9.9")] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_PUT.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_PUT.hs index 9481ba897..9e1606111 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/Detail_PUT.hs @@ -38,7 +38,7 @@ detail_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/document-templates/global:questionnaire-report:1.0.0" +reqUrl = "/wizard-api/document-templates/global:project-report:1.0.0" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_DELETE.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_DELETE.hs index 2094c5672..9dbd99c02 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_DELETE.hs @@ -15,7 +15,7 @@ import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates import Shared.DocumentTemplate.Model.DocumentTemplate.DocumentTemplate import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Localization.Messages.Public import Wizard.Model.Context.AppContext @@ -39,7 +39,7 @@ list_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrl = "/wizard-api/document-templates?organizationId=global&templateId=questionnaire-report" +reqUrl = "/wizard-api/document-templates?organizationId=global&templateId=project-report" reqHeaders = [reqAuthHeader, reqCtHeader] @@ -79,11 +79,11 @@ test_400 appContext = UserError $ _ERROR_VALIDATION__TML_CANT_BE_DELETED_BECAUSE_IT_IS_USED_BY_SOME_OTHER_ENTITY wizardDocumentTemplate.tId - "questionnaire" + "project" let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_GET.hs index 2271152de..d5aeaf904 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_GET.hs @@ -56,19 +56,19 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (query 'q')" appContext - "/wizard-api/document-templates?q=Questionnaire Report" + "/wizard-api/document-templates?q=Project Report" reqAuthHeader (Page "documentTemplates" (PageMetadata 20 1 1 0) [wizardDocumentTemplateSimpleDTO]) create_test_200 "HTTP 200 OK (query 'q' for non-existing)" appContext - "/wizard-api/document-templates?q=Non-existing Questionnaire Report" + "/wizard-api/document-templates?q=Non-existing Project Report" reqAuthHeader (Page "documentTemplates" (PageMetadata 20 0 0 0) ([] :: [DocumentTemplateSimpleDTO])) create_test_200 "HTTP 200 OK (query 'templateId')" appContext - "/wizard-api/document-templates?templateId=questionnaire-report" + "/wizard-api/document-templates?templateId=project-report" reqAuthHeader (Page "documentTemplates" (PageMetadata 20 1 1 0) [wizardDocumentTemplateSimpleDTO]) create_test_200 diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_Suggestions_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_Suggestions_GET.hs index e821e9a5e..a8c765e35 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_Suggestions_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplate/List_Suggestions_GET.hs @@ -62,7 +62,7 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (query 'q')" appContext - "/wizard-api/document-templates/suggestions?q=Questionnaire Report" + "/wizard-api/document-templates/suggestions?q=Project Report" reqAuthHeader (Page "documentTemplates" (PageMetadata 20 1 1 0) [toSuggestionDTO wizardDocumentTemplate wizardDocumentTemplateFormats]) create_test_200 @@ -80,7 +80,7 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (query 'q' for non-existing)" appContext - "/wizard-api/document-templates/suggestions?q=Non-existing Questionnaire Report" + "/wizard-api/document-templates/suggestions?q=Non-existing Project Report" reqAuthHeader (Page "documentTemplates" (PageMetadata 20 0 0 0) ([] :: [DocumentTemplateSuggestionDTO])) diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_DELETE.hs index 8ca2f4e68..bfda0f620 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_DELETE.hs @@ -34,7 +34,7 @@ detail_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -81,7 +81,7 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" + "/wizard-api/document-template-drafts/global:project-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" (reqHeadersT reqAuthHeader) reqBody "document_template_asset" diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_GET.hs index 0a0c1d8f6..f2cac0cf1 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_GET.hs @@ -38,7 +38,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -84,7 +84,7 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" + "/wizard-api/document-template-drafts/global:project-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" (reqHeadersT reqAuthHeader) reqBody "document_template_asset" diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_PUT.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_PUT.hs index 6443a0324..7c1196f3c 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/Detail_PUT.hs @@ -37,7 +37,7 @@ detail_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/assets/6c367648-9b60-4307-93b2-0851938adee0" reqHeaders = [reqCtHeader, reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/List_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/List_GET.hs index aff08c258..1b4694360 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Asset/List_GET.hs @@ -37,7 +37,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/assets" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/assets" reqHeadersT reqAuthHeader = [reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_DELETE.hs index d6932be7a..30abc608b 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_DELETE.hs @@ -32,7 +32,7 @@ detail_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:2.0.0" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:2.0.0" reqHeadersT reqAuthHeader = [reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_Documents_Preview_Settings_PUT.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_Documents_Preview_Settings_PUT.hs index 0dcc00e7d..969c830ed 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_Documents_Preview_Settings_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_Documents_Preview_Settings_PUT.hs @@ -16,10 +16,10 @@ import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataChang import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataDTO import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDataJM () import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDataDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateDrafts import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Model.Context.AppContext import SharedTest.Specs.API.Common @@ -43,7 +43,7 @@ detail_documents_preview_settings_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:2.0.0/documents/preview/settings" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:2.0.0/documents/preview/settings" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] @@ -69,8 +69,8 @@ create_test_200 title appContext reqAuthHeader = runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire1) appContext - runInContextIO (insertQuestionnaire questionnaire2) appContext + runInContextIO (insertProject project1) appContext + runInContextIO (insertProject project2) appContext runInContextIO (insertDraftData wizardDocumentTemplateDraftData) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_GET.hs index 9cf533ba9..878aa70c4 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_GET.hs @@ -17,14 +17,14 @@ import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDataDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateDrafts import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.Registry.RegistryMigration as R_Migration import Wizard.Model.Context.AppContext import Wizard.Service.DocumentTemplate.Draft.DocumentTemplateDraftMapper -import Wizard.Service.Questionnaire.QuestionnaireMapper +import Wizard.Service.Project.ProjectMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common @@ -46,7 +46,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:2.0.0" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:2.0.0" reqHeaders = [reqAuthHeader] @@ -61,13 +61,13 @@ test_200 appContext = do -- GIVEN: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = toDraftDetail wizardDocumentTemplateDraft wizardDocumentTemplateDraftFormats wizardDocumentTemplateDraftData (Just . toSuggestion $ questionnaire1) Nothing + let expDto = toDraftDetail wizardDocumentTemplateDraft wizardDocumentTemplateDraftFormats wizardDocumentTemplateDraftData (Just . toSuggestion $ project1) Nothing let expBody = encode expDto -- AND: Run migrations runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire1) appContext + runInContextIO (insertProject project1) appContext runInContextIO (insertDraftData wizardDocumentTemplateDraftData) appContext runInContextIO R_Migration.runMigration appContext -- WHEN: Call API @@ -93,8 +93,8 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/document-template-drafts/global:questionnaire-report:9.9.9" + "/wizard-api/document-template-drafts/global:project-report:9.9.9" reqHeaders reqBody "document_template" - [("id", "global:questionnaire-report:9.9.9"), ("phase", "DraftDocumentTemplatePhase")] + [("id", "global:project-report:9.9.9"), ("phase", "DraftDocumentTemplatePhase")] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_PUT.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_PUT.hs index 9b5d04de0..3eed98c90 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Detail_PUT.hs @@ -18,10 +18,10 @@ import Wizard.Api.Resource.DocumentTemplate.DocumentTemplateChangeJM () import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftChangeDTO import Wizard.Api.Resource.DocumentTemplate.Draft.DocumentTemplateDraftDetailJM () import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDataDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplateDrafts import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Model.Context.AppContext import Wizard.Model.DocumentTemplate.DocumentTemplateDraftDetail @@ -46,7 +46,7 @@ detail_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:2.0.0" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:2.0.0" reqHeaders = [reqCtHeader, reqAuthHeader] @@ -84,7 +84,7 @@ create_test_200 title appContext reqDto expDto = runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire1) appContext + runInContextIO (insertProject project1) appContext runInContextIO (insertDraftData wizardDocumentTemplateDraftData) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders (reqBodyT reqDto) diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_DELETE.hs index c807bbc3c..ab31788cf 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_DELETE.hs @@ -34,7 +34,7 @@ detail_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -81,7 +81,7 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" + "/wizard-api/document-template-drafts/global:project-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" (reqHeadersT reqAuthHeader) reqBody "document_template_file" diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_GET.hs index 2af011897..f2de53e9c 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_GET.hs @@ -34,7 +34,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -80,7 +80,7 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files/deab6c38-aeac-4b17-a501-4365a0a70176" + "/wizard-api/document-template-drafts/global:project-report:1.0.0/files/deab6c38-aeac-4b17-a501-4365a0a70176" (reqHeadersT reqAuthHeader) reqBody "document_template_file" diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_PUT.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_PUT.hs index ed15596ad..3e6b46dcd 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/Detail_PUT.hs @@ -38,7 +38,7 @@ detail_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/files/7f83f7ce-4096-49a5-88d1-bd509bf72a9b" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] @@ -88,7 +88,7 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files/deab6c38-aeac-4b17-a501-4365a0a70176" + "/wizard-api/document-template-drafts/global:project-report:1.0.0/files/deab6c38-aeac-4b17-a501-4365a0a70176" (reqHeadersT reqAuthHeader) reqBody "document_template_file" diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_GET.hs index 3e8db5fda..69da58264 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_GET.hs @@ -34,7 +34,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/files" reqHeadersT reqAuthHeader = [reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_POST.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_POST.hs index 7b2a3386d..09988f39b 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/File/List_POST.hs @@ -37,7 +37,7 @@ list_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/files" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/files" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Delete_POST.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Delete_POST.hs index b700f01e4..0319bbee9 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Delete_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Delete_POST.hs @@ -40,7 +40,7 @@ list_delete_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/folders/delete" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/folders/delete" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Move_POST.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Move_POST.hs index 4c37b4d69..8efc09ff1 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Move_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/Folder/List_Move_POST.hs @@ -38,7 +38,7 @@ list_move_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/document-template-drafts/global:questionnaire-report:1.0.0/folders/move" +reqUrl = "/wizard-api/document-template-drafts/global:project-report:1.0.0/folders/move" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] diff --git a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/List_GET.hs b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/List_GET.hs index d39028c4b..bbe049f9b 100644 --- a/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/DocumentTemplateDraft/List_GET.hs @@ -57,13 +57,13 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (query 'q')" appContext - "/wizard-api/document-template-drafts?q=Questionnaire Report" + "/wizard-api/document-template-drafts?q=Project Report" reqAuthHeader (Page "documentTemplateDrafts" (PageMetadata 20 1 1 0) [toDraftList wizardDocumentTemplateDraft]) create_test_200 "HTTP 200 OK (query 'q' for non-existing)" appContext - "/wizard-api/document-template-drafts?q=Non-existing Questionnaire Report" + "/wizard-api/document-template-drafts?q=Non-existing Project Report" reqAuthHeader (Page "documentTemplateDrafts" (PageMetadata 20 0 0 0) ([] :: [DocumentTemplateDraftList])) diff --git a/wizard-server/test/Wizard/Specs/API/Feedback/Common.hs b/wizard-server/test/Wizard/Specs/API/Feedback/Common.hs index 2bf6c5e38..e614fb758 100644 --- a/wizard-server/test/Wizard/Specs/API/Feedback/Common.hs +++ b/wizard-server/test/Wizard/Specs/API/Feedback/Common.hs @@ -34,11 +34,11 @@ compareFeedbackDtos resDto expDto = do -- HELPER -- -------------------------------- loadFeedbackTokenFromEnv = do - tcQuestionnaire <- getCurrentTenantConfigQuestionnaire - updatedTcQuestionnaire <- applyEnvVariable "FEEDBACK_TOKEN" tcQuestionnaire.feedback.token (\t -> tcQuestionnaire {feedback = tcQuestionnaire.feedback {token = t}}) - modifyTenantConfigQuestionnaire updatedTcQuestionnaire + tcProject <- getCurrentTenantConfigProject + updatedTcProject <- applyEnvVariable "FEEDBACK_TOKEN" tcProject.feedback.token (\t -> tcProject {feedback = tcProject.feedback {token = t}}) + modifyTenantConfigProject updatedTcProject -applyEnvVariable :: String -> String -> (String -> TenantConfigQuestionnaire) -> AppContextM TenantConfigQuestionnaire +applyEnvVariable :: String -> String -> (String -> TenantConfigProject) -> AppContextM TenantConfigProject applyEnvVariable envVariableName oldValue updateFn = do envVariable <- liftIO $ lookupEnv envVariableName let newValue = fromMaybe oldValue envVariable diff --git a/wizard-server/test/Wizard/Specs/API/Feedback/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/Feedback/Detail_GET.hs index 230437031..2cedee3ee 100644 --- a/wizard-server/test/Wizard/Specs/API/Feedback/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Feedback/Detail_GET.hs @@ -52,7 +52,7 @@ test_200 appContext = do let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = toDTO appContext.serverConfig defaultQuestionnaire feedback1 + let expDto = toDTO appContext.serverConfig defaultProject feedback1 let expBody = encode expDto -- AND: Run migrations runInContextIO loadFeedbackTokenFromEnv appContext diff --git a/wizard-server/test/Wizard/Specs/API/Feedback/List_GET.hs b/wizard-server/test/Wizard/Specs/API/Feedback/List_GET.hs index 6f90f03f9..2f4740b24 100644 --- a/wizard-server/test/Wizard/Specs/API/Feedback/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Feedback/List_GET.hs @@ -50,8 +50,8 @@ test_200 appContext = let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders let expDto = - [ toDTO appContext.serverConfig defaultQuestionnaire feedback1 - , toDTO appContext.serverConfig defaultQuestionnaire feedback2 + [ toDTO appContext.serverConfig defaultProject feedback1 + , toDTO appContext.serverConfig defaultProject feedback2 ] let expBody = encode expDto -- AND: Run migrations diff --git a/wizard-server/test/Wizard/Specs/API/KnowledgeModel/Preview_POST.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModel/Preview_POST.hs index 6b39e2b49..3ea171c14 100644 --- a/wizard-server/test/Wizard/Specs/API/KnowledgeModel/Preview_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModel/Preview_POST.hs @@ -98,4 +98,4 @@ create_test_200 title appContext authHeader pkg pkgId expDto = -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = - createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] (reqBodyT germanyKmPackage.pId) "QTN_PERM" + createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] (reqBodyT germanyKmPackage.pId) "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/APISpec.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/APISpec.hs index 949e1ef7a..6cc357205 100644 --- a/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/APISpec.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/APISpec.hs @@ -9,6 +9,7 @@ import Wizard.Specs.API.KnowledgeModelEditor.Detail_GET import Wizard.Specs.API.KnowledgeModelEditor.Detail_PUT import Wizard.Specs.API.KnowledgeModelEditor.List_GET import Wizard.Specs.API.KnowledgeModelEditor.List_POST +import Wizard.Specs.API.KnowledgeModelEditor.Migration.APISpec knowledgeModelEditorAPI baseContext appContext = with (startWebApp baseContext appContext) $ @@ -18,3 +19,4 @@ knowledgeModelEditorAPI baseContext appContext = detail_GET appContext detail_PUT appContext detail_DELETE appContext + knowledgeModelEditorMigrationAPI appContext diff --git a/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/APISpec.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/APISpec.hs new file mode 100644 index 000000000..116c1c98e --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/APISpec.hs @@ -0,0 +1,17 @@ +module Wizard.Specs.API.KnowledgeModelEditor.Migration.APISpec where + +import Test.Hspec + +import Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_Conflict_All_POST +import Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_Conflict_POST +import Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_DELETE +import Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_GET +import Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_POST + +knowledgeModelEditorMigrationAPI appContext = + describe "KNOWLEDGE MODEL EDITOR MIGRATION API Spec" $ do + list_current_GET appContext + list_current_POST appContext + list_current_DELETE appContext + list_current_conflict_POST appContext + list_Current_Conflict_All_POST appContext diff --git a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/Common.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/Common.hs similarity index 72% rename from wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/Common.hs rename to wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/Common.hs index aa85b1b09..cddc9a20b 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/Common.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/Common.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.KnowledgeModel.Common where +module Wizard.Specs.API.KnowledgeModelEditor.Migration.Common where import Data.Either (isRight) import Test.Hspec @@ -12,7 +12,7 @@ import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeM import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelMigrationMigration as KM_MIG import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorList import Wizard.Model.KnowledgeModel.Migration.KnowledgeModelMigration -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService import Wizard.Specs.Common @@ -26,13 +26,13 @@ runMigrationWithEmptyDB appContext = do runMigrationWithFullDB appContext = do runMigrationWithEmptyDB appContext - runInContextIO (createMigration amsterdamKnowledgeModelEditorList.uuid migratorStateCreate) appContext + runInContextIO (createMigration amsterdamKnowledgeModelEditorList.uuid knowledgeModelMigrationCreateDTO) appContext -- -------------------------------- -- ASSERTS -- -------------------------------- -assertStateOfMigrationInDB appContext ms expState = do - eMs <- runInContextIO (findMigratorStateByEditorUuid ms.editorUuid) appContext - liftIO $ isRight eMs `shouldBe` True - let (Right msFromDB) = eMs - liftIO $ msFromDB.state `shouldBe` expState +assertStateOfMigrationInDB appContext kmMigration expState = do + eKmMigration <- runInContextIO (findKnowledgeModelMigrationByEditorUuid kmMigration.editorUuid) appContext + liftIO $ isRight eKmMigration `shouldBe` True + let (Right kmMigrationFromDB) = eKmMigration + liftIO $ kmMigrationFromDB.state `shouldBe` expState diff --git a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_Conflict_All_POST.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_Conflict_All_POST.hs similarity index 92% rename from wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_Conflict_All_POST.hs rename to wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_Conflict_All_POST.hs index db4cb5f57..4856cbeb6 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_Conflict_All_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_Conflict_All_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.KnowledgeModel.List_Current_Conflict_All_POST ( +module Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_Conflict_All_POST ( list_Current_Conflict_All_POST, ) where @@ -15,7 +15,7 @@ import Wizard.Model.KnowledgeModel.Migration.KnowledgeModelMigration import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.KnowledgeModel.Common +import Wizard.Specs.API.KnowledgeModelEditor.Migration.Common -- ------------------------------------------------------------------------ -- POST /wizard-api/knowledge-model-editors/uuid/migrations/current/conflict/all @@ -58,7 +58,7 @@ test_204 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertStateOfMigrationInDB appContext migratorState CompletedKnowledgeModelMigrationState + assertStateOfMigrationInDB appContext knowledgeModelMigrationDTO CompletedKnowledgeModelMigrationState -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_Conflict_POST.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_Conflict_POST.hs similarity index 93% rename from wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_Conflict_POST.hs rename to wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_Conflict_POST.hs index 982f2946f..e29dc7168 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_Conflict_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_Conflict_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.KnowledgeModel.List_Current_Conflict_POST ( +module Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_Conflict_POST ( list_current_conflict_POST, ) where @@ -20,11 +20,11 @@ import Wizard.Localization.Messages.Public import Wizard.Model.Context.AppContext import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorList import Wizard.Model.KnowledgeModel.Migration.KnowledgeModelMigration -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.KnowledgeModel.Common +import Wizard.Specs.API.KnowledgeModelEditor.Migration.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ @@ -48,7 +48,7 @@ reqUrl = "/wizard-api/knowledge-model-editors/6474b24b-262b-42b1-9451-008e8363f2 reqHeaders = [reqAuthHeader, reqCtHeader] -reqDto = migratorConflict +reqDto = knowledgeModelMigrationResolutionDTO reqBody = encode reqDto @@ -71,7 +71,7 @@ test_204 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertStateOfMigrationInDB appContext migratorState CompletedKnowledgeModelMigrationState + assertStateOfMigrationInDB appContext knowledgeModelMigrationDTO CompletedKnowledgeModelMigrationState -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_DELETE.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_DELETE.hs similarity index 93% rename from wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_DELETE.hs rename to wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_DELETE.hs index aaefe72e9..4dca76063 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.KnowledgeModel.List_Current_DELETE ( +module Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_DELETE ( list_current_DELETE, ) where @@ -14,7 +14,7 @@ import Wizard.Model.Context.AppContext import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.KnowledgeModel.Common +import Wizard.Specs.API.KnowledgeModelEditor.Migration.Common -- ------------------------------------------------------------------------ -- DELETE /wizard-api/knowledge-model-editors/{uuid}/migrations/current @@ -57,7 +57,7 @@ test_204 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findMigratorStates appContext 0 + assertCountInDB findKnowledgeModelMigrations appContext 0 -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_GET.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_GET.hs similarity index 94% rename from wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_GET.hs rename to wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_GET.hs index f936d8727..9455a1f82 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.KnowledgeModel.List_Current_GET ( +module Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_GET ( list_current_GET, ) where @@ -14,7 +14,7 @@ import Wizard.Model.Context.AppContext import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.KnowledgeModel.Common +import Wizard.Specs.API.KnowledgeModelEditor.Migration.Common -- ------------------------------------------------------------------------ -- GET /wizard-api/knowledge-model-editors/{uuid}/migrations/current @@ -47,7 +47,7 @@ test_200 appContext = do let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = migratorState + let expDto = knowledgeModelMigrationDTO let expBody = encode expDto -- AND: Prepare database runMigrationWithFullDB appContext diff --git a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_POST.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_POST.hs similarity index 96% rename from wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_POST.hs rename to wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_POST.hs index 1face7a93..33c152d03 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/List_Current_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelEditor/Migration/List_Current_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.KnowledgeModel.List_Current_POST ( +module Wizard.Specs.API.KnowledgeModelEditor.Migration.List_Current_POST ( list_current_POST, ) where @@ -31,7 +31,7 @@ import qualified Wizard.Service.User.UserMapper as U_Mapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.KnowledgeModel.Common +import Wizard.Specs.API.KnowledgeModelEditor.Migration.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ @@ -55,7 +55,7 @@ reqUrl = "/wizard-api/knowledge-model-editors/6474b24b-262b-42b1-9451-008e8363f2 reqHeaders = [reqAuthHeader, reqCtHeader] -reqDto = migratorStateCreate +reqDto = knowledgeModelMigrationCreateDTO reqBody = encode reqDto @@ -68,7 +68,7 @@ test_201 appContext = do let expStatus = 201 let expHeaders = resCtHeader : resCorsHeaders - let expDto = migratorState + let expDto = knowledgeModelMigrationDTO let expBody = encode expDto -- AND: Prepare database runMigrationWithEmptyDB appContext @@ -79,7 +79,7 @@ test_201 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findMigratorStates appContext 1 + assertCountInDB findKnowledgeModelMigrations appContext 1 -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_GET.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_GET.hs index 1d53c3ce7..d041c423a 100644 --- a/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_GET.hs @@ -16,7 +16,7 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSimpleDTO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageMigration as KnowledgeModelPackage -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Database.Migration.Development.Registry.Data.RegistryOrganizations import Wizard.Database.Migration.Development.Registry.Data.RegistryPackages import qualified Wizard.Database.Migration.Development.Registry.RegistryMigration as R_Migration @@ -113,7 +113,7 @@ create_test_200 title appContext reqUrl expDto = runInContextIO R_Migration.runMigration appContext runInContextIO KnowledgeModelPackage.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_Suggestions_GET.hs b/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_Suggestions_GET.hs index 3f28403b7..e3ffd1f1a 100644 --- a/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_Suggestions_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/KnowledgeModelPackage/List_Suggestions_GET.hs @@ -16,7 +16,7 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Wizard.Api.Resource.KnowledgeModel.Package.KnowledgeModelPackageSuggestionJM () import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageMigration as KnowledgeModelPackage -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext import Wizard.Model.KnowledgeModel.Package.KnowledgeModelPackageSuggestion @@ -113,7 +113,7 @@ create_test_200 title appContext reqUrl expDto = runInContextIO U.runMigration appContext runInContextIO KnowledgeModelPackage.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/APISpec.hs deleted file mode 100644 index e8b0c2ed7..000000000 --- a/wizard-server/test/Wizard/Specs/API/Migration/KnowledgeModel/APISpec.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Wizard.Specs.API.Migration.KnowledgeModel.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.KnowledgeModel.List_Current_Conflict_All_POST -import Wizard.Specs.API.Migration.KnowledgeModel.List_Current_Conflict_POST -import Wizard.Specs.API.Migration.KnowledgeModel.List_Current_DELETE -import Wizard.Specs.API.Migration.KnowledgeModel.List_Current_GET -import Wizard.Specs.API.Migration.KnowledgeModel.List_Current_POST - -migrationAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "MIGRATION KNOWLEDGE MODEL API Spec" $ do - list_current_GET appContext - list_current_POST appContext - list_current_DELETE appContext - list_current_conflict_POST appContext - list_Current_Conflict_All_POST appContext diff --git a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/APISpec.hs deleted file mode 100644 index aac8cf1f3..000000000 --- a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/APISpec.hs +++ /dev/null @@ -1,20 +0,0 @@ -module Wizard.Specs.API.Migration.Questionnaire.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.Questionnaire.List_Current_Completion_POST -import Wizard.Specs.API.Migration.Questionnaire.List_Current_DELETE -import Wizard.Specs.API.Migration.Questionnaire.List_Current_GET -import Wizard.Specs.API.Migration.Questionnaire.List_Current_PUT -import Wizard.Specs.API.Migration.Questionnaire.List_POST - -migrationAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "MIGRATION QUESTIONNAIRE API Spec" $ do - list_POST appContext - list_current_GET appContext - list_current_PUT appContext - list_current_DELETE appContext - list_current_completion_POST appContext diff --git a/wizard-server/test/Wizard/Specs/API/Project/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Project/APISpec.hs new file mode 100644 index 000000000..9ae37a080 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/Project/APISpec.hs @@ -0,0 +1,54 @@ +module Wizard.Specs.API.Project.APISpec where + +import Test.Hspec +import Test.Hspec.Wai hiding (shouldRespondWith) + +import Wizard.Specs.API.Common +import Wizard.Specs.API.Project.Comment.APISpec +import Wizard.Specs.API.Project.Detail_Content_PUT +import Wizard.Specs.API.Project.Detail_DELETE +import Wizard.Specs.API.Project.Detail_Documents_GET +import Wizard.Specs.API.Project.Detail_GET +import Wizard.Specs.API.Project.Detail_Preview_GET +import Wizard.Specs.API.Project.Detail_Questionnaire_GET +import Wizard.Specs.API.Project.Detail_Report_GET +import Wizard.Specs.API.Project.Detail_Revert_POST +import Wizard.Specs.API.Project.Detail_Revert_Preview_POST +import Wizard.Specs.API.Project.Detail_Settings_GET +import Wizard.Specs.API.Project.Detail_Settings_PUT +import Wizard.Specs.API.Project.Detail_Share_PUT +import Wizard.Specs.API.Project.Event.APISpec +import Wizard.Specs.API.Project.List_GET +import Wizard.Specs.API.Project.List_POST +import Wizard.Specs.API.Project.List_POST_CloneUuid +import Wizard.Specs.API.Project.List_POST_FromTemplate +import Wizard.Specs.API.Project.Migration.APISpec +import Wizard.Specs.API.Project.ProjectTag.APISpec +import Wizard.Specs.API.Project.User.APISpec +import Wizard.Specs.API.Project.Version.APISpec + +projectAPI baseContext appContext = + with (startWebApp baseContext appContext) $ + describe "PROJECT API Spec" $ do + list_GET appContext + list_POST appContext + list_POST_fromTemplate appContext + list_POST_cloneUuid appContext + detail_GET appContext + detail_questionnaire_GET appContext + detail_share_PUT appContext + detail_preview_GET appContext + detail_settings_GET appContext + detail_settings_PUT appContext + detail_DELETE appContext + detail_content_PUT appContext + detail_report_GET appContext + detail_documents_GET appContext + detail_revert_POST appContext + detail_revert_preview_POST appContext + projectCommentAPI appContext + projectEventAPI appContext + projectMigrationAPI appContext + projectTagAPI appContext + projectUserAPI appContext + projectVersionAPI appContext diff --git a/wizard-server/test/Wizard/Specs/API/Project/Comment/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Project/Comment/APISpec.hs new file mode 100644 index 000000000..220f16d55 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/Project/Comment/APISpec.hs @@ -0,0 +1,9 @@ +module Wizard.Specs.API.Project.Comment.APISpec where + +import Test.Hspec + +import Wizard.Specs.API.Project.Comment.List_GET + +projectCommentAPI appContext = + describe "PROJECT COMMENT API Spec" $ + list_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Comment/List_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Comment/List_GET.hs similarity index 73% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Comment/List_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Comment/List_GET.hs index a7dcc217c..44782a1f3 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Comment/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Comment/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Comment.List_GET ( +module Wizard.Specs.API.Project.Comment.List_GET ( list_GET, ) where @@ -20,18 +20,18 @@ import Shared.Common.Model.Error.Error import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Service.Questionnaire.Comment.QuestionnaireCommentMapper +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Project +import Wizard.Service.Project.Comment.ProjectCommentMapper import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -39,11 +39,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/comments +-- GET /wizard-api/projects/{projectUuid}/comments -- ------------------------------------------------------------------------ list_GET :: AppContext -> SpecWith ((), Application) list_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/comments" $ do + describe "GET /wizard-api/projects/{projectUuid}/comments" $ do test_200 appContext test_403 appContext test_404 appContext @@ -53,7 +53,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/comments" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/comments" reqHeadersT authHeader = authHeader @@ -66,58 +66,58 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 + project1 [reqAuthHeader] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) + (project13 {visibility = PrivateProjectVisibility}) [reqNonAdminAuthHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext - questionnaire13 + project13 [reqIsaacAuthTokenHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) [] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext - questionnaire3 + project3 [reqNonAdminAuthHeader] [] create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext - questionnaire10 + project10 [] [] -create_test_200 title appContext qtn authHeader permissions = +create_test_200 title appContext project authHeader permissions = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - thread1 <- liftIO . create_cmtQ1_t1 $ qtn.uuid + thread1 <- liftIO . create_cmtQ1_t1 $ project.uuid comment1 <- liftIO . create_cmtQ1_t1_1 $ thread1.uuid comment2 <- liftIO . create_cmtQ1_t1_2 $ thread1.uuid - runInContextIO (insertQuestionnaire qtn) appContext - runInContextIO (insertQuestionnaireCommentThread thread1) appContext - runInContextIO (insertQuestionnaireComment comment1) appContext - runInContextIO (insertQuestionnaireComment comment2) appContext + runInContextIO (insertProject project) appContext + runInContextIO (insertProjectCommentThread thread1) appContext + runInContextIO (insertProjectComment comment1) appContext + runInContextIO (insertProjectComment comment2) appContext -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders @@ -137,39 +137,39 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Comment Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Comment Project") create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 + project2 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Comment Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Comment Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 + project7 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -181,7 +181,7 @@ create_test_403 title appContext qtn authHeader errorMessage = runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO (insertProject project) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -195,8 +195,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/comments" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/comments" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Common.hs b/wizard-server/test/Wizard/Specs/API/Project/Common.hs similarity index 59% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Common.hs rename to wizard-server/test/Wizard/Specs/API/Project/Common.hs index e3680e851..af1b11ca2 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Common.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Common.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Common where +module Wizard.Specs.API.Project.Common where import Data.Either (isLeft, isRight) import qualified Data.UUID as U @@ -8,10 +8,10 @@ import Test.Hspec.Wai hiding (shouldRespondWith) import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import Wizard.Database.Migration.Development.Tenant.Data.Tenants -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Config.TenantConfig import Wizard.Model.Tenant.Tenant import Wizard.Service.Tenant.Config.ConfigService @@ -21,44 +21,44 @@ import Wizard.Specs.Common -- -------------------------------- -- ASSERTS -- -------------------------------- -assertExistenceOfQuestionnaireInDB appContext qtn qtnEvents = do - eQtn <- runInContextIO (findQuestionnaireByUuid qtn.uuid) appContext - liftIO $ isRight eQtn `shouldBe` True - let (Right qtnFromDb) = eQtn - compareQuestionnaireDtos qtnFromDb qtn - eQtnEvents <- runInContextIO (findQuestionnaireEventsByQuestionnaireUuid qtn.uuid) appContext - liftIO $ isRight eQtnEvents `shouldBe` True - let (Right qtnEventsFromDb) = eQtnEvents - liftIO $ qtnEventsFromDb `shouldBe` qtnEvents +assertExistenceOfProjectInDB appContext project projectEvents = do + eProject <- runInContextIO (findProjectByUuid project.uuid) appContext + liftIO $ isRight eProject `shouldBe` True + let (Right projectFromDb) = eProject + compareProjectDtos projectFromDb project + eProjectEvents <- runInContextIO (findProjectEventsByProjectUuid project.uuid) appContext + liftIO $ isRight eProjectEvents `shouldBe` True + let (Right projectEventsFromDb) = eProjectEvents + liftIO $ projectEventsFromDb `shouldBe` projectEvents -assertExistenceOfQuestionnaireContentInDB appContext qtnUuid content = do - eQtnEvents <- runInContextIO (findQuestionnaireEventsByQuestionnaireUuid qtnUuid) appContext - liftIO $ isRight eQtnEvents `shouldBe` True - let (Right qtnEventsFromDb) = eQtnEvents - compareQuestionnaireContentDtos qtnEventsFromDb content +assertExistenceOfProjectContentInDB appContext projectUuid content = do + eProjectEvents <- runInContextIO (findProjectEventsByProjectUuid projectUuid) appContext + liftIO $ isRight eProjectEvents `shouldBe` True + let (Right projectEventsFromDb) = eProjectEvents + compareProjectContentDtos projectEventsFromDb content -assertAbsenceOfQuestionnaireInDB appContext qtn = do - eQtn <- runInContextIO (findQuestionnaireByUuid qtn.uuid) appContext - liftIO $ isLeft eQtn `shouldBe` True - let (Left error) = eQtn +assertAbsenceOfProjectInDB appContext project = do + eProject <- runInContextIO (findProjectByUuid project.uuid) appContext + liftIO $ isLeft eProject `shouldBe` True + let (Left error) = eProject liftIO $ error `shouldBe` NotExistsError ( _ERROR_DATABASE__ENTITY_NOT_FOUND - "questionnaire" - [("tenant_uuid", U.toString defaultTenant.uuid), ("uuid", U.toString qtn.uuid)] + "project" + [("tenant_uuid", U.toString defaultTenant.uuid), ("uuid", U.toString project.uuid)] ) -- -------------------------------- -- COMPARATORS -- -------------------------------- -compareQuestionnaireCreateDtos resDto expDto = do +compareProjectCreateDtos resDto expDto = do liftIO $ resDto.name `shouldBe` expDto.name liftIO $ resDto.visibility `shouldBe` expDto.visibility liftIO $ resDto.sharing `shouldBe` expDto.sharing liftIO $ resDto.knowledgeModelPackage `shouldBe` expDto.knowledgeModelPackage -compareQuestionnaireCreateFromTemplateDtos resDto expDto = do +compareProjectCreateFromTemplateDtos resDto expDto = do liftIO $ resDto.uuid `shouldNotBe` expDto.uuid liftIO $ resDto.name `shouldBe` expDto.name liftIO $ resDto.visibility `shouldBe` expDto.visibility @@ -66,7 +66,7 @@ compareQuestionnaireCreateFromTemplateDtos resDto expDto = do liftIO $ resDto.state `shouldBe` expDto.state liftIO $ resDto.knowledgeModelPackage `shouldBe` expDto.knowledgeModelPackage -compareQuestionnaireCloneDtos resDto expDto = do +compareProjectCloneDtos resDto expDto = do liftIO $ resDto.uuid `shouldNotBe` expDto.uuid liftIO $ resDto.name `shouldBe` ("Copy of " ++ expDto.name) liftIO $ resDto.visibility `shouldBe` expDto.visibility @@ -74,7 +74,7 @@ compareQuestionnaireCloneDtos resDto expDto = do liftIO $ resDto.state `shouldBe` expDto.state liftIO $ resDto.knowledgeModelPackage `shouldBe` expDto.knowledgeModelPackage -compareQuestionnaireCreateDtos' resDto expDto = do +compareProjectCreateDtos' resDto expDto = do liftIO $ resDto.name `shouldBe` expDto.name liftIO $ resDto.phaseUuid `shouldBe` expDto.phaseUuid liftIO $ resDto.visibility `shouldBe` expDto.visibility @@ -85,7 +85,7 @@ compareQuestionnaireCreateDtos' resDto expDto = do liftIO $ resDto.knowledgeModel `shouldBe` expDto.knowledgeModel liftIO $ resDto.replies `shouldBe` expDto.replies -compareQuestionnaireCreateDtos'' resDto expDto = do +compareProjectCreateDtos'' resDto expDto = do liftIO $ resDto.name `shouldBe` expDto.name liftIO $ resDto.phaseUuid `shouldBe` expDto.phaseUuid liftIO $ resDto.visibility `shouldBe` expDto.visibility @@ -94,9 +94,9 @@ compareQuestionnaireCreateDtos'' resDto expDto = do liftIO $ resDto.knowledgeModel `shouldBe` expDto.knowledgeModel liftIO $ resDto.replies `shouldBe` expDto.replies -compareQuestionnaireDtos resDto expDto = liftIO $ resDto `shouldBe` expDto +compareProjectDtos resDto expDto = liftIO $ resDto `shouldBe` expDto -compareQuestionnaireContentDtos resDto expDto = +compareProjectContentDtos resDto expDto = liftIO $ resDto `shouldBe` expDto compareReportDtos resDto expDto = do @@ -106,7 +106,7 @@ compareReportDtos resDto expDto = do -- -------------------------------- -- HELPERS -- -------------------------------- -updateAnonymousQuestionnaireSharing appContext value = do - (Right tcQuestionnaire) <- runInContextIO getCurrentTenantConfigQuestionnaire appContext - let tcQuestionnaireUpdated = tcQuestionnaire {questionnaireSharing = tcQuestionnaire.questionnaireSharing {anonymousEnabled = value}} - runInContextIO (modifyTenantConfigQuestionnaire tcQuestionnaireUpdated) appContext +updateAnonymousProjectSharing appContext value = do + (Right tcProject) <- runInContextIO getCurrentTenantConfigProject appContext + let tcProjectUpdated = tcProject {projectSharing = tcProject.projectSharing {anonymousEnabled = value}} + runInContextIO (modifyTenantConfigProject tcProjectUpdated) appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Content_PUT.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Content_PUT.hs similarity index 56% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Content_PUT.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Content_PUT.hs index 258827f2e..f2acab919 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Content_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Content_PUT.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Content_PUT ( +module Wizard.Specs.API.Project.Detail_Content_PUT ( detail_content_PUT, ) where @@ -16,31 +16,31 @@ import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error import Shared.Common.Util.Uuid -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentChangeDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Api.Resource.Project.ProjectContentChangeDTO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Service.Project.Event.ProjectEventMapper import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- PUT /wizard-api/questionnaires/{qtnUuid}/content +-- PUT /wizard-api/projects/{projectUuid}/content -- ------------------------------------------------------------------------ detail_content_PUT :: AppContext -> SpecWith ((), Application) detail_content_PUT appContext = - describe "PUT /wizard-api/questionnaires/{qtnUuid}/content" $ do + describe "PUT /wizard-api/projects/{projectUuid}/content" $ do test_200 appContext test_400 appContext test_403 appContext @@ -51,60 +51,60 @@ detail_content_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/content" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/content" reqHeadersT authHeader = reqCtHeader : authHeader -reqDto qtnUuid = - QuestionnaireContentChangeDTO - { events = [toEventChangeDTO (slble_rQ2' qtnUuid)] +reqDto projectUuid = + ProjectContentChangeDTO + { events = [toEventChangeDTO (slble_rQ2' projectUuid)] } -reqBody qtnUuid = encode (reqDto qtnUuid) +reqBody projectUuid = encode (reqDto projectUuid) -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_200 appContext = do - create_test_200 "HTTP 200 OK (Owner, Private)" appContext questionnaire1 questionnaire1EventsEdited [reqAuthHeader] - create_test_200 "HTTP 200 OK (Owner, VisibleView)" appContext questionnaire2 questionnaire2EventsEdited [reqAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, Public)" appContext questionnaire3 questionnaire3EventsEdited [reqAuthHeader] - create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing" appContext questionnaire10 questionnaire10EventsEdited [] + create_test_200 "HTTP 200 OK (Owner, Private)" appContext project1 project1EventsEdited [reqAuthHeader] + create_test_200 "HTTP 200 OK (Owner, VisibleView)" appContext project2 project2EventsEdited [reqAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, Public)" appContext project3 project3EventsEdited [reqAuthHeader] + create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing" appContext project10 project10EventsEdited [] -create_test_200 title appContext qtn qtnEventsEdited authHeader = +create_test_200 title appContext project projectEventsEdited authHeader = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = reqDto qtn.uuid + let expDto = reqDto project.uuid let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext - runInContextIO (insertQuestionnaireEvents questionnaire7Events) appContext - runInContextIO (traverse_ insertQuestionnaireVersion questionnaire7Versions) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaireEvents questionnaire10Events) appContext - runInContextIO (traverse_ insertQuestionnaireVersion questionnaire10Versions) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project7) appContext + runInContextIO (insertProjectEvents project7Events) appContext + runInContextIO (traverse_ insertProjectVersion project7Versions) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProjectEvents project10Events) appContext + runInContextIO (traverse_ insertProjectVersion project10Versions) appContext -- WHEN: Call API - response <- request reqMethod reqUrl reqHeaders (reqBody qtn.uuid) + response <- request reqMethod reqUrl reqHeaders (reqBody project.uuid) -- THEN: Compare response with expectation - let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireContentChangeDTO) + let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, ProjectContentChangeDTO) assertResStatus status expStatus assertResHeaders headers expHeaders - compareQuestionnaireDtos resBody expDto + compareProjectDtos resBody expDto -- AND: Find a result in DB - assertExistenceOfQuestionnaireContentInDB appContext qtn.uuid qtnEventsEdited + assertExistenceOfProjectContentInDB appContext project.uuid projectEventsEdited -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT questionnaire3.uuid) "visibility" +test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT project3.uuid) "visibility" -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -113,37 +113,37 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 - questionnaire1EventsEdited + project1 + project1EventsEdited [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 - questionnaire2EventsEdited + project2 + project2EventsEdited [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 - questionnaire7EventsEdited + project7 + project7EventsEdited [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 - questionnaire3EventsEdited + project3 + project3EventsEdited [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn qtnEventsEdited authHeader reason = +create_test_403 title appContext project projectEventsEdited authHeader reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -153,11 +153,11 @@ create_test_403 title appContext qtn qtnEventsEdited authHeader reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project7) appContext + runInContextIO (insertProject project10) appContext -- WHEN: Call API - response <- request reqMethod reqUrl reqHeaders (reqBody qtn.uuid) + response <- request reqMethod reqUrl reqHeaders (reqBody project.uuid) -- THEN: Compare response with expectation let responseMatcher = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} @@ -169,8 +169,8 @@ create_test_403 title appContext qtn qtnEventsEdited authHeader reason = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/content" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/content" (reqHeadersT [reqAuthHeader]) (reqBody $ u' "f08ead5f-746d-411b-aee6-77ea3d24016a") - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_DELETE.hs similarity index 74% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_DELETE.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_DELETE.hs index ec96a63bf..71e6e36c6 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_DELETE ( +module Wizard.Specs.API.Project.Detail_DELETE ( detail_DELETE, ) where @@ -15,28 +15,28 @@ import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO import qualified Wizard.Database.Migration.Development.Document.DocumentMigration as DOC import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Localization.Messages.Public import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- DELETE /wizard-api/questionnaires/{qtnUuid} +-- DELETE /wizard-api/projects/{projectUuid} -- ------------------------------------------------------------------------ detail_DELETE :: AppContext -> SpecWith ((), Application) detail_DELETE appContext = - describe "DELETE /wizard-api/questionnaires/{qtnUuid}" $ do + describe "DELETE /wizard-api/projects/{projectUuid}" $ do test_204 appContext test_400 appContext test_401 appContext @@ -48,7 +48,7 @@ detail_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid reqHeadersT authHeader = [authHeader] @@ -58,14 +58,14 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_204 appContext = do - create_test_204 "HTTP 204 NO CONTENT (Owner, Private)" appContext questionnaire1 reqAuthHeader 2 - create_test_204 "HTTP 204 NO CONTENT (Owner, VisibleView)" appContext questionnaire2 reqAuthHeader 1 + create_test_204 "HTTP 204 NO CONTENT (Owner, Private)" appContext project1 reqAuthHeader 2 + create_test_204 "HTTP 204 NO CONTENT (Owner, VisibleView)" appContext project2 reqAuthHeader 1 -create_test_204 title appContext qtn authHeader docCount = +create_test_204 title appContext project authHeader docCount = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 204 @@ -74,7 +74,7 @@ create_test_204 title appContext qtn authHeader docCount = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext runInContextIO DOC.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -83,7 +83,7 @@ create_test_204 title appContext qtn authHeader docCount = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findQuestionnaires appContext 2 + assertCountInDB findProjects appContext 2 assertCountInDB findDocuments appContext docCount -- ---------------------------------------------------- @@ -93,20 +93,20 @@ test_400 appContext = it "HTTP 400 BAD REQUEST when package can't be deleted" $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT questionnaire4.uuid + let reqUrl = reqUrlT project4.uuid let reqHeaders = reqHeadersT reqAuthHeader -- AND: Prepare expectation let expStatus = 400 let expHeaders = resCorsHeaders - let expDto = UserError _ERROR_SERVICE_QTN__QTN_CANT_BE_DELETED_BECAUSE_IT_IS_USED_IN_MIGRATION + let expDto = UserError _ERROR_SERVICE_PROJECT__PROJECT_CANT_BE_DELETED_BECAUSE_IT_IS_USED_IN_MIGRATION let expBody = encode expDto -- AND: Prepare DB runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire4) appContext - runInContextIO (insertQuestionnaire questionnaire4Upgraded) appContext - runInContextIO (insertMigratorState nlQtnMigrationState) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project4) appContext + runInContextIO (insertProject project4Upgraded) appContext + runInContextIO (insertProjectMigration projectMigration) appContext runInContextIO DOC.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -115,37 +115,37 @@ test_400 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findQuestionnaires appContext 5 + assertCountInDB findProjects appContext 5 assertCountInDB findDocuments appContext 3 -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod (reqUrlT questionnaire3.uuid) [] reqBody +test_401 appContext = createAuthTest reqMethod (reqUrlT project3.uuid) [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = do - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext questionnaire1 - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext questionnaire1 - create_test_403 "HTTP 403 NO CONTENT (Non-Owner, VisibleEdit)" appContext questionnaire3 + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext project1 + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext project1 + create_test_403 "HTTP 403 NO CONTENT (Non-Owner, VisibleEdit)" appContext project3 -create_test_403 title appContext qtn = +create_test_403 title appContext project = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT questionnaire1.uuid + let reqUrl = reqUrlT project1.uuid let reqHeaders = reqHeadersT reqNonAdminAuthHeader -- AND: Prepare expectation let expStatus = 403 let expHeaders = resCtHeader : resCorsHeaders - let expDto = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Administrate Questionnaire" + let expDto = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Administrate Project" let expBody = encode expDto -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -153,7 +153,7 @@ create_test_403 title appContext qtn = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findQuestionnaires appContext 3 + assertCountInDB findProjects appContext 3 -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -161,8 +161,8 @@ create_test_403 title appContext qtn = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a" (reqHeadersT reqAuthHeader) reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Documents_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Documents_GET.hs similarity index 72% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Documents_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Documents_GET.hs index 8e3cee471..c054ae06c 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Documents_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Documents_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Documents_GET ( +module Wizard.Specs.API.Project.Detail_Documents_GET ( detail_documents_GET, ) where @@ -22,21 +22,21 @@ import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.D import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates import Wizard.Api.Resource.Document.DocumentJM () import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import Wizard.Database.Migration.Development.Document.Data.Documents import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.User.User import Wizard.S3.Document.DocumentS3 import Wizard.Service.Document.DocumentMapper @@ -47,11 +47,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/documents +-- GET /wizard-api/projects/{projectUuid}/documents -- ------------------------------------------------------------------------ detail_documents_GET :: AppContext -> SpecWith ((), Application) detail_documents_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/documents" $ do + describe "GET /wizard-api/projects/{projectUuid}/documents" $ do test_200 appContext test_403 appContext test_404 appContext @@ -61,7 +61,7 @@ detail_documents_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/documents?sort=name,asc" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/documents?sort=name,asc" reqHeadersT authHeader = authHeader @@ -79,17 +79,17 @@ create_test_200 title appContext authHeader = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT questionnaire6.uuid + let reqUrl = reqUrlT project6.uuid let reqHeaders = reqHeadersT authHeader -- AND: Run migrations - let doc1' = doc1 {questionnaireUuid = Just questionnaire6.uuid, questionnaireEventUuid = Just . getUuid $ slble_rQ1' questionnaire6.uuid} - let doc2' = doc2 {questionnaireUuid = Just questionnaire6.uuid, questionnaireEventUuid = Just . getUuid $ slble_rQ1' questionnaire6.uuid, createdBy = Just userIsaac.uuid} + let doc1' = doc1 {projectUuid = Just project6.uuid, projectEventUuid = Just . getUuid $ slble_rQ1' project6.uuid} + let doc2' = doc2 {projectUuid = Just project6.uuid, projectEventUuid = Just . getUuid $ slble_rQ1' project6.uuid, createdBy = Just userIsaac.uuid} runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire6) appContext - runInContextIO (insertQuestionnaireEvents questionnaire6Events) appContext - runInContextIO (traverse_ insertQuestionnaireVersion questionnaire6Versions) appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO (insertProject project6) appContext + runInContextIO (insertProjectEvents project6Events) appContext + runInContextIO (traverse_ insertProjectVersion project6Versions) appContext runInContextIO deleteDocuments appContext runInContextIO removeDocumentContents appContext runInContextIO (insertDocument doc1') appContext @@ -101,8 +101,8 @@ create_test_200 title appContext authHeader = Page "documents" (PageMetadata 20 2 1 0) - [ toDTOWithDocTemplate doc1' questionnaire6 (Just "Version 1") [] - , toDTOWithDocTemplate doc2' questionnaire6 (Just "Version 1") [] + [ toDTOWithDocTemplate doc1' project6 (Just "Version 1") [] + , toDTOWithDocTemplate doc2' project6 (Just "Version 1") [] ] let expBody = encode (fmap (\x -> x wizardDocumentTemplate formatJsonSimple) expDto) -- WHEN: Call API @@ -119,27 +119,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleEdit)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -149,7 +149,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -163,8 +163,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/documents" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/documents" (reqHeadersT [reqAuthHeader]) reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_GET.hs similarity index 70% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_GET.hs index 024387b0c..fb092fe78 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_GET ( +module Wizard.Specs.API.Project.Detail_GET ( detail_GET, ) where @@ -18,15 +18,15 @@ import Shared.Common.Model.Error.Error import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Api.Resource.Project.Detail.ProjectDetailDTO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -34,11 +34,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid} +-- GET /wizard-api/projects/{projectUuid} -- ------------------------------------------------------------------------ detail_GET :: AppContext -> SpecWith ((), Application) detail_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}" $ do + describe "GET /wizard-api/projects/{projectUuid}" $ do test_200 appContext test_403 appContext test_404 appContext @@ -48,7 +48,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid reqHeadersT authHeader = authHeader @@ -61,84 +61,84 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 - questionnaire1Events + project1 + project1Events [reqAuthHeader] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext - questionnaire2 - questionnaire2Events + project2 + project2Events [reqNonAdminAuthHeader] - [qtn2AlbertEditQtnPermDto] + [project2AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) - questionnaire13Events + (project13 {visibility = PrivateProjectVisibility}) + project13Events [reqNonAdminAuthHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext - questionnaire13 - questionnaire13Events + project13 + project13Events [reqIsaacAuthTokenHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) - questionnaire13Events + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) + project13Events [] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 - questionnaire7Events + project7 + project7Events [] - [qtn7AlbertEditQtnPermDto] + [project7AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext - questionnaire3 - questionnaire3Events + project3 + project3Events [reqNonAdminAuthHeader] [] create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext - questionnaire10 - questionnaire10Events + project10 + project10Events [] [] -create_test_200 title appContext qtn qtnEvents authHeader permissions = +create_test_200 title appContext project projectEvents authHeader permissions = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext - runInContextIO (insertQuestionnaireEvents qtnEvents) appContext + runInContextIO (insertProject project) appContext + runInContextIO (insertProjectEvents projectEvents) appContext -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders let expDto = - QuestionnaireDetailDTO - { uuid = qtn.uuid - , name = qtn.name - , sharing = qtn.sharing - , visibility = qtn.visibility - , knowledgeModelPackageId = qtn.knowledgeModelPackageId - , isTemplate = qtn.isTemplate + ProjectDetailDTO + { uuid = project.uuid + , name = project.name + , sharing = project.sharing + , visibility = project.visibility + , knowledgeModelPackageId = project.knowledgeModelPackageId + , isTemplate = project.isTemplate , migrationUuid = Nothing , permissions = permissions , fileCount = 0 @@ -158,27 +158,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -188,7 +188,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -202,8 +202,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Preview_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Preview_GET.hs similarity index 73% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Preview_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Preview_GET.hs index e6cc36c12..606cb5010 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Preview_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Preview_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Preview_GET ( +module Wizard.Specs.API.Project.Detail_Preview_GET ( detail_preview_GET, ) where @@ -19,14 +19,14 @@ import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.D import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireDetailPreview +import Wizard.Model.Project.Detail.ProjectDetailPreview +import Wizard.Model.Project.Project import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -34,11 +34,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/preview +-- GET /wizard-api/projects/{projectUuid}/preview -- ------------------------------------------------------------------------ detail_preview_GET :: AppContext -> SpecWith ((), Application) detail_preview_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/preview" $ do + describe "GET /wizard-api/projects/{projectUuid}/preview" $ do test_200 appContext test_403 appContext test_404 appContext @@ -48,7 +48,7 @@ detail_preview_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/preview" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/preview" reqHeadersT authHeader = authHeader @@ -61,78 +61,78 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 + project1 [reqAuthHeader] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext - questionnaire2 + project2 [reqNonAdminAuthHeader] - [qtn2AlbertEditQtnPermDto] + [project2AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) + (project13 {visibility = PrivateProjectVisibility}) [reqNonAdminAuthHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext - questionnaire13 + project13 [reqIsaacAuthTokenHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) [] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 + project7 [] - [qtn7AlbertEditQtnPermDto] + [project7AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext - questionnaire3 + project3 [reqNonAdminAuthHeader] [] create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext - questionnaire10 + project10 [] [] -create_test_200 title appContext qtn authHeader permissions = +create_test_200 title appContext project authHeader permissions = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO (insertProject project) appContext -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders let expDto = - QuestionnaireDetailPreview - { uuid = qtn.uuid - , name = qtn.name - , visibility = qtn.visibility - , sharing = qtn.sharing - , knowledgeModelPackageId = qtn.knowledgeModelPackageId - , isTemplate = qtn.isTemplate + ProjectDetailPreview + { uuid = project.uuid + , name = project.name + , visibility = project.visibility + , sharing = project.sharing + , knowledgeModelPackageId = project.knowledgeModelPackageId + , isTemplate = project.isTemplate , migrationUuid = Nothing , permissions = permissions - , documentTemplateId = qtn.documentTemplateId + , documentTemplateId = project.documentTemplateId , format = Just formatJsonSimple , fileCount = 0 } @@ -151,27 +151,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -181,7 +181,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -195,8 +195,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/preview" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/preview" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Questionnaire_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Questionnaire_GET.hs similarity index 62% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Questionnaire_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Questionnaire_GET.hs index a20a61098..14700efc9 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Questionnaire_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Questionnaire_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Questionnaire_GET ( +module Wizard.Specs.API.Project.Detail_Questionnaire_GET ( detail_questionnaire_GET, ) where @@ -20,21 +20,21 @@ import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Model.Questionnaire.QuestionnaireContent +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Project +import Wizard.Model.Project.ProjectContent import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -42,11 +42,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/questionnaire +-- GET /wizard-api/projects/{projectUuid}/questionnaire -- ------------------------------------------------------------------------ detail_questionnaire_GET :: AppContext -> SpecWith ((), Application) detail_questionnaire_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/questionnaire" $ do + describe "GET /wizard-api/projects/{projectUuid}/questionnaire" $ do test_200 appContext test_403 appContext test_404 appContext @@ -56,7 +56,7 @@ detail_questionnaire_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/questionnaire" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/questionnaire" reqHeadersT authHeader = authHeader @@ -69,87 +69,87 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 - questionnaire1Events - questionnaire1Ctn + project1 + project1Events + project1Ctn True [reqAuthHeader] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext - questionnaire2 - questionnaire2Events - (questionnaire2Ctn {labels = M.empty} :: QuestionnaireContent) + project2 + project2Events + (project2Ctn {labels = M.empty} :: ProjectContent) False [reqNonAdminAuthHeader] - [qtn2AlbertEditQtnPermDto] + [project2AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) - questionnaire13Events - (questionnaire13Ctn {labels = M.empty} :: QuestionnaireContent) + (project13 {visibility = PrivateProjectVisibility}) + project13Events + (project13Ctn {labels = M.empty} :: ProjectContent) True [reqNonAdminAuthHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext - questionnaire13 - questionnaire13Events - (questionnaire13Ctn {labels = M.empty} :: QuestionnaireContent) + project13 + project13Events + (project13Ctn {labels = M.empty} :: ProjectContent) True [reqIsaacAuthTokenHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) - questionnaire13Events - (questionnaire13Ctn {labels = M.empty} :: QuestionnaireContent) + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) + project13Events + (project13Ctn {labels = M.empty} :: ProjectContent) True [] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 - questionnaire7Events - (questionnaire7Ctn {labels = M.empty} :: QuestionnaireContent) + project7 + project7Events + (project7Ctn {labels = M.empty} :: ProjectContent) False [] - [qtn7AlbertEditQtnPermDto] + [project7AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext - questionnaire3 - questionnaire3Events - questionnaire3Ctn + project3 + project3Events + project3Ctn True [reqNonAdminAuthHeader] [] - create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext questionnaire10 questionnaire10Events questionnaire10Ctn True [] [] + create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext project10 project10Events project10Ctn True [] [] -create_test_200 title appContext qtn qtnEvents qtnCtn showComments authHeader permissions = +create_test_200 title appContext project projectEvents projectContent showComments authHeader permissions = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - thread1 <- liftIO . create_cmtQ1_t1 $ qtn.uuid + thread1 <- liftIO . create_cmtQ1_t1 $ project.uuid comment1 <- liftIO . create_cmtQ1_t1_1 $ thread1.uuid comment2 <- liftIO . create_cmtQ1_t1_2 $ thread1.uuid - runInContextIO (insertQuestionnaire qtn) appContext - runInContextIO (insertQuestionnaireEvents qtnEvents) appContext - runInContextIO (insertQuestionnaireCommentThread thread1) appContext - runInContextIO (insertQuestionnaireComment comment1) appContext - runInContextIO (insertQuestionnaireComment comment2) appContext + runInContextIO (insertProject project) appContext + runInContextIO (insertProjectEvents projectEvents) appContext + runInContextIO (insertProjectCommentThread thread1) appContext + runInContextIO (insertProjectComment comment1) appContext + runInContextIO (insertProjectComment comment2) appContext let unresolvedCommentCounts = if showComments then M.fromList [(cmtQ1_path, M.fromList [(thread1.uuid, 2)])] @@ -158,25 +158,25 @@ create_test_200 title appContext qtn qtnEvents qtnCtn showComments authHeader pe let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders let expDto = - QuestionnaireDetailQuestionnaireDTO - { uuid = qtn.uuid - , name = qtn.name - , visibility = qtn.visibility - , sharing = qtn.sharing - , knowledgeModelPackageId = qtn.knowledgeModelPackageId - , selectedQuestionTagUuids = qtn.selectedQuestionTagUuids - , isTemplate = qtn.isTemplate + ProjectDetailQuestionnaireDTO + { uuid = project.uuid + , name = project.name + , visibility = project.visibility + , sharing = project.sharing + , knowledgeModelPackageId = project.knowledgeModelPackageId + , selectedQuestionTagUuids = project.selectedQuestionTagUuids + , isTemplate = project.isTemplate , knowledgeModel = km1WithQ4 , replies = fReplies - , labels = qtnCtn.labels - , phaseUuid = qtnCtn.phaseUuid + , labels = projectContent.labels + , phaseUuid = projectContent.phaseUuid , migrationUuid = Nothing , permissions = permissions , files = [] , unresolvedCommentCounts = unresolvedCommentCounts , resolvedCommentCounts = M.empty - , questionnaireActionsAvailable = 0 - , questionnaireImportersAvailable = 0 + , projectActionsAvailable = 0 + , projectImportersAvailable = 0 , fileCount = 0 } let expBody = encode expDto @@ -194,27 +194,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -224,7 +224,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -238,8 +238,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/questionnaire" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/questionnaire" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Report_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Report_GET.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Report_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Report_GET.hs index fdf09d6eb..ad6af0eb1 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Report_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Report_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Report_GET ( +module Wizard.Specs.API.Project.Detail_Report_GET ( detail_report_GET, ) where @@ -18,31 +18,31 @@ import Shared.Common.Model.Error.Error import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailReportJM () -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportDTO +import Wizard.Api.Resource.Project.Detail.ProjectDetailReportJM () +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Database.Migration.Development.Report.Data.Reports import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.Report.Report import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/report +-- GET /wizard-api/projects/{projectUuid}/report -- ------------------------------------------------------------------------ detail_report_GET :: AppContext -> SpecWith ((), Application) detail_report_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/report" $ do + describe "GET /wizard-api/projects/{projectUuid}/report" $ do test_200 appContext test_403 appContext test_404 appContext @@ -52,7 +52,7 @@ detail_report_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/report" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/report" reqHeadersT authHeader = reqCtHeader : authHeader @@ -62,17 +62,17 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_200 appContext = do - create_test_200 "HTTP 200 OK (Owner, Private)" appContext questionnaire1 [reqAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext questionnaire2 [reqNonAdminAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleView, Sharing)" appContext questionnaire7 [] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext questionnaire3 [reqNonAdminAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit, Sharing)" appContext questionnaire10 [] + create_test_200 "HTTP 200 OK (Owner, Private)" appContext project1 [reqAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext project2 [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleView, Sharing)" appContext project7 [] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext project3 [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit, Sharing)" appContext project10 [] -create_test_200 title appContext qtn authHeader = +create_test_200 title appContext project authHeader = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT authHeader -- GIVEN: Prepare expectation let expStatus = 200 @@ -82,18 +82,18 @@ create_test_200 title appContext qtn authHeader = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext - runInContextIO (insertQuestionnaireEvents questionnaire7Events) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaireEvents questionnaire10Events) appContext + runInContextIO (insertProject project7) appContext + runInContextIO (insertProjectEvents project7Events) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProjectEvents project10Events) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation result <- destructResponse' response - let (status, headers, resBody) = result :: (Int, ResponseHeaders, QuestionnaireDetailReportDTO) + let (status, headers, resBody) = result :: (Int, ResponseHeaders, ProjectDetailReportDTO) assertResStatus status expStatus assertResHeaders headers expHeaders compareReportDtos resBody expDto @@ -105,27 +105,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleEdit)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -135,7 +135,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -149,8 +149,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/report" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/report" (reqHeadersT [reqAuthHeader]) reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Revert_POST.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Revert_POST.hs similarity index 67% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Revert_POST.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Revert_POST.hs index c5a7e552c..dc2984d86 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Revert_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Revert_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Revert_POST ( +module Wizard.Specs.API.Project.Detail_Revert_POST ( detail_revert_POST, ) where @@ -11,25 +11,25 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.QuestionnaireVersion +import Wizard.Model.Project.Version.ProjectVersion import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common -import Wizard.Specs.API.Questionnaire.Version.Common +import Wizard.Specs.API.Project.Common +import Wizard.Specs.API.Project.Version.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires/{qtnUuid}/revert +-- POST /wizard-api/projects/{projectUuid}/revert -- ------------------------------------------------------------------------ detail_revert_POST :: AppContext -> SpecWith ((), Application) detail_revert_POST appContext = - describe "POST /wizard-api/questionnaires/{qtnUuid}/revert" $ do + describe "POST /wizard-api/projects/{projectUuid}/revert" $ do test_200 appContext test_400 appContext test_401 appContext @@ -39,11 +39,11 @@ detail_revert_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/questionnaires/af984a75-56e3-49f8-b16f-d6b99599910a/revert" +reqUrl = "/wizard-api/projects/af984a75-56e3-49f8-b16f-d6b99599910a/revert" reqHeaders = [reqAuthHeader, reqCtHeader] -reqDto = questionnaireVersion1RevertDto questionnaire1Uuid +reqDto = projectVersion1RevertDto project1Uuid reqBody = encode reqDto @@ -56,11 +56,11 @@ test_200 appContext = do let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = questionnaire1CtnRevertedDto + let expDto = project1CtnRevertedDto let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -68,8 +68,8 @@ test_200 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find a result in DB - assertExistenceOfQuestionnaireInDB appContext questionnaire1 [sre_rQ1' questionnaire1Uuid, sre_rQ2' questionnaire1Uuid] - assertAbsenceOfQuestionnaireVersionInDB appContext (questionnaireVersion1 questionnaire1Uuid) + assertExistenceOfProjectInDB appContext project1 [sre_rQ1' project1Uuid, sre_rQ2' project1Uuid] + assertAbsenceOfProjectVersionInDB appContext (projectVersion1 project1Uuid) -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Revert_Preview_POST.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Revert_Preview_POST.hs similarity index 66% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Revert_Preview_POST.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Revert_Preview_POST.hs index f96aabb22..bc5b6a66a 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Revert_Preview_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Revert_Preview_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Revert_Preview_POST ( +module Wizard.Specs.API.Project.Detail_Revert_Preview_POST ( detail_revert_preview_POST, ) where @@ -11,26 +11,26 @@ import Test.Hspec.Wai hiding (shouldRespondWith) import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireContentDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Api.Resource.Project.ProjectContentDTO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires/{qtnUuid}/revert/preview +-- POST /wizard-api/projects/{projectUuid}/revert/preview -- ------------------------------------------------------------------------ detail_revert_preview_POST :: AppContext -> SpecWith ((), Application) detail_revert_preview_POST appContext = - describe "POST /wizard-api/questionnaires/{qtnUuid}/revert/preview" $ do + describe "POST /wizard-api/projects/{projectUuid}/revert/preview" $ do test_200 appContext test_400 appContext @@ -39,11 +39,11 @@ detail_revert_preview_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/questionnaires/af984a75-56e3-49f8-b16f-d6b99599910a/revert/preview" +reqUrl = "/wizard-api/projects/af984a75-56e3-49f8-b16f-d6b99599910a/revert/preview" reqHeadersT authHeader = authHeader ++ [reqCtHeader] -reqDto = questionnaireVersion1RevertDto questionnaire1Uuid +reqDto = projectVersion1RevertDto project1Uuid reqBody = encode reqDto @@ -62,17 +62,17 @@ create_test_200 title appContext showComments authHeader = -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expQtn = questionnaire1 {sharing = AnyoneWithLinkViewQuestionnaire} - let expQtnEvents = questionnaire1Events + let expProject = project1 {sharing = AnyoneWithLinkViewProjectSharing} + let expProjectEvents = project1Events let expDto = if showComments - then questionnaire1CtnRevertedDto - else questionnaire1CtnRevertedDto {commentThreadsMap = M.empty} + then project1CtnRevertedDto + else project1CtnRevertedDto {commentThreadsMap = M.empty} let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (updateQuestionnaireByUuid expQtn) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (updateProjectByUuid expProject) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -80,7 +80,7 @@ create_test_200 title appContext showComments authHeader = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find a result in DB - assertExistenceOfQuestionnaireInDB appContext expQtn expQtnEvents + assertExistenceOfProjectInDB appContext expProject expProjectEvents -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Settings_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Settings_GET.hs similarity index 74% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Settings_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Settings_GET.hs index 495a68629..31730b2c7 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Settings_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Settings_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Settings_GET ( +module Wizard.Specs.API.Project.Detail_Settings_GET ( detail_settings_GET, ) where @@ -25,16 +25,16 @@ import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel hiding (request) -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireDetailSettings +import Wizard.Model.Project.Detail.ProjectDetailSettings +import Wizard.Model.Project.Project import qualified Wizard.Service.KnowledgeModel.Package.KnowledgeModelPackageMapper as PM -import Wizard.Service.Questionnaire.QuestionnaireMapper +import Wizard.Service.Project.ProjectMapper import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -42,11 +42,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/settings +-- GET /wizard-api/projects/{projectUuid}/settings -- ------------------------------------------------------------------------ detail_settings_GET :: AppContext -> SpecWith ((), Application) detail_settings_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/settings" $ do + describe "GET /wizard-api/projects/{projectUuid}/settings" $ do test_200 appContext test_403 appContext test_404 appContext @@ -56,7 +56,7 @@ detail_settings_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/settings" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/settings" reqHeadersT authHeader = authHeader @@ -69,86 +69,86 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 + project1 [reqAuthHeader] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext - questionnaire2 + project2 [reqNonAdminAuthHeader] - [qtn2AlbertEditQtnPermDto] + [project2AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) + (project13 {visibility = PrivateProjectVisibility}) [reqNonAdminAuthHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext - questionnaire13 + project13 [reqIsaacAuthTokenHeader] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) [] - [qtn13NikolaCommentQtnPermDto] + [project13NikolaCommentProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 + project7 [] - [qtn7AlbertEditQtnPermDto] + [project7AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext - questionnaire3 + project3 [reqNonAdminAuthHeader] [] create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext - questionnaire10 + project10 [] [] -create_test_200 title appContext qtn authHeader permissions = +create_test_200 title appContext project authHeader permissions = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO (insertProject project) appContext -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders let expDto = - QuestionnaireDetailSettings - { uuid = qtn.uuid - , name = qtn.name - , description = qtn.description - , visibility = qtn.visibility - , sharing = qtn.sharing - , isTemplate = qtn.isTemplate + ProjectDetailSettings + { uuid = project.uuid + , name = project.name + , description = project.description + , visibility = project.visibility + , sharing = project.sharing + , isTemplate = project.isTemplate , migrationUuid = Nothing , permissions = permissions - , projectTags = qtn.projectTags - , knowledgeModelPackageId = qtn.knowledgeModelPackageId + , projectTags = project.projectTags + , knowledgeModelPackageId = project.knowledgeModelPackageId , knowledgeModelPackage = PM.toSimpleDTO' [] [] germanyKmPackage , knowledgeModelTags = M.elems km1WithQ4.entities.tags , documentTemplate = Just $ STM.toDTO wizardDocumentTemplate wizardDocumentTemplateFormats - , documentTemplateState = toQuestionnaireDetailTemplateState (Just wizardDocumentTemplate) + , documentTemplateState = toProjectDetailTemplateState (Just wizardDocumentTemplate) , documentTemplatePhase = Just wizardDocumentTemplate.phase , formatUuid = Just formatJson.uuid - , selectedQuestionTagUuids = qtn.selectedQuestionTagUuids + , selectedQuestionTagUuids = project.selectedQuestionTagUuids , fileCount = 0 } let expBody = encode expDto @@ -166,27 +166,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -196,7 +196,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -210,8 +210,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/settings" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/settings" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Settings_PUT.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Settings_PUT.hs similarity index 62% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Settings_PUT.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Settings_PUT.hs index 03e0fa315..015b35d5f 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Settings_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Settings_PUT.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Settings_PUT ( +module Wizard.Specs.API.Project.Detail_Settings_PUT ( detail_settings_PUT, ) where @@ -14,27 +14,27 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Api.Resource.Questionnaire.QuestionnaireSettingsChangeDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Api.Resource.Project.ProjectSettingsChangeDTO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- PUT /wizard-api/questionnaires/{qtnUuid}/settings +-- PUT /wizard-api/projects/{projectUuid}/settings -- ------------------------------------------------------------------------ detail_settings_PUT :: AppContext -> SpecWith ((), Application) detail_settings_PUT appContext = - describe "PUT /wizard-api/questionnaires/{qtnUuid}/settings" $ do + describe "PUT /wizard-api/projects/{projectUuid}/settings" $ do test_200 appContext test_400 appContext test_401 appContext @@ -46,21 +46,21 @@ detail_settings_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/settings" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/settings" reqHeadersT authHeader = authHeader ++ [reqCtHeader] -reqDtoT qtn = - QuestionnaireSettingsChangeDTO - { name = qtn.name - , description = qtn.description - , projectTags = qtn.projectTags - , documentTemplateId = qtn.documentTemplateId - , formatUuid = qtn.formatUuid - , isTemplate = qtn.isTemplate +reqDtoT project = + ProjectSettingsChangeDTO + { name = project.name + , description = project.description + , projectTags = project.projectTags + , documentTemplateId = project.documentTemplateId + , formatUuid = project.formatUuid + , isTemplate = project.isTemplate } -reqBodyT qtn = encode $ reqDtoT qtn +reqBodyT project = encode $ reqDtoT project -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -69,10 +69,10 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 - questionnaire1SettingsEdited - questionnaire1Events - questionnaire1Ctn + project1 + project1SettingsEdited + project1Events + project1Ctn [] True [reqAuthHeader] @@ -80,10 +80,10 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, VisibleView)" appContext - questionnaire2 - questionnaire2SettingsEdited - questionnaire2Events - questionnaire2Ctn + project2 + project2SettingsEdited + project2Events + project2Ctn [] False [reqAuthHeader] @@ -91,35 +91,35 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Non-Owner, Private, Sharing, Anonymous Enabled)" appContext - questionnaire10 - questionnaire10EditedSettings - questionnaire10Events - questionnaire10Ctn - [qtn10NikolaEditQtnPermDto] + project10 + project10EditedSettings + project10Events + project10Ctn + [project10NikolaEditProjectPermDto] False [reqNonAdminAuthHeader] True -create_test_200 title appContext qtn qtnEdited qtnEvents qtnCtn permissions showComments authHeader anonymousEnabled = +create_test_200 title appContext project projectEdited projectEvents projectContent permissions showComments authHeader anonymousEnabled = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT authHeader - let reqBody = reqBodyT qtnEdited + let reqBody = reqBodyT projectEdited -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = reqDtoT qtnEdited + let expDto = reqDtoT projectEdited let expBody = encode expDto -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaireEvents questionnaire10Events) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProjectEvents project10Events) appContext -- AND: Enabled anonymous sharing - updateAnonymousQuestionnaireSharing appContext anonymousEnabled + updateAnonymousProjectSharing appContext anonymousEnabled -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -127,18 +127,18 @@ create_test_200 title appContext qtn qtnEdited qtnEvents qtnCtn permissions show ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find a result in DB - assertExistenceOfQuestionnaireInDB appContext qtnEdited qtnEvents + assertExistenceOfProjectInDB appContext projectEdited projectEvents -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT questionnaire3.uuid) "visibility" +test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT project3.uuid) "visibility" -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_401 appContext = - createAuthTest reqMethod (reqUrlT questionnaire3.uuid) [reqCtHeader] (reqBodyT questionnaire1) + createAuthTest reqMethod (reqUrlT project3.uuid) [reqCtHeader] (reqBodyT project1) -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -147,36 +147,36 @@ test_403 appContext = do createNoPermissionTest appContext reqMethod - (reqUrlT questionnaire3.uuid) + (reqUrlT project3.uuid) [reqCtHeader] - (reqBodyT questionnaire1) - "QTN_PERM" + (reqBodyT project1) + "PRJ_PERM" create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 - questionnaire1SettingsEdited - "Administrate Questionnaire" + project1 + project1SettingsEdited + "Administrate Project" create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 - questionnaire2SettingsEdited - "Administrate Questionnaire" + project2 + project2SettingsEdited + "Administrate Project" create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private, Sharing, Anonymous Disabled)" appContext - questionnaire10 - questionnaire10EditedSettings - "Administrate Questionnaire" + project10 + project10EditedSettings + "Administrate Project" -create_test_403 title appContext qtn qtnEdited reason = +create_test_403 title appContext project projectEdited reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT [reqNonAdminAuthHeader] - let reqBody = reqBodyT qtnEdited + let reqBody = reqBodyT projectEdited -- AND: Prepare expectation let expStatus = 403 let expHeaders = resCtHeader : resCorsHeaders @@ -185,8 +185,8 @@ create_test_403 title appContext qtn qtnEdited reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project10) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -200,8 +200,8 @@ create_test_403 title appContext qtn qtnEdited reason = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/settings" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/settings" (reqHeadersT [reqAuthHeader]) - (reqBodyT questionnaire1) - "questionnaire" + (reqBodyT project1) + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Share_PUT.hs b/wizard-server/test/Wizard/Specs/API/Project/Detail_Share_PUT.hs similarity index 62% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Share_PUT.hs rename to wizard-server/test/Wizard/Specs/API/Project/Detail_Share_PUT.hs index 175eeeed9..84d91661d 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Detail_Share_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Detail_Share_PUT.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Detail_Share_PUT ( +module Wizard.Specs.API.Project.Detail_Share_PUT ( detail_share_PUT, ) where @@ -14,28 +14,28 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Api.Resource.Questionnaire.QuestionnaireShareChangeDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Api.Resource.Project.ProjectShareChangeDTO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.QuestionnaireMapper +import Wizard.Model.Project.Project +import Wizard.Service.Project.ProjectMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- PUT /wizard-api/questionnaires/{qtnUuid}/share +-- PUT /wizard-api/projects/{projectUuid}/share -- ------------------------------------------------------------------------ detail_share_PUT :: AppContext -> SpecWith ((), Application) detail_share_PUT appContext = - describe "PUT /wizard-api/questionnaires/{qtnUuid}/share" $ do + describe "PUT /wizard-api/projects/{projectUuid}/share" $ do test_200 appContext test_400 appContext test_401 appContext @@ -47,18 +47,18 @@ detail_share_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/share" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/share" reqHeadersT authHeader = authHeader ++ [reqCtHeader] -reqDtoT qtn = - QuestionnaireShareChangeDTO - { visibility = qtn.visibility - , sharing = qtn.sharing - , permissions = fmap toQuestionnairePermChangeDTO qtn.permissions +reqDtoT project = + ProjectShareChangeDTO + { visibility = project.visibility + , sharing = project.sharing + , permissions = fmap toProjectPermChangeDTO project.permissions } -reqBodyT qtn = encode $ reqDtoT qtn +reqBodyT project = encode $ reqDtoT project -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -67,10 +67,10 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 - questionnaire1ShareEdited - questionnaire1Events - questionnaire1Ctn + project1 + project1ShareEdited + project1Events + project1Ctn [] True [reqAuthHeader] @@ -78,10 +78,10 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, VisibleView)" appContext - questionnaire2 - questionnaire2ShareEdited - questionnaire2Events - questionnaire2Ctn + project2 + project2ShareEdited + project2Events + project2Ctn [] False [reqAuthHeader] @@ -89,35 +89,35 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Non-Owner, Private, Sharing, Anonymous Enabled)" appContext - questionnaire10 - questionnaire10EditedShare - questionnaire10Events - questionnaire10Ctn - [qtn10NikolaEditQtnPermDto] + project10 + project10EditedShare + project10Events + project10Ctn + [project10NikolaEditProjectPermDto] False [reqNonAdminAuthHeader] True -create_test_200 title appContext qtn qtnEdited qtnEvents qtnCtn permissions showComments authHeader anonymousEnabled = +create_test_200 title appContext project projectEdited projectEvents projectContent permissions showComments authHeader anonymousEnabled = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT authHeader - let reqBody = reqBodyT qtnEdited + let reqBody = reqBodyT projectEdited -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = reqDtoT qtnEdited + let expDto = reqDtoT projectEdited let expBody = encode expDto -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaireEvents questionnaire10Events) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProjectEvents project10Events) appContext -- AND: Enabled anonymous sharing - updateAnonymousQuestionnaireSharing appContext anonymousEnabled + updateAnonymousProjectSharing appContext anonymousEnabled -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -125,18 +125,18 @@ create_test_200 title appContext qtn qtnEdited qtnEvents qtnCtn permissions show ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find a result in DB - assertExistenceOfQuestionnaireInDB appContext qtnEdited qtnEvents + assertExistenceOfProjectInDB appContext projectEdited projectEvents -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT questionnaire3.uuid) "visibility" +test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT project3.uuid) "visibility" -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_401 appContext = - createAuthTest reqMethod (reqUrlT questionnaire3.uuid) [reqCtHeader] (reqBodyT questionnaire1) + createAuthTest reqMethod (reqUrlT project3.uuid) [reqCtHeader] (reqBodyT project1) -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -145,36 +145,36 @@ test_403 appContext = do createNoPermissionTest appContext reqMethod - (reqUrlT questionnaire3.uuid) + (reqUrlT project3.uuid) [reqCtHeader] - (reqBodyT questionnaire1) - "QTN_PERM" + (reqBodyT project1) + "PRJ_PERM" create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 - questionnaire1ShareEdited - "Administrate Questionnaire" + project1 + project1ShareEdited + "Administrate Project" create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 - questionnaire2ShareEdited - "Administrate Questionnaire" + project2 + project2ShareEdited + "Administrate Project" create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private, Sharing, Anonymous Disabled)" appContext - questionnaire10 - questionnaire10EditedShare - "Administrate Questionnaire" + project10 + project10EditedShare + "Administrate Project" -create_test_403 title appContext qtn qtnEdited reason = +create_test_403 title appContext project projectEdited reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT [reqNonAdminAuthHeader] - let reqBody = reqBodyT qtnEdited + let reqBody = reqBodyT projectEdited -- AND: Prepare expectation let expStatus = 403 let expHeaders = resCtHeader : resCorsHeaders @@ -183,8 +183,8 @@ create_test_403 title appContext qtn qtnEdited reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project10) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -198,8 +198,8 @@ create_test_403 title appContext qtn qtnEdited reason = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/share" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/share" (reqHeadersT [reqAuthHeader]) - (reqBodyT questionnaire1) - "questionnaire" + (reqBodyT project1) + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Project/Event/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Project/Event/APISpec.hs new file mode 100644 index 000000000..cd25e3c00 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/Project/Event/APISpec.hs @@ -0,0 +1,11 @@ +module Wizard.Specs.API.Project.Event.APISpec where + +import Test.Hspec + +import Wizard.Specs.API.Project.Event.Detail_GET +import Wizard.Specs.API.Project.Event.List_GET + +projectEventAPI appContext = + describe "PROJECT EVENT API Spec" $ do + list_GET appContext + detail_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Event/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Event/Detail_GET.hs similarity index 58% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Event/Detail_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Event/Detail_GET.hs index 6d30387ba..e650402ec 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Event/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Event/Detail_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Event.Detail_GET ( +module Wizard.Specs.API.Project.Event.Detail_GET ( detail_GET, ) where @@ -15,22 +15,22 @@ import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Common.Lens import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectPermDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireEventLenses () -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Model.Project.Event.ProjectEventLenses () +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -38,11 +38,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/events/{eventUuid} +-- GET /wizard-api/projects/{projectUuid}/events/{eventUuid} -- ------------------------------------------------------------------------ detail_GET :: AppContext -> SpecWith ((), Application) detail_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/events/{eventUuid}" $ do + describe "GET /wizard-api/projects/{projectUuid}/events/{eventUuid}" $ do test_200 appContext test_403 appContext test_404 appContext @@ -52,8 +52,8 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid qtnEventUuid = - BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/events/" ++ U.toString qtnEventUuid +reqUrlT projectUuid projectEventUuid = + BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/events/" ++ U.toString projectEventUuid reqHeadersT authHeader = authHeader @@ -63,56 +63,56 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_200 appContext = do - create_test_200 "HTTP 200 OK (Owner, Private)" appContext questionnaire1 questionnaire1Events (sre_rQ1' questionnaire1Uuid) [reqAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext questionnaire2 questionnaire2Events (sre_rQ1' questionnaire2Uuid) [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Owner, Private)" appContext project1 project1Events (sre_rQ1' project1Uuid) [reqAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext project2 project2Events (sre_rQ1' project2Uuid) [reqNonAdminAuthHeader] create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) - questionnaire13Events - (sre_rQ1' questionnaire13Uuid) + (project13 {visibility = PrivateProjectVisibility}) + project13Events + (sre_rQ1' project13Uuid) [reqNonAdminAuthHeader] create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext - questionnaire13 - questionnaire13Events - (sre_rQ1' questionnaire13Uuid) + project13 + project13Events + (sre_rQ1' project13Uuid) [reqIsaacAuthTokenHeader] create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) - questionnaire13Events - (sre_rQ1' questionnaire13Uuid) + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) + project13Events + (sre_rQ1' project13Uuid) [] - create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext questionnaire7 questionnaire7Events (sre_rQ1' questionnaire7Uuid) [] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext questionnaire3 questionnaire3Events (sre_rQ1' questionnaire3Uuid) [reqNonAdminAuthHeader] - create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext questionnaire10 questionnaire10Events (sre_rQ1' questionnaire10Uuid) [] + create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext project7 project7Events (sre_rQ1' project7Uuid) [] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext project3 project3Events (sre_rQ1' project3Uuid) [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext project10 project10Events (sre_rQ1' project10Uuid) [] -create_test_200 title appContext qtn qtnEvents qtnEvent authHeader = +create_test_200 title appContext project projectEvents projectEvent authHeader = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid (getUuid qtnEvent) + let reqUrl = reqUrlT project.uuid (getUuid projectEvent) let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = toEventDTO qtnEvent (Just userAlbert) + let expDto = toEventDTO projectEvent (Just userAlbert) let expBody = encode expDto -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO deleteQuestionnaireVersions appContext - runInContextIO deleteQuestionnaireEvents appContext - runInContextIO deleteQuestionnaireComments appContext - runInContextIO deleteQuestionnaireCommentThreads appContext - runInContextIO deleteQuestionnairePerms appContext - runInContextIO deleteQuestionnaires appContext - runInContextIO (insertQuestionnaire qtn) appContext - runInContextIO (insertQuestionnaireEvents qtnEvents) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO deleteProjectVersions appContext + runInContextIO deleteProjectEvents appContext + runInContextIO deleteProjectComments appContext + runInContextIO deleteProjectCommentThreads appContext + runInContextIO deleteProjectPerms appContext + runInContextIO deleteProjects appContext + runInContextIO (insertProject project) appContext + runInContextIO (insertProjectEvents projectEvents) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -127,30 +127,30 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 - (sre_rQ1' questionnaire1Uuid) + project1 + (sre_rQ1' project1Uuid) [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 - (sre_rQ1' questionnaire2Uuid) + project2 + (sre_rQ1' project2Uuid) [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 - (sre_rQ1' questionnaire3Uuid) + project3 + (sre_rQ1' project3Uuid) [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn qtnEvent authHeader errorMessage = +create_test_403 title appContext project projectEvent authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid (getUuid qtnEvent) + let reqUrl = reqUrlT project.uuid (getUuid projectEvent) let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -160,7 +160,7 @@ create_test_403 title appContext qtn qtnEvent authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -174,8 +174,8 @@ create_test_403 title appContext qtn qtnEvent authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/events" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/events" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Event/List_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Event/List_GET.hs similarity index 62% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Event/List_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Event/List_GET.hs index 6de08b466..59f7dd493 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Event/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Event/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Event.List_GET ( +module Wizard.Specs.API.Project.Event.List_GET ( list_GET, ) where @@ -16,19 +16,19 @@ import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.PageMetadata import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectPermDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -36,11 +36,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/events +-- GET /wizard-api/projects/{projectUuid}/events -- ------------------------------------------------------------------------ list_GET :: AppContext -> SpecWith ((), Application) list_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/events" $ do + describe "GET /wizard-api/projects/{projectUuid}/events" $ do test_200 appContext test_403 appContext test_404 appContext @@ -50,7 +50,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/events" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/events" reqHeadersT authHeader = authHeader @@ -60,48 +60,48 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_200 appContext = do - create_test_200 "HTTP 200 OK (Owner, Private)" appContext questionnaire1 questionnaire1Events [reqAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext questionnaire2 questionnaire2Events [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Owner, Private)" appContext project1 project1Events [reqAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext project2 project2Events [reqNonAdminAuthHeader] create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) - questionnaire13Events + (project13 {visibility = PrivateProjectVisibility}) + project13Events [reqNonAdminAuthHeader] - create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext questionnaire13 questionnaire13Events [reqIsaacAuthTokenHeader] + create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext project13 project13Events [reqIsaacAuthTokenHeader] create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) - questionnaire13Events + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) + project13Events [] - create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext questionnaire7 questionnaire7Events [] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext questionnaire3 questionnaire3Events [reqNonAdminAuthHeader] - create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext questionnaire10 questionnaire10Events [] + create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext project7 project7Events [] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext project3 project3Events [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext project10 project10Events [] -create_test_200 title appContext qtn qtnEvents authHeader = +create_test_200 title appContext project projectEvents authHeader = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = Page "questionnaireEvents" (PageMetadata 20 16 1 0) (fEventsDto qtn.uuid) + let expDto = Page "projectEvents" (PageMetadata 20 16 1 0) (fEventsDto project.uuid) let expBody = encode expDto -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO deleteQuestionnaireVersions appContext - runInContextIO deleteQuestionnaireEvents appContext - runInContextIO deleteQuestionnaireComments appContext - runInContextIO deleteQuestionnaireCommentThreads appContext - runInContextIO deleteQuestionnairePerms appContext - runInContextIO deleteQuestionnaires appContext - runInContextIO (insertQuestionnaire qtn) appContext - runInContextIO (insertQuestionnaireEvents qtnEvents) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO deleteProjectVersions appContext + runInContextIO deleteProjectEvents appContext + runInContextIO deleteProjectComments appContext + runInContextIO deleteProjectCommentThreads appContext + runInContextIO deleteProjectPerms appContext + runInContextIO deleteProjects appContext + runInContextIO (insertProject project) appContext + runInContextIO (insertProjectEvents projectEvents) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -116,27 +116,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -146,7 +146,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -160,8 +160,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/events" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/events" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/List_GET.hs similarity index 54% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/List_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/List_GET.hs index ed83aafd2..77683c121 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.List_GET ( +module Wizard.Specs.API.Project.List_GET ( list_GET, ) where @@ -16,11 +16,11 @@ import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.PageMetadata import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext @@ -31,11 +31,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires +-- GET /wizard-api/projects -- ------------------------------------------------------------------------ list_GET :: AppContext -> SpecWith ((), Application) list_GET appContext = - describe "GET /wizard-api/questionnaires" $ do + describe "GET /wizard-api/projects" $ do test_200 appContext test_401 appContext test_403 appContext @@ -45,7 +45,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaires" +reqUrl = "/wizard-api/projects" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -58,184 +58,184 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Admin - pagination)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&page=1&size=1" + "/wizard-api/projects?sort=uuid,asc&page=1&size=1" reqAuthHeader - (Page "questionnaires" (PageMetadata 1 6 6 1) [questionnaire14Dto]) + (Page "projects" (PageMetadata 1 6 6 1) [project14Dto]) create_test_200 "HTTP 200 OK (Admin - query)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&q=pr" + "/wizard-api/projects?sort=uuid,asc&q=pri" reqAuthHeader - (Page "questionnaires" (PageMetadata 20 2 1 0) [questionnaire1Dto, questionnaire12Dto]) + (Page "projects" (PageMetadata 20 2 1 0) [project1Dto, project12Dto]) create_test_200 "HTTP 200 OK (Admin - userUuids)" appContext - (BS.pack $ "/wizard-api/questionnaires?sort=uuid,asc&userUuids=" ++ U.toString userAlbert.uuid) + (BS.pack $ "/wizard-api/projects?sort=uuid,asc&userUuids=" ++ U.toString userAlbert.uuid) reqAuthHeader - (Page "questionnaires" (PageMetadata 20 3 1 0) [questionnaire1Dto, questionnaire2Dto, questionnaire12Dto]) + (Page "projects" (PageMetadata 20 3 1 0) [project1Dto, project2Dto, project12Dto]) create_test_200 "HTTP 200 OK (Admin - userUuids, or)" appContext ( BS.pack $ - "/wizard-api/questionnaires?sort=uuid,asc&userUuidsOp=or&userUuids=" + "/wizard-api/projects?sort=uuid,asc&userUuidsOp=or&userUuids=" ++ U.toString userAlbert.uuid ++ "," ++ U.toString userIsaac.uuid ) reqAuthHeader - (Page "questionnaires" (PageMetadata 20 3 1 0) [questionnaire1Dto, questionnaire2Dto, questionnaire12Dto]) + (Page "projects" (PageMetadata 20 3 1 0) [project1Dto, project2Dto, project12Dto]) create_test_200 "HTTP 200 OK (Admin - userUuids, and)" appContext ( BS.pack $ - "/wizard-api/questionnaires?sort=uuid,asc&userUuidsOp=and&userUuids=" + "/wizard-api/projects?sort=uuid,asc&userUuidsOp=and&userUuids=" ++ U.toString userAlbert.uuid ++ "," ++ U.toString userIsaac.uuid ) reqAuthHeader - (Page "questionnaires" (PageMetadata 20 0 0 0) ([] :: [QuestionnaireDTO])) + (Page "projects" (PageMetadata 20 0 0 0) ([] :: [ProjectDTO])) create_test_200 "HTTP 200 OK (Admin - isTemplate - true)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isTemplate=true" + "/wizard-api/projects?sort=uuid,asc&isTemplate=true" reqAuthHeader - (Page "questionnaires" (PageMetadata 20 3 1 0) [questionnaire14Dto, questionnaire1Dto, questionnaire12Dto]) + (Page "projects" (PageMetadata 20 3 1 0) [project14Dto, project1Dto, project12Dto]) create_test_200 "HTTP 200 OK (Admin - isTemplate - false)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isTemplate=false" + "/wizard-api/projects?sort=uuid,asc&isTemplate=false" reqAuthHeader - (Page "questionnaires" (PageMetadata 20 3 1 0) [questionnaire3Dto, questionnaire15Dto, questionnaire2Dto]) + (Page "projects" (PageMetadata 20 3 1 0) [project3Dto, project15Dto, project2Dto]) create_test_200 "HTTP 200 OK (Admin - isMigrating - true)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isMigrating=true" + "/wizard-api/projects?sort=uuid,asc&isMigrating=true" reqAuthHeader - (Page "questionnaires" (PageMetadata 20 0 0 0) ([] :: [QuestionnaireDTO])) + (Page "projects" (PageMetadata 20 0 0 0) ([] :: [ProjectDTO])) create_test_200 "HTTP 200 OK (Admin - isMigrating - false)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isMigrating=false" + "/wizard-api/projects?sort=uuid,asc&isMigrating=false" reqAuthHeader ( Page - "questionnaires" + "projects" (PageMetadata 20 6 1 0) - [questionnaire3Dto, questionnaire14Dto, questionnaire1Dto, questionnaire15Dto, questionnaire2Dto, questionnaire12Dto] + [project3Dto, project14Dto, project1Dto, project15Dto, project2Dto, project12Dto] ) create_test_200 "HTTP 200 OK (Admin - projectTags)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&projectTags=projectTag1" + "/wizard-api/projects?sort=uuid,asc&projectTags=projectTag1" reqAuthHeader ( Page - "questionnaires" + "projects" (PageMetadata 20 4 1 0) - [questionnaire14Dto, questionnaire1Dto, questionnaire2Dto, questionnaire12Dto] + [project14Dto, project1Dto, project2Dto, project12Dto] ) create_test_200 "HTTP 200 OK (Admin - projectTags, or)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&projectTagsOp=or&projectTags=projectTag1,projectTag2" + "/wizard-api/projects?sort=uuid,asc&projectTagsOp=or&projectTags=projectTag1,projectTag2" reqAuthHeader ( Page - "questionnaires" + "projects" (PageMetadata 20 4 1 0) - [questionnaire14Dto, questionnaire1Dto, questionnaire2Dto, questionnaire12Dto] + [project14Dto, project1Dto, project2Dto, project12Dto] ) create_test_200 "HTTP 200 OK (Admin - projectTags, and)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&projectTagsOp=and&projectTags=projectTag1,projectTag2" + "/wizard-api/projects?sort=uuid,asc&projectTagsOp=and&projectTags=projectTag1,projectTag2" reqAuthHeader - (Page "questionnaires" (PageMetadata 20 1 1 0) [questionnaire2Dto]) + (Page "projects" (PageMetadata 20 1 1 0) [project2Dto]) create_test_200 "HTTP 200 OK (Admin - knowledgePackage)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&knowledgeModelPackageIds=org.nl.amsterdam:core-amsterdam:all" + "/wizard-api/projects?sort=uuid,asc&knowledgeModelPackageIds=org.nl.amsterdam:core-amsterdam:all" reqAuthHeader - (Page "questionnaires" (PageMetadata 20 1 1 0) [questionnaire14Dto]) + (Page "projects" (PageMetadata 20 1 1 0) [project14Dto]) create_test_200 "HTTP 200 OK (Admin - sort asc)" appContext - "/wizard-api/questionnaires?sort=uuid,asc" + "/wizard-api/projects?sort=uuid,asc" reqAuthHeader ( Page - "questionnaires" + "projects" (PageMetadata 20 6 1 0) - [questionnaire3Dto, questionnaire14Dto, questionnaire1Dto, questionnaire15Dto, questionnaire2Dto, questionnaire12Dto] + [project3Dto, project14Dto, project1Dto, project15Dto, project2Dto, project12Dto] ) create_test_200 "HTTP 200 OK (Admin - sort desc)" appContext - "/wizard-api/questionnaires?sort=updatedAt,desc" + "/wizard-api/projects?sort=updatedAt,desc" reqAuthHeader ( Page - "questionnaires" + "projects" (PageMetadata 20 6 1 0) - [questionnaire15Dto, questionnaire3Dto, questionnaire14Dto, questionnaire1Dto, questionnaire12Dto, questionnaire2Dto] + [project15Dto, project3Dto, project14Dto, project1Dto, project12Dto, project2Dto] ) create_test_200 "HTTP 200 OK (Non-Admin)" appContext - "/wizard-api/questionnaires?sort=uuid,asc" + "/wizard-api/projects?sort=uuid,asc" reqNonAdminAuthHeader ( Page - "questionnaires" + "projects" (PageMetadata 20 5 1 0) - [questionnaire3Dto, questionnaire14Dto, questionnaire15Dto, questionnaire2Dto, questionnaire12Dto] + [project3Dto, project14Dto, project15Dto, project2Dto, project12Dto] ) create_test_200 "HTTP 200 OK (Non-Admin - query)" appContext - "/wizard-api/questionnaires?q=pr" + "/wizard-api/projects?q=pri" reqNonAdminAuthHeader - (Page "questionnaires" (PageMetadata 20 1 1 0) [questionnaire12Dto]) + (Page "projects" (PageMetadata 20 1 1 0) [project12Dto]) create_test_200 "HTTP 200 OK (Non-Admin - query users)" appContext - (BS.pack $ "/wizard-api/questionnaires?sort=uuid,asc&userUuids=" ++ U.toString userAlbert.uuid) + (BS.pack $ "/wizard-api/projects?sort=uuid,asc&userUuids=" ++ U.toString userAlbert.uuid) reqNonAdminAuthHeader - (Page "questionnaires" (PageMetadata 20 2 1 0) [questionnaire2Dto, questionnaire12Dto]) + (Page "projects" (PageMetadata 20 2 1 0) [project2Dto, project12Dto]) create_test_200 "HTTP 200 OK (Non-Admin - projectTags)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&projectTags=projectTag1" + "/wizard-api/projects?sort=uuid,asc&projectTags=projectTag1" reqNonAdminAuthHeader - (Page "questionnaires" (PageMetadata 20 3 1 0) [questionnaire14Dto, questionnaire2Dto, questionnaire12Dto]) + (Page "projects" (PageMetadata 20 3 1 0) [project14Dto, project2Dto, project12Dto]) create_test_200 "HTTP 200 OK (Non-Admin - knowledgeModelPackage)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&knowledgeModelPackageIds=org.nl.amsterdam:core-amsterdam:all" + "/wizard-api/projects?sort=uuid,asc&knowledgeModelPackageIds=org.nl.amsterdam:core-amsterdam:all" reqNonAdminAuthHeader - (Page "questionnaires" (PageMetadata 20 1 1 0) [questionnaire14Dto]) + (Page "projects" (PageMetadata 20 1 1 0) [project14Dto]) create_test_200 "HTTP 200 OK (Non-Admin - isTemplate - true)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isTemplate=true" + "/wizard-api/projects?sort=uuid,asc&isTemplate=true" reqNonAdminAuthHeader - (Page "questionnaires" (PageMetadata 20 2 1 0) [questionnaire14Dto, questionnaire12Dto]) + (Page "projects" (PageMetadata 20 2 1 0) [project14Dto, project12Dto]) create_test_200 "HTTP 200 OK (Non-Admin - isTemplate - false)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isTemplate=false" + "/wizard-api/projects?sort=uuid,asc&isTemplate=false" reqNonAdminAuthHeader - (Page "questionnaires" (PageMetadata 20 3 1 0) [questionnaire3Dto, questionnaire15Dto, questionnaire2Dto]) + (Page "projects" (PageMetadata 20 3 1 0) [project3Dto, project15Dto, project2Dto]) create_test_200 "HTTP 200 OK (Non-Admin - isMigrating - true)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isMigrating=true" + "/wizard-api/projects?sort=uuid,asc&isMigrating=true" reqNonAdminAuthHeader - (Page "questionnaires" (PageMetadata 20 0 0 0) ([] :: [QuestionnaireDTO])) + (Page "projects" (PageMetadata 20 0 0 0) ([] :: [ProjectDTO])) create_test_200 "HTTP 200 OK (Non-Admin - isMigrating - false)" appContext - "/wizard-api/questionnaires?sort=uuid,asc&isMigrating=false" + "/wizard-api/projects?sort=uuid,asc&isMigrating=false" reqNonAdminAuthHeader ( Page - "questionnaires" + "projects" (PageMetadata 20 5 1 0) - [questionnaire3Dto, questionnaire14Dto, questionnaire15Dto, questionnaire2Dto, questionnaire12Dto] + [project3Dto, project14Dto, project15Dto, project2Dto, project12Dto] ) create_test_200 title appContext reqUrl reqAuthHeader expDto = @@ -250,11 +250,11 @@ create_test_200 title appContext reqUrl reqAuthHeader expDto = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext runInContextIO (insertPackage amsterdamKmPackage) appContext - runInContextIO (insertQuestionnaire questionnaire12) appContext - runInContextIO (insertQuestionnaire questionnaire14) appContext - runInContextIO (insertQuestionnaire questionnaire15) appContext + runInContextIO (insertProject project12) appContext + runInContextIO (insertProject project14) appContext + runInContextIO (insertProject project15) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -270,4 +270,4 @@ test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST.hs b/wizard-server/test/Wizard/Specs/API/Project/List_POST.hs similarity index 65% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST.hs rename to wizard-server/test/Wizard/Specs/API/Project/List_POST.hs index 2985aaf77..fb1004f6f 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/List_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.List_POST ( +module Wizard.Specs.API.Project.List_POST ( list_POST, ) where @@ -13,28 +13,28 @@ import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Api.Resource.Project.ProjectCreateDTO +import Wizard.Api.Resource.Project.ProjectCreateJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires +-- POST /wizard-api/projects -- ------------------------------------------------------------------------ list_POST :: AppContext -> SpecWith ((), Application) list_POST appContext = - describe "POST /wizard-api/questionnaires" $ do + describe "POST /wizard-api/projects" $ do test_201 appContext test_400 appContext test_403 appContext @@ -44,89 +44,89 @@ list_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/questionnaires" +reqUrl = "/wizard-api/projects" reqHeadersT authHeader = authHeader ++ [reqCtHeader] -reqDtoT qtn = qtn +reqDtoT project = project -reqBodyT qtn = encode (reqDtoT qtn) +reqBodyT project = encode (reqDtoT project) -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_201 appContext = do - create_test_201 appContext "HTTP 201 CREATED (with token)" False questionnaire1Create [reqAuthHeader] + create_test_201 appContext "HTTP 201 CREATED (with token)" False project1Create [reqAuthHeader] create_test_201 appContext "HTTP 201 CREATED (without token)" True - (questionnaire1Create {sharing = AnyoneWithLinkEditQuestionnaire} :: QuestionnaireCreateDTO) + (project1Create {sharing = AnyoneWithLinkEditProjectSharing} :: ProjectCreateDTO) [] -create_test_201 appContext title anonymousSharingEnabled qtn authHeader = +create_test_201 appContext title anonymousSharingEnabled project authHeader = it title $ -- GIVEN: Prepare request do let reqHeaders = reqHeadersT authHeader - let reqBody = reqBodyT qtn + let reqBody = reqBodyT project -- AND: Prepare expectation let expStatus = 201 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain let expDto = if anonymousSharingEnabled - then questionnaire1Dto {sharing = AnyoneWithLinkEditQuestionnaire} :: QuestionnaireDTO - else questionnaire1Dto + then project1Dto {sharing = AnyoneWithLinkEditProjectSharing} :: ProjectDTO + else project1Dto let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO deleteQuestionnaires appContext + runInContextIO deleteProjects appContext -- AND: Enabled anonymous sharing - updateAnonymousQuestionnaireSharing appContext anonymousSharingEnabled + updateAnonymousProjectSharing appContext anonymousSharingEnabled -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireDTO) + let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, ProjectDTO) assertResStatus status expStatus assertResHeaders headers expHeaders - compareQuestionnaireCreateDtos resBody expDto + compareProjectCreateDtos resBody expDto -- AND: Find a result in DB - (Right eventsInDB) <- runInContextIO (findQuestionnaireEventsByQuestionnaireUuid resBody.uuid) appContext + (Right eventsInDB) <- runInContextIO (findProjectEventsByProjectUuid resBody.uuid) appContext if anonymousSharingEnabled then - assertExistenceOfQuestionnaireInDB + assertExistenceOfProjectInDB appContext - ( questionnaire1 + ( project1 { uuid = resBody.uuid , description = Nothing , isTemplate = False - , sharing = AnyoneWithLinkEditQuestionnaire + , sharing = AnyoneWithLinkEditProjectSharing , projectTags = [] , permissions = [] , creatorUuid = Nothing } - :: Questionnaire + :: Project ) eventsInDB else do let aPermissions = - [ (head questionnaire1.permissions) - { questionnaireUuid = resBody.uuid + [ (head project1.permissions) + { projectUuid = resBody.uuid } - :: QuestionnairePerm + :: ProjectPerm ] - assertExistenceOfQuestionnaireInDB + assertExistenceOfProjectInDB appContext - ( questionnaire1 + ( project1 { uuid = resBody.uuid , description = Nothing , isTemplate = False , projectTags = [] , permissions = aPermissions } - :: Questionnaire + :: Project ) eventsInDB @@ -139,4 +139,4 @@ test_400 appContext = createInvalidJsonTest reqMethod reqUrl "packageId" -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = - createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] (reqBodyT questionnaire1Create) "QTN_PERM" + createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] (reqBodyT project1Create) "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST_CloneUuid.hs b/wizard-server/test/Wizard/Specs/API/Project/List_POST_CloneUuid.hs similarity index 70% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST_CloneUuid.hs rename to wizard-server/test/Wizard/Specs/API/Project/List_POST_CloneUuid.hs index 66c14283c..324c82aa1 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST_CloneUuid.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/List_POST_CloneUuid.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.List_POST_CloneUuid ( +module Wizard.Specs.API.Project.List_POST_CloneUuid ( list_POST_cloneUuid, ) where @@ -14,27 +14,27 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Api.Resource.Project.ProjectCreateJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires?cloneUuid={qtnUuid} +-- POST /wizard-api/projects?cloneUuid={projectUuid} -- ------------------------------------------------------------------------ list_POST_cloneUuid :: AppContext -> SpecWith ((), Application) list_POST_cloneUuid appContext = - describe "POST /wizard-api/questionnaires/{qtnUuid}/clone" $ do + describe "POST /wizard-api/projects/{projectUuid}/clone" $ do test_201 appContext test_401 appContext test_403 appContext @@ -45,7 +45,7 @@ list_POST_cloneUuid appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/clone" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/clone" reqHeadersT authHeader = [authHeader] @@ -55,55 +55,50 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_201 appContext = do - create_test_201 "HTTP 200 OK (Owner, Private)" appContext questionnaire1Dto - create_test_201 "HTTP 200 OK (Owner, VisibleView)" appContext questionnaire2Dto - create_test_201 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext questionnaire3Dto + create_test_201 "HTTP 200 OK (Owner, Private)" appContext project1Dto + create_test_201 "HTTP 200 OK (Owner, VisibleView)" appContext project2Dto + create_test_201 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext project3Dto -create_test_201 title appContext qtn = +create_test_201 title appContext project = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT reqAuthHeader -- AND: Prepare expectation let expStatus = 201 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = qtn + let expDto = project let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireDTO) + let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, ProjectDTO) assertResStatus status expStatus assertResHeaders headers expHeaders - compareQuestionnaireCloneDtos resBody expDto + compareProjectCloneDtos resBody expDto -- AND: Find a result in DB - assertCountInDB findQuestionnaires appContext 4 + assertCountInDB findProjects appContext 4 -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod (reqUrlT questionnaire3.uuid) [] reqBody +test_401 appContext = createAuthTest reqMethod (reqUrlT project3.uuid) [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = - create_test_403 - "HTTP 403 FORBIDDEN (Non-Owner, Private)" - appContext - questionnaire1 - questionnaire1Edited - "View Questionnaire" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext project1 "View Project" -create_test_403 title appContext qtn qtnEdited reason = +create_test_403 title appContext project reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT reqNonAdminAuthHeader -- AND: Prepare expectation let expStatus = 403 @@ -113,7 +108,7 @@ create_test_403 title appContext qtn qtnEdited reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -127,8 +122,8 @@ create_test_403 title appContext qtn qtnEdited reason = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/clone" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/clone" (reqHeadersT reqAuthHeader) reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST_FromTemplate.hs b/wizard-server/test/Wizard/Specs/API/Project/List_POST_FromTemplate.hs similarity index 68% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST_FromTemplate.hs rename to wizard-server/test/Wizard/Specs/API/Project/List_POST_FromTemplate.hs index 0b0f1ce0a..6ab5decb5 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/List_POST_FromTemplate.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/List_POST_FromTemplate.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.List_POST_FromTemplate ( +module Wizard.Specs.API.Project.List_POST_FromTemplate ( list_POST_fromTemplate, ) where @@ -12,30 +12,30 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateFromTemplateDTO -import Wizard.Api.Resource.Questionnaire.QuestionnaireCreateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Api.Resource.Project.ProjectCreateFromTemplateDTO +import Wizard.Api.Resource.Project.ProjectCreateJM () +import Wizard.Api.Resource.Project.ProjectDTO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Config.TenantConfig hiding (request) import Wizard.Service.Tenant.Config.ConfigService import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires?fromTemplate=true +-- POST /wizard-api/projects?fromTemplate=true -- ------------------------------------------------------------------------ list_POST_fromTemplate :: AppContext -> SpecWith ((), Application) list_POST_fromTemplate appContext = - describe "POST /wizard-api/questionnaires/from-template" $ do + describe "POST /wizard-api/projects/from-template" $ do test_201 appContext test_400 appContext test_403 appContext @@ -45,17 +45,17 @@ list_POST_fromTemplate appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/questionnaires/from-template" +reqUrl = "/wizard-api/projects/from-template" reqHeadersT authHeader = authHeader ++ [reqCtHeader] -reqDtoT qtnTmlUuid name = - QuestionnaireCreateFromTemplateDTO +reqDtoT projectTemplateUuid name = + ProjectCreateFromTemplateDTO { name = name - , questionnaireUuid = qtnTmlUuid + , projectUuid = projectTemplateUuid } -reqBodyT qtnTmlUuid name = encode (reqDtoT qtnTmlUuid name) +reqBodyT projectTemplateUuid name = encode (reqDtoT projectTemplateUuid name) -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -65,48 +65,48 @@ test_201 appContext = -- GIVEN: Prepare request do let reqHeaders = reqHeadersT [reqAuthHeader] - let reqBody = reqBodyT questionnaire1.uuid questionnaire11.name + let reqBody = reqBodyT project1.uuid project11.name -- AND: Prepare expectation let expStatus = 201 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = questionnaire11Dto + let expDto = project11Dto let expBody = encode expDto -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireDTO) + let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, ProjectDTO) assertResStatus status expStatus assertResHeaders headers expHeaders - compareQuestionnaireCreateFromTemplateDtos resBody expDto + compareProjectCreateFromTemplateDtos resBody expDto -- AND: Find a result in DB - assertCountInDB findQuestionnaires appContext 4 + assertCountInDB findProjects appContext 4 -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_400 appContext = - it "HTTP 400 BAD REQUEST (questionnaireCreation: CustomQuestionnaireCreation)" $ + it "HTTP 400 BAD REQUEST (projectCreation: CustomProjectCreation)" $ -- GIVEN: Prepare request do let reqHeaders = reqHeadersT [reqAuthHeader] - let reqBody = reqBodyT questionnaire2.uuid questionnaire11.name + let reqBody = reqBodyT project2.uuid project11.name -- AND: Prepare expectation let expStatus = 400 let expHeaders = resCtHeader : resCorsHeaders - let expDto = UserError . _ERROR_SERVICE_COMMON__FEATURE_IS_DISABLED $ "Questionnaire Template" + let expDto = UserError . _ERROR_SERVICE_COMMON__FEATURE_IS_DISABLED $ "Project Template" let expBody = encode expDto -- AND: Change tenantConfig - (Right tcQuestionnaire) <- runInContextIO getCurrentTenantConfigQuestionnaire appContext - let tcQuestionnaireUpdated = tcQuestionnaire {questionnaireCreation = CustomQuestionnaireCreation} - runInContextIO (modifyTenantConfigQuestionnaire tcQuestionnaireUpdated) appContext + (Right tcProject) <- runInContextIO getCurrentTenantConfigProject appContext + let tcProjectUpdated = tcProject {projectCreation = CustomProjectCreation} + runInContextIO (modifyTenantConfigProject tcProjectUpdated) appContext -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -114,7 +114,7 @@ test_400 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find a result in DB - assertCountInDB findQuestionnaires appContext 3 + assertCountInDB findProjects appContext 3 -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -124,16 +124,16 @@ test_403 appContext = -- GIVEN: Prepare request do let reqHeaders = reqHeadersT [reqAuthHeader] - let reqBody = reqBodyT questionnaire2.uuid questionnaire11.name + let reqBody = reqBodyT project2.uuid project11.name -- AND: Prepare expectation let expStatus = 403 let expHeaders = resCtHeader : resCorsHeaders - let expDto = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Questionnaire Template" + let expDto = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "Project Template" let expBody = encode expDto -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -141,4 +141,4 @@ test_403 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find a result in DB - assertCountInDB findQuestionnaires appContext 3 + assertCountInDB findProjects appContext 3 diff --git a/wizard-server/test/Wizard/Specs/API/Project/Migration/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Project/Migration/APISpec.hs new file mode 100644 index 000000000..e738969cd --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/Project/Migration/APISpec.hs @@ -0,0 +1,17 @@ +module Wizard.Specs.API.Project.Migration.APISpec where + +import Test.Hspec + +import Wizard.Specs.API.Project.Migration.List_Current_Completion_POST +import Wizard.Specs.API.Project.Migration.List_Current_DELETE +import Wizard.Specs.API.Project.Migration.List_Current_GET +import Wizard.Specs.API.Project.Migration.List_Current_PUT +import Wizard.Specs.API.Project.Migration.List_POST + +projectMigrationAPI appContext = + describe "PROJECT MIGRATION API Spec" $ do + list_POST appContext + list_current_GET appContext + list_current_PUT appContext + list_current_DELETE appContext + list_current_completion_POST appContext diff --git a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/Common.hs b/wizard-server/test/Wizard/Specs/API/Project/Migration/Common.hs similarity index 50% rename from wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/Common.hs rename to wizard-server/test/Wizard/Specs/API/Project/Migration/Common.hs index 41445ff6c..8dad388b7 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/Common.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Migration/Common.hs @@ -1,14 +1,14 @@ -module Wizard.Specs.API.Migration.Questionnaire.Common where +module Wizard.Specs.API.Project.Migration.Common where import Data.Either (isRight) import Test.Hspec import Test.Hspec.Wai hiding (shouldRespondWith) import Shared.Common.Api.Resource.Error.ErrorJM () -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Model.Questionnaire.MigratorState +import Wizard.Database.DAO.Project.ProjectMigrationDAO +import Wizard.Model.Project.Migration.ProjectMigration -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.Common -- -------------------------------- @@ -16,22 +16,22 @@ import Wizard.Specs.Common -- -------------------------------- assertExistenceOfMigrationStateInDB appContext entity = do eEntitiesFromDb <- - runInContextIO (findMigratorStatesByOldQuestionnaireUuid entity.oldQuestionnaireUuid) appContext + runInContextIO (findProjectMigrationsByOldProjectUuid entity.oldProjectUuid) appContext liftIO $ isRight eEntitiesFromDb `shouldBe` True let (Right entitiesFromDb) = eEntitiesFromDb liftIO $ length entitiesFromDb `shouldBe` 1 let entityFromDb = head entitiesFromDb - compareQtnMigrators entityFromDb entity + compareProjectMigrators entityFromDb entity -- -------------------------------- -- COMPARATORS -- -------------------------------- -compareQtnMigrators resDto expDto = do - liftIO $ resDto.oldQuestionnaireUuid `shouldBe` expDto.oldQuestionnaireUuid - liftIO $ resDto.newQuestionnaireUuid `shouldBe` expDto.newQuestionnaireUuid +compareProjectMigrators resDto expDto = do + liftIO $ resDto.oldProjectUuid `shouldBe` expDto.oldProjectUuid + liftIO $ resDto.newProjectUuid `shouldBe` expDto.newProjectUuid liftIO $ resDto.resolvedQuestionUuids `shouldBe` expDto.resolvedQuestionUuids -compareQtnMigratorDtos resDto expDto = do - compareQuestionnaireCreateDtos'' resDto.oldQuestionnaire expDto.oldQuestionnaire - compareQuestionnaireCreateDtos'' resDto.newQuestionnaire expDto.newQuestionnaire +compareProjectMigratorDtos resDto expDto = do + compareProjectCreateDtos'' resDto.oldProject expDto.oldProject + compareProjectCreateDtos'' resDto.newProject expDto.newProject liftIO $ resDto.resolvedQuestionUuids `shouldBe` expDto.resolvedQuestionUuids diff --git a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_Completion_POST.hs b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_Completion_POST.hs similarity index 63% rename from wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_Completion_POST.hs rename to wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_Completion_POST.hs index f2072940e..63091c824 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_Completion_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_Completion_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.Questionnaire.List_Current_Completion_POST ( +module Wizard.Specs.API.Project.Migration.List_Current_Completion_POST ( list_current_completion_POST, ) where @@ -14,28 +14,28 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorMigration as QTN_MIG -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationMigration as PRJ_MIG import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Migration.ProjectMigration +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires/{qtnUuid}/migrations/current/completion +-- POST /wizard-api/projects/{projectUuid}/migrations/current/completion -- ------------------------------------------------------------------------ list_current_completion_POST :: AppContext -> SpecWith ((), Application) list_current_completion_POST appContext = - describe "POST /wizard-api/questionnaires/{qtnUuid}/migrations/current/completion" $ do + describe "POST /wizard-api/projects/{projectUuid}/migrations/current/completion" $ do test_204 appContext test_401 appContext test_403 appContext @@ -46,7 +46,7 @@ list_current_completion_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/migrations/current/completion" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/migrations/current/completion" reqHeadersT authHeader = [authHeader] @@ -59,7 +59,7 @@ test_204 appContext = it "HTTP 204 NO CONTENT" $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ questionnaire4Upgraded.uuid + let reqUrl = reqUrlT $ project4Upgraded.uuid let reqHeaders = reqHeadersT reqAuthHeader -- AND: Prepare expectation let expStatus = 204 @@ -67,11 +67,11 @@ test_204 appContext = let expHeaders = resCorsHeaders -- AND: Prepare database runInContextIO TML.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire4) appContext - runInContextIO (insertQuestionnaire questionnaire4Upgraded) appContext - runInContextIO (insertQuestionnaire differentQuestionnaire) appContext - runInContextIO QTN_MIG.runMigration appContext - runInContextIO (insertMigratorState nlQtnMigrationState) appContext + runInContextIO (insertProject project4) appContext + runInContextIO (insertProject project4Upgraded) appContext + runInContextIO (insertProject differentProject) appContext + runInContextIO PRJ_MIG.runMigration appContext + runInContextIO (insertProjectMigration projectMigration) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -79,27 +79,27 @@ test_204 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findQuestionnaires appContext 1 - assertCountInDB findMigratorStates appContext 0 + assertCountInDB findProjects appContext 1 + assertCountInDB findProjectMigrations appContext 0 -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod (reqUrlT questionnaire3.uuid) [] reqBody +test_401 appContext = createAuthTest reqMethod (reqUrlT project3.uuid) [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = do - createNoPermissionTest appContext reqMethod (reqUrlT questionnaire3.uuid) [] "" "QTN_PERM" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext questionnaire1 "View Questionnaire" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext questionnaire2 "Migrate Questionnaire" + createNoPermissionTest appContext reqMethod (reqUrlT project3.uuid) [] "" "PRJ_PERM" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext project1 "View Project" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext project2 "Migrate Project" -create_test_403 title appContext qtn reason = +create_test_403 title appContext project reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT reqNonAdminAuthHeader -- AND: Prepare expectation let expStatus = 403 @@ -109,9 +109,9 @@ create_test_403 title appContext qtn reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - let ms = nlQtnMigrationState {oldQuestionnaireUuid = qtn.uuid, newQuestionnaireUuid = qtn.uuid} - runInContextIO (insertMigratorState ms) appContext + runInContextIO PRJ.runMigration appContext + let ms = projectMigration {oldProjectUuid = project.uuid, newProjectUuid = project.uuid} + runInContextIO (insertProjectMigration ms) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -119,8 +119,8 @@ create_test_403 title appContext qtn reason = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findQuestionnaires appContext 3 - assertCountInDB findMigratorStates appContext 1 + assertCountInDB findProjects appContext 3 + assertCountInDB findProjectMigrations appContext 1 -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -128,8 +128,8 @@ create_test_403 title appContext qtn reason = test_404 appContext = createNotFoundTest' reqMethod - (reqUrlT questionnaire4.uuid) + (reqUrlT project4.uuid) (reqHeadersT reqAuthHeader) reqBody - "questionnaire_migration" - [("new_questionnaire_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] + "project_migration" + [("new_project_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] diff --git a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_DELETE.hs b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_DELETE.hs similarity index 63% rename from wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_DELETE.hs rename to wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_DELETE.hs index a501eaa9b..f83728978 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.Questionnaire.List_Current_DELETE ( +module Wizard.Specs.API.Project.Migration.List_Current_DELETE ( list_current_DELETE, ) where @@ -14,28 +14,28 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorMigration as QTN_MIG -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationMigration as PRJ_MIG import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Migration.ProjectMigration +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- DELETE /wizard-api/questionnaires/{qtnUuid}/migrations/current +-- DELETE /wizard-api/projects/{projectUuid}/migrations/current -- ------------------------------------------------------------------------ list_current_DELETE :: AppContext -> SpecWith ((), Application) list_current_DELETE appContext = - describe "DELETE /wizard-api/questionnaires/{qtnUuid}/migrations/current" $ do + describe "DELETE /wizard-api/projects/{projectUuid}/migrations/current" $ do test_204 appContext test_401 appContext test_403 appContext @@ -46,7 +46,7 @@ list_current_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/migrations/current" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/migrations/current" reqHeadersT authHeader = [authHeader] @@ -59,7 +59,7 @@ test_204 appContext = it "HTTP 204 NO CONTENT" $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ questionnaire4Upgraded.uuid + let reqUrl = reqUrlT $ project4Upgraded.uuid let reqHeaders = reqHeadersT reqAuthHeader -- AND: Prepare expectation let expStatus = 204 @@ -67,11 +67,11 @@ test_204 appContext = let expHeaders = resCorsHeaders -- AND: Prepare database runInContextIO TML.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire4) appContext - runInContextIO (insertQuestionnaire questionnaire4Upgraded) appContext - runInContextIO (insertQuestionnaire differentQuestionnaire) appContext - runInContextIO QTN_MIG.runMigration appContext - runInContextIO (insertMigratorState nlQtnMigrationState) appContext + runInContextIO (insertProject project4) appContext + runInContextIO (insertProject project4Upgraded) appContext + runInContextIO (insertProject differentProject) appContext + runInContextIO PRJ_MIG.runMigration appContext + runInContextIO (insertProjectMigration projectMigration) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -79,27 +79,27 @@ test_204 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findQuestionnaires appContext 1 - assertCountInDB findMigratorStates appContext 0 + assertCountInDB findProjects appContext 1 + assertCountInDB findProjectMigrations appContext 0 -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod (reqUrlT questionnaire3.uuid) [] reqBody +test_401 appContext = createAuthTest reqMethod (reqUrlT project3.uuid) [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = do - createNoPermissionTest appContext reqMethod (reqUrlT questionnaire3.uuid) [] "" "QTN_PERM" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext questionnaire1 "View Questionnaire" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext questionnaire2 "Migrate Questionnaire" + createNoPermissionTest appContext reqMethod (reqUrlT project3.uuid) [] "" "PRJ_PERM" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext project1 "View Project" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext project2 "Migrate Project" -create_test_403 title appContext qtn reason = +create_test_403 title appContext project reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT reqNonAdminAuthHeader -- AND: Prepare expectation let expStatus = 403 @@ -109,9 +109,9 @@ create_test_403 title appContext qtn reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - let ms = nlQtnMigrationState {oldQuestionnaireUuid = qtn.uuid, newQuestionnaireUuid = qtn.uuid} - runInContextIO (insertMigratorState ms) appContext + runInContextIO PRJ.runMigration appContext + let ms = projectMigration {oldProjectUuid = project.uuid, newProjectUuid = project.uuid} + runInContextIO (insertProjectMigration ms) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -119,8 +119,8 @@ create_test_403 title appContext qtn reason = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findQuestionnaires appContext 3 - assertCountInDB findMigratorStates appContext 1 + assertCountInDB findProjects appContext 3 + assertCountInDB findProjectMigrations appContext 1 -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -128,8 +128,8 @@ create_test_403 title appContext qtn reason = test_404 appContext = createNotFoundTest' reqMethod - (reqUrlT questionnaire4.uuid) + (reqUrlT project4.uuid) (reqHeadersT reqAuthHeader) reqBody - "questionnaire_migration" - [("new_questionnaire_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] + "project_migration" + [("new_project_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] diff --git a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_GET.hs similarity index 57% rename from wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_GET.hs index 1ee128755..b951f9499 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.Questionnaire.List_Current_GET ( +module Wizard.Specs.API.Project.Migration.List_Current_GET ( list_current_GET, ) where @@ -13,29 +13,29 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorMigration as QTN_MIG -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationMigration as PRJ_MIG import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Migration.ProjectMigration +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/migrations/current +-- GET /wizard-api/projects/{projectUuid}/migrations/current -- ------------------------------------------------------------------------ list_current_GET :: AppContext -> SpecWith ((), Application) list_current_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/migrations/current" $ do + describe "GET /wizard-api/projects/{projectUuid}/migrations/current" $ do test_200 appContext test_401 appContext test_403 appContext @@ -46,7 +46,7 @@ list_current_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/migrations/current" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/migrations/current" reqHeadersT authHeader = [authHeader, reqCtHeader] @@ -59,39 +59,39 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire4 - questionnaire4Events - questionnaire4Upgraded - questionnaire4UpgradedEvents - nlQtnMigrationState - nlQtnMigrationStateDto + project4 + project4Events + project4Upgraded + project4UpgradedEvents + projectMigration + projectMigrationDto reqNonAdminAuthHeader create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext - questionnaire4VisibleView - questionnaire4VisibleViewEvents - questionnaire4VisibleViewUpgraded - questionnaire4VisibleViewUpgradedEvents - nlQtnMigrationState - nlQtnMigrationStateVisibleViewDto + project4VisibleView + project4VisibleViewEvents + project4VisibleViewUpgraded + project4VisibleViewUpgradedEvents + projectMigration + projectMigrationVisibleViewDto reqNonAdminAuthHeader create_test_200 "HTTP 200 OK (Non-Owner, Public)" appContext - questionnaire4VisibleEdit - questionnaire4VisibleEditEvents - questionnaire4VisibleEditUpgraded - questionnaire4VisibleEditUpgradedEvents - nlQtnMigrationState - nlQtnMigrationStateVisibleEditDto + project4VisibleEdit + project4VisibleEditEvents + project4VisibleEditUpgraded + project4VisibleEditUpgradedEvents + projectMigration + projectMigrationVisibleEditDto reqNonAdminAuthHeader -create_test_200 title appContext oldQtn oldQtnEvents newQtn newQtnEvents state stateDto authHeader = +create_test_200 title appContext oldProject oldProjectEvents newProject newProjectEvents state stateDto authHeader = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ questionnaire4Upgraded.uuid + let reqUrl = reqUrlT $ project4Upgraded.uuid let reqHeaders = reqHeadersT reqAuthHeader -- AND: Prepare expectation let expStatus = 200 @@ -100,14 +100,14 @@ create_test_200 title appContext oldQtn oldQtnEvents newQtn newQtnEvents state s let expHeaders = resCtHeader : resCorsHeaders -- AND: Prepare database runInContextIO TML.runMigration appContext - runInContextIO (insertQuestionnaire oldQtn) appContext - runInContextIO (insertQuestionnaireEvents oldQtnEvents) appContext - runInContextIO (insertQuestionnaire newQtn) appContext - runInContextIO (insertQuestionnaireEvents newQtnEvents) appContext - runInContextIO (insertQuestionnaire differentQuestionnaire) appContext - runInContextIO (insertQuestionnaireEvents differentQuestionnaireEvents) appContext - runInContextIO QTN_MIG.runMigration appContext - runInContextIO (insertMigratorState state) appContext + runInContextIO (insertProject oldProject) appContext + runInContextIO (insertProjectEvents oldProjectEvents) appContext + runInContextIO (insertProject newProject) appContext + runInContextIO (insertProjectEvents newProjectEvents) appContext + runInContextIO (insertProject differentProject) appContext + runInContextIO (insertProjectEvents differentProjectEvents) appContext + runInContextIO PRJ_MIG.runMigration appContext + runInContextIO (insertProjectMigration state) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -118,21 +118,21 @@ create_test_200 title appContext oldQtn oldQtnEvents newQtn newQtnEvents state s -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod (reqUrlT questionnaire4.uuid) [] reqBody +test_401 appContext = createAuthTest reqMethod (reqUrlT project4.uuid) [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = do - createNoPermissionTest appContext reqMethod (reqUrlT questionnaire3.uuid) [] "" "QTN_PERM" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext questionnaire1 "View Questionnaire" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext questionnaire2 "Migrate Questionnaire" + createNoPermissionTest appContext reqMethod (reqUrlT project3.uuid) [] "" "PRJ_PERM" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext project1 "View Project" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext project2 "Migrate Project" -create_test_403 title appContext qtn reason = +create_test_403 title appContext project reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT reqNonAdminAuthHeader -- AND: Prepare expectation let expStatus = 403 @@ -142,9 +142,9 @@ create_test_403 title appContext qtn reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - let ms = nlQtnMigrationState {oldQuestionnaireUuid = qtn.uuid, newQuestionnaireUuid = qtn.uuid} - runInContextIO (insertMigratorState ms) appContext + runInContextIO PRJ.runMigration appContext + let ms = projectMigration {oldProjectUuid = project.uuid, newProjectUuid = project.uuid} + runInContextIO (insertProjectMigration ms) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -158,8 +158,8 @@ create_test_403 title appContext qtn reason = test_404 appContext = createNotFoundTest' reqMethod - (reqUrlT questionnaire4.uuid) + (reqUrlT project4.uuid) (reqHeadersT reqAuthHeader) reqBody - "questionnaire_migration" - [("new_questionnaire_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] + "project_migration" + [("new_project_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] diff --git a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_PUT.hs b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_PUT.hs similarity index 61% rename from wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_PUT.hs rename to wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_PUT.hs index 452e74738..fa53318b7 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_Current_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_Current_PUT.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.Questionnaire.List_Current_PUT ( +module Wizard.Specs.API.Project.Migration.List_Current_PUT ( list_current_PUT, ) where @@ -13,29 +13,29 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorMigration as QTN_MIG -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationMigration as PRJ_MIG import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Migration.ProjectMigration +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- PUT /wizard-api/questionnaires/{qtnUuid}/migrations/current +-- PUT /wizard-api/projects/{projectUuid}/migrations/current -- ------------------------------------------------------------------------ list_current_PUT :: AppContext -> SpecWith ((), Application) list_current_PUT appContext = - describe "PUT /wizard-api/questionnaires/{qtnUuid}/migrations/current" $ do + describe "PUT /wizard-api/projects/{projectUuid}/migrations/current" $ do test_204 appContext test_400 appContext test_401 appContext @@ -47,11 +47,11 @@ list_current_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/migrations/current" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/migrations/current" reqHeadersT authHeader = [authHeader, reqCtHeader] -reqDto = migratorStateChange +reqDto = projectMigrationChangeDto reqBody = encode reqDto @@ -62,23 +62,23 @@ test_204 appContext = it "HTTP 204 NO CONTENT" $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ questionnaire4Upgraded.uuid + let reqUrl = reqUrlT $ project4Upgraded.uuid let reqHeaders = reqHeadersT reqAuthHeader -- AND: Prepare expectation let expStatus = 200 - let expDto = nlQtnMigrationStateDtoEdited + let expDto = projectMigrationDtoEdited let expBody = encode expDto let expHeaders = resCtHeader : resCorsHeaders -- AND: Prepare database runInContextIO TML.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire4) appContext - runInContextIO (insertQuestionnaireEvents questionnaire4Events) appContext - runInContextIO (insertQuestionnaire questionnaire4Upgraded) appContext - runInContextIO (insertQuestionnaireEvents questionnaire4UpgradedEvents) appContext - runInContextIO (insertQuestionnaire differentQuestionnaire) appContext - runInContextIO (insertQuestionnaireEvents differentQuestionnaireEvents) appContext - runInContextIO QTN_MIG.runMigration appContext - runInContextIO (insertMigratorState nlQtnMigrationState) appContext + runInContextIO (insertProject project4) appContext + runInContextIO (insertProjectEvents project4Events) appContext + runInContextIO (insertProject project4Upgraded) appContext + runInContextIO (insertProjectEvents project4UpgradedEvents) appContext + runInContextIO (insertProject differentProject) appContext + runInContextIO (insertProjectEvents differentProjectEvents) appContext + runInContextIO PRJ_MIG.runMigration appContext + runInContextIO (insertProjectMigration projectMigration) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -89,26 +89,26 @@ test_204 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT questionnaire4.uuid) "resolvedQuestionUuids" +test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT project4.uuid) "resolvedQuestionUuids" -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod (reqUrlT questionnaire4.uuid) [reqCtHeader] reqBody +test_401 appContext = createAuthTest reqMethod (reqUrlT project4.uuid) [reqCtHeader] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = do - createNoPermissionTest appContext reqMethod (reqUrlT questionnaire3.uuid) [reqCtHeader] reqBody "QTN_PERM" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext questionnaire1 "View Questionnaire" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext questionnaire2 "Migrate Questionnaire" + createNoPermissionTest appContext reqMethod (reqUrlT project3.uuid) [reqCtHeader] reqBody "PRJ_PERM" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext project1 "View Project" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext project2 "Migrate Project" -create_test_403 title appContext qtn reason = +create_test_403 title appContext project reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT reqNonAdminAuthHeader -- AND: Prepare expectation let expStatus = 403 @@ -118,9 +118,9 @@ create_test_403 title appContext qtn reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - let ms = nlQtnMigrationState {oldQuestionnaireUuid = qtn.uuid, newQuestionnaireUuid = qtn.uuid} - runInContextIO (insertMigratorState ms) appContext + runInContextIO PRJ.runMigration appContext + let ms = projectMigration {oldProjectUuid = project.uuid, newProjectUuid = project.uuid} + runInContextIO (insertProjectMigration ms) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -134,8 +134,8 @@ create_test_403 title appContext qtn reason = test_404 appContext = createNotFoundTest' reqMethod - (reqUrlT questionnaire4.uuid) + (reqUrlT project4.uuid) (reqHeadersT reqAuthHeader) reqBody - "questionnaire_migration" - [("new_questionnaire_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] + "project_migration" + [("new_project_uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] diff --git a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_POST.hs b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_POST.hs similarity index 57% rename from wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_POST.hs rename to wizard-server/test/Wizard/Specs/API/Project/Migration/List_POST.hs index 1659cc406..15d38ed0e 100644 --- a/wizard-server/test/Wizard/Specs/API/Migration/Questionnaire/List_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Migration/List_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Migration.Questionnaire.List_POST ( +module Wizard.Specs.API.Project.Migration.List_POST ( list_POST, ) where @@ -13,33 +13,33 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateDTO -import Wizard.Api.Resource.Questionnaire.Migration.MigratorStateJM () -import Wizard.Api.Resource.Questionnaire.QuestionnaireDetailQuestionnaireDTO -import Wizard.Database.DAO.Questionnaire.MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO +import Wizard.Api.Resource.Project.Detail.ProjectDetailQuestionnaireDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationDTO +import Wizard.Api.Resource.Project.Migration.ProjectMigrationJM () +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.MigratorStates -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorMigration as QTN_MIG -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectMigrations +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationMigration as PRJ_MIG import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.MigratorState -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Migration.ProjectMigration +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Migration.Questionnaire.Common +import Wizard.Specs.API.Project.Migration.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires/{qtnUuid}/migrations +-- POST /wizard-api/projects/{projectUuid}/migrations -- ------------------------------------------------------------------------ list_POST :: AppContext -> SpecWith ((), Application) list_POST appContext = - describe "POST /wizard-api/questionnaires/{qtnUuid}/migrations" $ do + describe "POST /wizard-api/projects/{projectUuid}/migrations" $ do test_201 appContext test_400 appContext test_401 appContext @@ -51,11 +51,11 @@ list_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/migrations" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/migrations" reqHeadersT authHeader = [authHeader, reqCtHeader] -reqDto = migratorStateCreate +reqDto = projectMigrationCreateDto reqBody = encode reqDto @@ -66,64 +66,64 @@ test_201 appContext = do create_test_201 "HTTP 201 CREATED (Owner, Private)" appContext - questionnaire4 - questionnaire4Events - questionnaire4Upgraded - questionnaire4UpgradedEvents - nlQtnMigrationState - nlQtnMigrationStateDto + project4 + project4Events + project4Upgraded + project4UpgradedEvents + projectMigration + projectMigrationDto reqNonAdminAuthHeader create_test_201 "HTTP 201 CREATED (Non-Owner, VisibleView)" appContext - questionnaire4VisibleView - questionnaire4VisibleViewEvents - questionnaire4VisibleViewUpgraded - questionnaire4VisibleViewUpgradedEvents - nlQtnMigrationState - nlQtnMigrationStateVisibleViewDto + project4VisibleView + project4VisibleViewEvents + project4VisibleViewUpgraded + project4VisibleViewUpgradedEvents + projectMigration + projectMigrationVisibleViewDto reqNonAdminAuthHeader create_test_201 "HTTP 201 CREATED (Non-Owner, Public)" appContext - questionnaire4VisibleEdit - questionnaire4VisibleEditEvents - questionnaire4VisibleEditUpgraded - questionnaire4VisibleEditUpgradedEvents - nlQtnMigrationState - nlQtnMigrationStateVisibleEditDto + project4VisibleEdit + project4VisibleEditEvents + project4VisibleEditUpgraded + project4VisibleEditUpgradedEvents + projectMigration + projectMigrationVisibleEditDto reqNonAdminAuthHeader -create_test_201 title appContext oldQtn oldQtnEvents newQtn newQtnEvents state stateDto authHeader = +create_test_201 title appContext oldProject oldProjectEvents newProject newProjectEvents state stateDto authHeader = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ oldQtn.uuid + let reqUrl = reqUrlT $ oldProject.uuid let reqHeaders = reqHeadersT reqAuthHeader -- AND: Prepare expectation let expStatus = 201 let expHeaders = resCorsHeadersPlain - let expDto = stateDto {resolvedQuestionUuids = []} :: MigratorStateDTO + let expDto = stateDto {resolvedQuestionUuids = []} :: ProjectMigrationDTO let expBody = encode expDto -- AND: Prepare database runInContextIO TML.runMigration appContext - runInContextIO (insertQuestionnaire oldQtn) appContext - runInContextIO (insertQuestionnaireEvents oldQtnEvents) appContext - runInContextIO (insertQuestionnaire newQtn) appContext - runInContextIO (insertQuestionnaireEvents newQtnEvents) appContext - runInContextIO (insertQuestionnaire differentQuestionnaire) appContext - runInContextIO (insertQuestionnaireEvents differentQuestionnaireEvents) appContext - runInContextIO QTN_MIG.runMigration appContext + runInContextIO (insertProject oldProject) appContext + runInContextIO (insertProjectEvents oldProjectEvents) appContext + runInContextIO (insertProject newProject) appContext + runInContextIO (insertProjectEvents newProjectEvents) appContext + runInContextIO (insertProject differentProject) appContext + runInContextIO (insertProjectEvents differentProjectEvents) appContext + runInContextIO PRJ_MIG.runMigration appContext response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, MigratorStateDTO) + let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, ProjectMigrationDTO) assertResStatus status expStatus assertResHeaders headers expHeaders - compareQtnMigratorDtos resBody expDto + compareProjectMigratorDtos resBody expDto -- AND: Find a result in DB let entityInDB = state - { newQuestionnaireUuid = resBody.newQuestionnaire.uuid + { newProjectUuid = resBody.newProject.uuid , resolvedQuestionUuids = [] } assertExistenceOfMigrationStateInDB appContext entityInDB @@ -131,26 +131,26 @@ create_test_201 title appContext oldQtn oldQtnEvents newQtn newQtnEvents state s -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT questionnaire4.uuid) "targetKnowledgeModelPackageId" +test_400 appContext = createInvalidJsonTest reqMethod (reqUrlT project4.uuid) "targetKnowledgeModelPackageId" -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_401 appContext = createAuthTest reqMethod (reqUrlT questionnaire4.uuid) [reqCtHeader] reqBody +test_401 appContext = createAuthTest reqMethod (reqUrlT project4.uuid) [reqCtHeader] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = do - createNoPermissionTest appContext reqMethod (reqUrlT questionnaire3.uuid) [reqCtHeader] reqBody "QTN_PERM" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext questionnaire1 "Migrate Questionnaire" - create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext questionnaire2 "Migrate Questionnaire" + createNoPermissionTest appContext reqMethod (reqUrlT project3.uuid) [reqCtHeader] reqBody "PRJ_PERM" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext project1 "Migrate Project" + create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext project2 "Migrate Project" -create_test_403 title appContext qtn reason = +create_test_403 title appContext project reason = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT $ qtn.uuid + let reqUrl = reqUrlT $ project.uuid let reqHeaders = reqHeadersT reqNonAdminAuthHeader -- AND: Prepare expectation let expStatus = 403 @@ -160,7 +160,7 @@ create_test_403 title appContext qtn reason = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -168,7 +168,7 @@ create_test_403 title appContext qtn reason = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find result in DB and compare with expectation state - assertCountInDB findMigratorStates appContext 0 + assertCountInDB findProjectMigrations appContext 0 -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -176,8 +176,8 @@ create_test_403 title appContext qtn reason = test_404 appContext = createNotFoundTest' reqMethod - (reqUrlT questionnaire4.uuid) + (reqUrlT project4.uuid) (reqHeadersT reqAuthHeader) reqBody - "questionnaire" + "project" [("uuid", "57250a07-a663-4ff3-ac1f-16530f2c1bfe")] diff --git a/wizard-server/test/Wizard/Specs/API/Project/ProjectTag/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Project/ProjectTag/APISpec.hs new file mode 100644 index 000000000..d3156299e --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/Project/ProjectTag/APISpec.hs @@ -0,0 +1,9 @@ +module Wizard.Specs.API.Project.ProjectTag.APISpec where + +import Test.Hspec + +import Wizard.Specs.API.Project.ProjectTag.List_Suggestions_GET + +projectTagAPI appContext = + describe "PROJECT TAG API Spec" $ + do list_suggestions_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/ProjectTag/List_Suggestions_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/ProjectTag/List_Suggestions_GET.hs similarity index 64% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/ProjectTag/List_Suggestions_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/ProjectTag/List_Suggestions_GET.hs index 4640d9af5..068aef087 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/ProjectTag/List_Suggestions_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/ProjectTag/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.ProjectTag.List_Suggestions_GET ( +module Wizard.Specs.API.Project.ProjectTag.List_Suggestions_GET ( list_suggestions_GET, ) where @@ -12,8 +12,8 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.PageMetadata import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import Wizard.Database.Migration.Development.Tenant.Data.TenantConfigs import Wizard.Model.Context.AppContext @@ -22,11 +22,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/project-tags/suggestions +-- GET /wizard-api/projects/project-tags/suggestions -- ------------------------------------------------------------------------ list_suggestions_GET :: AppContext -> SpecWith ((), Application) list_suggestions_GET appContext = - describe "GET /wizard-api/questionnaires/project-tags/suggestions" $ do + describe "GET /wizard-api/projects/project-tags/suggestions" $ do test_200 appContext test_401 appContext @@ -35,7 +35,7 @@ list_suggestions_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaires/project-tags/suggestions" +reqUrl = "/wizard-api/projects/project-tags/suggestions" reqHeaders = [reqAuthHeader] @@ -48,36 +48,36 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (All)" appContext - "/wizard-api/questionnaires/project-tags/suggestions?sort=projectTag,asc" + "/wizard-api/projects/project-tags/suggestions?sort=projectTag,asc" ( Page "projectTags" (PageMetadata 20 4 1 0) - [_QUESTIONNAIRE_PROJECT_TAG_1, _QUESTIONNAIRE_PROJECT_TAG_2, _SETTINGS_PROJECT_TAG_1, _SETTINGS_PROJECT_TAG_2] + [_PROJECT_TAG_1, _PROJECT_TAG_2, _SETTINGS__PROJECT_TAG_1, _SETTINGS__PROJECT_TAG_2] ) create_test_200 "HTTP 200 OK (pagination)" appContext - "/wizard-api/questionnaires/project-tags/suggestions?sort=projectTag,asc&page=1&size=1" - (Page "projectTags" (PageMetadata 1 4 4 1) [_QUESTIONNAIRE_PROJECT_TAG_2]) + "/wizard-api/projects/project-tags/suggestions?sort=projectTag,asc&page=1&size=1" + (Page "projectTags" (PageMetadata 1 4 4 1) [_PROJECT_TAG_2]) create_test_200 "HTTP 200 OK (query)" appContext - "/wizard-api/questionnaires/project-tags/suggestions?sort=projectTag,asc&q=settingsProject" - (Page "projectTags" (PageMetadata 20 2 1 0) [_SETTINGS_PROJECT_TAG_1, _SETTINGS_PROJECT_TAG_2]) + "/wizard-api/projects/project-tags/suggestions?sort=projectTag,asc&q=settingsProject" + (Page "projectTags" (PageMetadata 20 2 1 0) [_SETTINGS__PROJECT_TAG_1, _SETTINGS__PROJECT_TAG_2]) create_test_200 "HTTP 200 OK (exclude)" appContext - "/wizard-api/questionnaires/project-tags/suggestions?sort=projectTag,asc&exclude=settingsProjectTag2" + "/wizard-api/projects/project-tags/suggestions?sort=projectTag,asc&exclude=settingsProjectTag2" ( Page "projectTags" (PageMetadata 20 3 1 0) - [_QUESTIONNAIRE_PROJECT_TAG_1, _QUESTIONNAIRE_PROJECT_TAG_2, _SETTINGS_PROJECT_TAG_1] + [_PROJECT_TAG_1, _PROJECT_TAG_2, _SETTINGS__PROJECT_TAG_1] ) create_test_200 "HTTP 200 OK (query, exclude)" appContext - "/wizard-api/questionnaires/project-tags/suggestions?sort=projectTag,asc&q=settings&exclude=settingsProjectTag2" - (Page "projectTags" (PageMetadata 20 1 1 0) [_SETTINGS_PROJECT_TAG_1]) + "/wizard-api/projects/project-tags/suggestions?sort=projectTag,asc&q=settings&exclude=settingsProjectTag2" + (Page "projectTags" (PageMetadata 20 1 1 0) [_SETTINGS__PROJECT_TAG_1]) create_test_200 title appContext reqUrl expDto = it title $ @@ -88,7 +88,7 @@ create_test_200 title appContext reqUrl expDto = let expBody = encode expDto -- AND: Run migrations runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- AND: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/Project/User/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Project/User/APISpec.hs new file mode 100644 index 000000000..4867ed3c3 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/Project/User/APISpec.hs @@ -0,0 +1,9 @@ +module Wizard.Specs.API.Project.User.APISpec where + +import Test.Hspec + +import Wizard.Specs.API.Project.User.List_Suggestions_GET + +projectUserAPI appContext = + describe "PROJECT USER API Spec" $ + list_suggestions_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/User/List_Suggestions_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/User/List_Suggestions_GET.hs similarity index 81% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/User/List_Suggestions_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/User/List_Suggestions_GET.hs index c9c8546ed..c9c8e5c0f 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/User/List_Suggestions_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/User/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.User.List_Suggestions_GET ( +module Wizard.Specs.API.Project.User.List_Suggestions_GET ( list_suggestions_GET, ) where @@ -20,13 +20,13 @@ import Shared.Common.Model.Error.Error import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Service.User.UserMapper import WizardLib.Public.Localization.Messages.Public @@ -35,11 +35,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/users/suggestions +-- GET /wizard-api/projects/{projectUuid}/users/suggestions -- ------------------------------------------------------------------------ list_suggestions_GET :: AppContext -> SpecWith ((), Application) list_suggestions_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/users/suggestions" $ do + describe "GET /wizard-api/projects/{projectUuid}/users/suggestions" $ do test_200 appContext test_403 appContext test_404 appContext @@ -49,7 +49,7 @@ list_suggestions_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid query = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/users/suggestions?sort=uuid,asc" ++ query +reqUrlT projectUuid query = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/users/suggestions?sort=uuid,asc" ++ query reqHeadersT authHeader = authHeader @@ -62,52 +62,52 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 + project1 [reqAuthHeader] (Page "users" (PageMetadata 20 1 1 0) (fmap (toSuggestion . toSimple) [userAlbert])) create_test_200 "HTTP 200 OK (Commenter)" appContext - (questionnaire13 {visibility = PrivateQuestionnaire}) + (project13 {visibility = PrivateProjectVisibility}) [reqNonAdminAuthHeader] (Page "users" (PageMetadata 20 1 1 0) (fmap (toSuggestion . toSimple) [userNikola])) create_test_200 "HTTP 200 OK (Non-Commenter, VisibleComment)" appContext - questionnaire13 + project13 [reqIsaacAuthTokenHeader] (Page "users" (PageMetadata 20 3 1 0) (fmap (toSuggestion . toSimple) [userNikola, userIsaac, userAlbert])) create_test_200 "HTTP 200 OK (Anonymous, VisibleComment, AnyoneWithLinkComment)" appContext - (questionnaire13 {sharing = AnyoneWithLinkCommentQuestionnaire}) + (project13 {sharing = AnyoneWithLinkCommentProjectSharing}) [] (Page "users" (PageMetadata 20 3 1 0) (fmap (toSuggestion . toSimple) [userNikola, userIsaac, userAlbert])) create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext - questionnaire3 + project3 [reqNonAdminAuthHeader] (Page "users" (PageMetadata 20 3 1 0) (fmap (toSuggestion . toSimple) [userNikola, userIsaac, userAlbert])) create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext - questionnaire10 + project10 [] (Page "users" (PageMetadata 20 3 1 0) (fmap (toSuggestion . toSimple) [userNikola, userIsaac, userAlbert])) -create_test_200 title appContext qtn authHeader expDto = +create_test_200 title appContext project authHeader expDto = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid "" + let reqUrl = reqUrlT project.uuid "" let reqHeaders = reqHeadersT authHeader -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO (insertProject project) appContext -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders @@ -126,39 +126,39 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Comment Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Comment Project") create_test_403 "HTTP 200 OK (Non-Owner, VisibleView)" appContext - questionnaire2 + project2 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Comment Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Comment Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 + project7 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid "" + let reqUrl = reqUrlT project.uuid "" let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -170,7 +170,7 @@ create_test_403 title appContext qtn authHeader errorMessage = runInContextIO TML.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO (insertProject project) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -184,8 +184,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/users/suggestions" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/users/suggestions" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Project/Version/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Project/Version/APISpec.hs new file mode 100644 index 000000000..7a19ed88e --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/Project/Version/APISpec.hs @@ -0,0 +1,15 @@ +module Wizard.Specs.API.Project.Version.APISpec where + +import Test.Hspec + +import Wizard.Specs.API.Project.Version.Detail_DELETE +import Wizard.Specs.API.Project.Version.Detail_PUT +import Wizard.Specs.API.Project.Version.List_GET +import Wizard.Specs.API.Project.Version.List_POST + +projectVersionAPI appContext = + describe "PROJECT VERSION API Spec" $ do + list_GET appContext + list_POST appContext + detail_PUT appContext + detail_DELETE appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Common.hs b/wizard-server/test/Wizard/Specs/API/Project/Version/Common.hs similarity index 52% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Common.hs rename to wizard-server/test/Wizard/Specs/API/Project/Version/Common.hs index 79b3032ca..78aad764e 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Common.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Version/Common.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Version.Common where +module Wizard.Specs.API.Project.Version.Common where import Data.Either (isLeft, isRight) import qualified Data.UUID as U @@ -7,9 +7,9 @@ import Test.Hspec.Wai hiding (shouldRespondWith) import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import Wizard.Database.Migration.Development.Tenant.Data.Tenants -import Wizard.Model.Questionnaire.QuestionnaireVersion +import Wizard.Model.Project.Version.ProjectVersion import Wizard.Model.Tenant.Tenant import Wizard.Specs.Common @@ -17,24 +17,24 @@ import Wizard.Specs.Common -- -------------------------------- -- ASSERTS -- -------------------------------- -assertExistenceOfQuestionnaireVersionInDB appContext version = do - eVersion <- runInContextIO (findQuestionnaireVersionByUuid version.uuid) appContext +assertExistenceOfProjectVersionInDB appContext version = do + eVersion <- runInContextIO (findProjectVersionByUuid version.uuid) appContext liftIO $ isRight eVersion `shouldBe` True let (Right versionFromDb) = eVersion - compareQuestionnaireVersionCreateDtos versionFromDb version + compareProjectVersionCreateDtos versionFromDb version -assertAbsenceOfQuestionnaireVersionInDB appContext version = do - eVersion <- runInContextIO (findQuestionnaireVersionByUuid version.uuid) appContext +assertAbsenceOfProjectVersionInDB appContext version = do + eVersion <- runInContextIO (findProjectVersionByUuid version.uuid) appContext liftIO $ isLeft eVersion `shouldBe` True let (Left error) = eVersion liftIO $ error `shouldBe` NotExistsError - (_ERROR_DATABASE__ENTITY_NOT_FOUND "questionnaire_version" [("tenant_uuid", U.toString defaultTenant.uuid), ("uuid", U.toString version.uuid)]) + (_ERROR_DATABASE__ENTITY_NOT_FOUND "project_version" [("tenant_uuid", U.toString defaultTenant.uuid), ("uuid", U.toString version.uuid)]) -- -------------------------------- -- COMPARATORS -- -------------------------------- -compareQuestionnaireVersionCreateDtos resDto expDto = do +compareProjectVersionCreateDtos resDto expDto = do liftIO $ resDto.name `shouldBe` expDto.name liftIO $ resDto.eventUuid `shouldBe` expDto.eventUuid diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/Project/Version/Detail_DELETE.hs similarity index 70% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Detail_DELETE.hs rename to wizard-server/test/Wizard/Specs/API/Project/Version/Detail_DELETE.hs index 2329300a1..e25f44636 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Version/Detail_DELETE.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Version.Detail_DELETE ( +module Wizard.Specs.API.Project.Version.Detail_DELETE ( detail_DELETE, ) where @@ -10,23 +10,23 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.QuestionnaireVersion +import Wizard.Model.Project.Version.ProjectVersion import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Version.Common +import Wizard.Specs.API.Project.Version.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- DELETE /wizard-api/questionnaires/{qtnUuid}/versions/{vUuid} +-- DELETE /wizard-api/projects/{projectUuid}/versions/{vUuid} -- ------------------------------------------------------------------------ detail_DELETE :: AppContext -> SpecWith ((), Application) detail_DELETE appContext = - describe "DELETE /wizard-api/questionnaires/{qtnUuid}/versions/{vUuid}" $ do + describe "DELETE /wizard-api/projects/{projectUuid}/versions/{vUuid}" $ do test_204 appContext test_401 appContext test_404 appContext @@ -36,7 +36,7 @@ detail_DELETE appContext = -- ---------------------------------------------------- reqMethod = methodDelete -reqUrl = "/wizard-api/questionnaires/af984a75-56e3-49f8-b16f-d6b99599910a/versions/af984a75-56e3-49f8-b16f-dd016270ce7e" +reqUrl = "/wizard-api/projects/af984a75-56e3-49f8-b16f-d6b99599910a/versions/af984a75-56e3-49f8-b16f-dd016270ce7e" reqHeaders = [reqAuthHeader, reqCtHeader] @@ -54,7 +54,7 @@ test_204 appContext = let expBody = "" -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -62,7 +62,7 @@ test_204 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals expBody} response `shouldRespondWith` responseMatcher -- AND: Find a result in DB - assertAbsenceOfQuestionnaireVersionInDB appContext (questionnaireVersion1 questionnaire1Uuid) + assertAbsenceOfProjectVersionInDB appContext (projectVersion1 project1Uuid) -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -75,8 +75,8 @@ test_401 appContext = createAuthTest reqMethod reqUrl [] reqBody test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/00084a75-56e3-49f8-b16f-d6b99599910a/versions/00084a75-56e3-49f8-b16f-dd016270ce7e" + "/wizard-api/projects/00084a75-56e3-49f8-b16f-d6b99599910a/versions/00084a75-56e3-49f8-b16f-dd016270ce7e" reqHeaders reqBody - "questionnaire" + "project" [("uuid", "00084a75-56e3-49f8-b16f-d6b99599910a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Detail_PUT.hs b/wizard-server/test/Wizard/Specs/API/Project/Version/Detail_PUT.hs similarity index 66% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Detail_PUT.hs rename to wizard-server/test/Wizard/Specs/API/Project/Version/Detail_PUT.hs index 6a06061a5..0fa976399 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/Detail_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Version/Detail_PUT.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Version.Detail_PUT ( +module Wizard.Specs.API.Project.Version.Detail_PUT ( detail_PUT, ) where @@ -10,24 +10,24 @@ import Test.Hspec.Wai hiding (shouldRespondWith) import Shared.Common.Api.Resource.Error.ErrorJM () import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Version.Common +import Wizard.Specs.API.Project.Version.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- PUT /wizard-api/questionnaires/{qtnUuid}/versions/{vUuid} +-- PUT /wizard-api/projects/{projectUuid}/versions/{vUuid} -- ------------------------------------------------------------------------ detail_PUT :: AppContext -> SpecWith ((), Application) detail_PUT appContext = - describe "PUT /wizard-api/questionnaires/{qtnUuid}/versions/{vUuid}" $ do + describe "PUT /wizard-api/projects/{projectUuid}/versions/{vUuid}" $ do test_200 appContext test_400 appContext test_401 appContext @@ -38,11 +38,11 @@ detail_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/questionnaires/af984a75-56e3-49f8-b16f-d6b99599910a/versions/af984a75-56e3-49f8-b16f-dd016270ce7e" +reqUrl = "/wizard-api/projects/af984a75-56e3-49f8-b16f-d6b99599910a/versions/af984a75-56e3-49f8-b16f-dd016270ce7e" reqHeaders = [reqAuthHeader, reqCtHeader] -reqDto = questionnaireVersion1EditedChangeDto questionnaire1Uuid +reqDto = projectVersion1EditedChangeDto project1Uuid reqBody = encode reqDto @@ -55,20 +55,20 @@ test_200 appContext = do let expStatus = 200 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = questionnaireVersion1EditedList questionnaire1Uuid + let expDto = projectVersion1EditedList project1Uuid let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireVersionList) + let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, ProjectVersionList) assertResStatus status expStatus assertResHeaders headers expHeaders - compareQuestionnaireVersionCreateDtos resBody expDto + compareProjectVersionCreateDtos resBody expDto -- AND: Find a result in DB - assertExistenceOfQuestionnaireVersionInDB appContext (questionnaireVersion1Edited questionnaire1Uuid) + assertExistenceOfProjectVersionInDB appContext (projectVersion1Edited project1Uuid) -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -86,8 +86,8 @@ test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] reqBody test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/00084a75-56e3-49f8-b16f-d6b99599910a/versions/bd6611c8-ea11-48ab-adaa-3ce51b66aae5" + "/wizard-api/projects/00084a75-56e3-49f8-b16f-d6b99599910a/versions/bd6611c8-ea11-48ab-adaa-3ce51b66aae5" reqHeaders reqBody - "questionnaire" + "project" [("uuid", "00084a75-56e3-49f8-b16f-d6b99599910a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/List_GET.hs b/wizard-server/test/Wizard/Specs/API/Project/Version/List_GET.hs similarity index 67% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Version/List_GET.hs rename to wizard-server/test/Wizard/Specs/API/Project/Version/List_GET.hs index 0849dc545..02a511a32 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Version/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Version.List_GET ( +module Wizard.Specs.API.Project.Version.List_GET ( list_GET, ) where @@ -15,16 +15,16 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Api.Resource.Error.ErrorJM () import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import WizardLib.Public.Localization.Messages.Public import SharedTest.Specs.API.Common @@ -32,11 +32,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaires/{qtnUuid}/versions +-- GET /wizard-api/projects/{projectUuid}/versions -- ------------------------------------------------------------------------ list_GET :: AppContext -> SpecWith ((), Application) list_GET appContext = - describe "GET /wizard-api/questionnaires/{qtnUuid}/versions" $ do + describe "GET /wizard-api/projects/{projectUuid}/versions" $ do test_200 appContext test_403 appContext test_404 appContext @@ -46,7 +46,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrlT qtnUuid = BS.pack $ "/wizard-api/questionnaires/" ++ U.toString qtnUuid ++ "/versions" +reqUrlT projectUuid = BS.pack $ "/wizard-api/projects/" ++ U.toString projectUuid ++ "/versions" reqHeadersT authHeader = authHeader @@ -59,54 +59,54 @@ test_200 appContext = do create_test_200 "HTTP 200 OK (Owner, Private)" appContext - questionnaire1 - questionnaire1Ctn + project1 + project1Ctn [reqAuthHeader] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext - questionnaire2 - questionnaire2Ctn + project2 + project2Ctn [reqNonAdminAuthHeader] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Anonymous, VisibleView, Sharing)" appContext - questionnaire7 - questionnaire7Ctn + project7 + project7Ctn [] - [qtn1AlbertEditQtnPermDto] + [project1AlbertEditProjectPermDto] create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext - questionnaire3 - questionnaire3Ctn + project3 + project3Ctn [reqNonAdminAuthHeader] [] - create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext questionnaire10 questionnaire10Ctn [] [] + create_test_200 "HTTP 200 OK (Anonymous, Public, Sharing)" appContext project10 project10Ctn [] [] -create_test_200 title appContext qtn qtnCtn authHeader permissions = +create_test_200 title appContext project projectContent authHeader permissions = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = qVersionsList qtn.uuid + let expDto = qVersionsList project.uuid let expBody = encode expDto -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext - runInContextIO (insertQuestionnaireEvents questionnaire7Events) appContext - runInContextIO (traverse_ insertQuestionnaireVersion questionnaire7Versions) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaireEvents questionnaire10Events) appContext - runInContextIO (traverse_ insertQuestionnaireVersion questionnaire10Versions) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project7) appContext + runInContextIO (insertProjectEvents project7Events) appContext + runInContextIO (traverse_ insertProjectVersion project7Versions) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProjectEvents project10Events) appContext + runInContextIO (traverse_ insertProjectVersion project10Versions) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -121,27 +121,27 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") create_test_403 "HTTP 403 FORBIDDEN (Anonymous, VisibleView)" appContext - questionnaire2 + project2 [] _ERROR_SERVICE_USER__MISSING_USER create_test_403 "HTTP 403 FORBIDDEN (Anonymous, Public)" appContext - questionnaire3 + project3 [] _ERROR_SERVICE_USER__MISSING_USER -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do - let reqUrl = reqUrlT qtn.uuid + let reqUrl = reqUrlT project.uuid let reqHeaders = reqHeadersT authHeader -- AND: Prepare expectation let expStatus = 403 @@ -151,7 +151,7 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -165,8 +165,8 @@ create_test_403 title appContext qtn authHeader errorMessage = test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaires/f08ead5f-746d-411b-aee6-77ea3d24016a/versions" + "/wizard-api/projects/f08ead5f-746d-411b-aee6-77ea3d24016a/versions" [reqHeadersT reqAuthHeader] reqBody - "questionnaire" + "project" [("uuid", "f08ead5f-746d-411b-aee6-77ea3d24016a")] diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/List_POST.hs b/wizard-server/test/Wizard/Specs/API/Project/Version/List_POST.hs similarity index 66% rename from wizard-server/test/Wizard/Specs/API/Questionnaire/Version/List_POST.hs rename to wizard-server/test/Wizard/Specs/API/Project/Version/List_POST.hs index c70eea862..96b145753 100644 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/List_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Project/Version/List_POST.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.Questionnaire.Version.List_POST ( +module Wizard.Specs.API.Project.Version.List_POST ( list_POST, ) where @@ -10,24 +10,24 @@ import Test.Hspec.Wai hiding (shouldRespondWith) import Shared.Common.Api.Resource.Error.ErrorJM () import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Model.Questionnaire.QuestionnaireVersionList +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Model.Project.Version.ProjectVersionList import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Version.Common +import Wizard.Specs.API.Project.Version.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- POST /wizard-api/questionnaires/{qtnUuid}/versions +-- POST /wizard-api/projects/{projectUuid}/versions -- ------------------------------------------------------------------------ list_POST :: AppContext -> SpecWith ((), Application) list_POST appContext = - describe "POST /wizard-api/questionnaires/{qtnUuid}/versions" $ do + describe "POST /wizard-api/projects/{projectUuid}/versions" $ do test_201 appContext test_400 appContext test_401 appContext @@ -37,11 +37,11 @@ list_POST appContext = -- ---------------------------------------------------- reqMethod = methodPost -reqUrl = "/wizard-api/questionnaires/af984a75-56e3-49f8-b16f-d6b99599910a/versions" +reqUrl = "/wizard-api/projects/af984a75-56e3-49f8-b16f-d6b99599910a/versions" reqHeaders = [reqAuthHeader, reqCtHeader] -reqDto = questionnaireVersion2ChangeDto questionnaire1Uuid +reqDto = projectVersion2ChangeDto project1Uuid reqBody = encode reqDto @@ -54,20 +54,20 @@ test_201 appContext = do let expStatus = 201 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = questionnaireVersion2 questionnaire1Uuid + let expDto = projectVersion2 project1Uuid let expBody = encode expDto -- AND: Run migrations runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireVersionList) + let (status, headers, resBody) = destructResponse response :: (Int, ResponseHeaders, ProjectVersionList) assertResStatus status expStatus assertResHeaders headers expHeaders - compareQuestionnaireVersionCreateDtos resBody expDto + compareProjectVersionCreateDtos resBody expDto -- AND: Find a result in DB - assertExistenceOfQuestionnaireVersionInDB appContext ((questionnaireVersion2 questionnaire1Uuid) {uuid = resBody.uuid} :: QuestionnaireVersion) + assertExistenceOfProjectVersionInDB appContext ((projectVersion2 project1Uuid) {uuid = resBody.uuid} :: ProjectVersion) -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/ProjectAction/APISpec.hs b/wizard-server/test/Wizard/Specs/API/ProjectAction/APISpec.hs new file mode 100644 index 000000000..3aa9eda6b --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/ProjectAction/APISpec.hs @@ -0,0 +1,18 @@ +module Wizard.Specs.API.ProjectAction.APISpec where + +import Test.Hspec +import Test.Hspec.Wai hiding (shouldRespondWith) + +import Wizard.Specs.API.Common +import Wizard.Specs.API.ProjectAction.Detail_GET +import Wizard.Specs.API.ProjectAction.Detail_PUT +import Wizard.Specs.API.ProjectAction.List_GET +import Wizard.Specs.API.ProjectAction.List_Suggestions_GET + +projectActionAPI baseContext appContext = + with (startWebApp baseContext appContext) $ + describe "PROJECT ACTION API Spec" $ do + list_GET appContext + list_suggestions_GET appContext + detail_GET appContext + detail_PUT appContext diff --git a/wizard-server/test/Wizard/Specs/API/ProjectAction/Common.hs b/wizard-server/test/Wizard/Specs/API/ProjectAction/Common.hs new file mode 100644 index 000000000..45c471a5e --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/ProjectAction/Common.hs @@ -0,0 +1,27 @@ +module Wizard.Specs.API.ProjectAction.Common where + +import Data.Either (isRight) +import Test.Hspec +import Test.Hspec.Wai hiding (shouldRespondWith) + +import Shared.Common.Api.Resource.Error.ErrorJM () +import Wizard.Database.DAO.Project.ProjectActionDAO +import Wizard.Model.Project.Action.ProjectAction + +import Wizard.Specs.Common + +-- -------------------------------- +-- ASSERTS +-- -------------------------------- +assertExistenceOfProjectActionInDB appContext action = do + eProjectAction <- runInContextIO (findProjectActionById action.paId) appContext + liftIO $ isRight eProjectAction `shouldBe` True + let (Right actionFromDB) = eProjectAction + compareProjectActionDtos actionFromDB action + +-- -------------------------------- +-- COMPARATORS +-- -------------------------------- +compareProjectActionDtos resDto expDto = do + liftIO $ resDto.name `shouldBe` expDto.name + liftIO $ resDto.enabled `shouldBe` expDto.enabled diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/ProjectAction/Detail_GET.hs similarity index 77% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Detail_GET.hs rename to wizard-server/test/Wizard/Specs/API/ProjectAction/Detail_GET.hs index a8e3e3c7b..013590cb6 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectAction/Detail_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireAction.Detail_GET ( +module Wizard.Specs.API.ProjectAction.Detail_GET ( detail_GET, ) where @@ -9,21 +9,21 @@ import Test.Hspec import Test.Hspec.Wai hiding (shouldRespondWith) import Test.Hspec.Wai.Matcher -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import qualified Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionMigration as QA_Migration +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import qualified Wizard.Database.Migration.Development.Project.ProjectActionMigration as ProjectAction_Migration import Wizard.Model.Context.AppContext -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper +import Wizard.Service.Project.Action.ProjectActionMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaire-actions/{id} +-- GET /wizard-api/project-actions/{id} -- ------------------------------------------------------------------------ detail_GET :: AppContext -> SpecWith ((), Application) detail_GET appContext = - describe "GET /wizard-api/questionnaire-actions/{id}" $ do + describe "GET /wizard-api/project-actions/{id}" $ do test_200 appContext test_401 appContext test_403 appContext @@ -34,7 +34,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaire-actions/global:questionnaire-action-ftp:3.0.0" +reqUrl = "/wizard-api/project-actions/global:project-action-ftp:3.0.0" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] @@ -53,10 +53,10 @@ create_test_200 title appContext reqAuthHeader = -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = toDTO questionnaireActionFtp3 + let expDto = toDTO projectActionFtp3 let expBody = encode expDto -- AND: Run migrations - runInContextIO QA_Migration.runMigration appContext + runInContextIO ProjectAction_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -71,7 +71,7 @@ test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "PRJ_PERM" -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -79,8 +79,8 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaire-actions/deab6c38-aeac-4b17-a501-4365a0a70176" + "/wizard-api/project-actions/deab6c38-aeac-4b17-a501-4365a0a70176" (reqHeadersT reqAuthHeader) reqBody - "questionnaire_action" + "project_action" [("id", "deab6c38-aeac-4b17-a501-4365a0a70176")] diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Detail_PUT.hs b/wizard-server/test/Wizard/Specs/API/ProjectAction/Detail_PUT.hs similarity index 67% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Detail_PUT.hs rename to wizard-server/test/Wizard/Specs/API/ProjectAction/Detail_PUT.hs index 9cdcfdc6e..f2ecf971d 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Detail_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectAction/Detail_PUT.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireAction.Detail_PUT ( +module Wizard.Specs.API.ProjectAction.Detail_PUT ( detail_PUT, ) where @@ -8,25 +8,25 @@ import Network.Wai (Application) import Test.Hspec import Test.Hspec.Wai hiding (shouldRespondWith) -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionDTO -import Wizard.Api.Resource.QuestionnaireAction.QuestionnaireActionJM () -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import qualified Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionMigration as QA_Migration +import Wizard.Api.Resource.Project.Action.ProjectActionDTO +import Wizard.Api.Resource.Project.Action.ProjectActionJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import qualified Wizard.Database.Migration.Development.Project.ProjectActionMigration as ProjectAction_Migration import Wizard.Model.Context.AppContext -import Wizard.Model.QuestionnaireAction.QuestionnaireAction -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper +import Wizard.Model.Project.Action.ProjectAction +import Wizard.Service.Project.Action.ProjectActionMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.QuestionnaireAction.Common +import Wizard.Specs.API.ProjectAction.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- PUT /wizard-api/questionnaire-actions/{id} +-- PUT /wizard-api/project-actions/{id} -- ------------------------------------------------------------------------ detail_PUT :: AppContext -> SpecWith ((), Application) detail_PUT appContext = - describe "PUT /wizard-api/questionnaire-actions/{id}" $ do + describe "PUT /wizard-api/project-actions/{id}" $ do test_200 appContext test_401 appContext test_403 appContext @@ -37,11 +37,11 @@ detail_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/questionnaire-actions/global:questionnaire-action-ftp:3.0.0" +reqUrl = "/wizard-api/project-actions/global:project-action-ftp:3.0.0" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] -reqDto = toChangeDTO questionnaireActionFtp3Edited +reqDto = toChangeDTO projectActionFtp3Edited reqBody = encode reqDto @@ -58,18 +58,18 @@ create_test_200 title appContext reqAuthHeader = -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = toDTO questionnaireActionFtp3Edited + let expDto = toDTO projectActionFtp3Edited let expBody = encode expDto - let expType (a :: QuestionnaireActionDTO) = a + let expType (a :: ProjectActionDTO) = a -- AND: Run migrations - runInContextIO QA_Migration.runMigration appContext + runInContextIO ProjectAction_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resDto) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireActionDTO) + let (status, headers, resDto) = destructResponse response :: (Int, ResponseHeaders, ProjectActionDTO) assertResponseWithoutFields expStatus expHeaders expDto expType response ["updatedAt"] -- AND: Find result in DB and compare with expectation state - assertExistenceOfQuestionnaireActionInDB appContext questionnaireActionFtp3Edited + assertExistenceOfProjectActionInDB appContext projectActionFtp3Edited -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -79,7 +79,7 @@ test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "QTN_ACTION_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "PRJ_ACTION_PERM" -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -87,8 +87,8 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaire-actions/deab6c38-aeac-4b17-a501-4365a0a70176" + "/wizard-api/project-actions/deab6c38-aeac-4b17-a501-4365a0a70176" (reqHeadersT reqAuthHeader) reqBody - "questionnaire_action" + "project_action" [("id", "deab6c38-aeac-4b17-a501-4365a0a70176")] diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/List_GET.hs b/wizard-server/test/Wizard/Specs/API/ProjectAction/List_GET.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireAction/List_GET.hs rename to wizard-server/test/Wizard/Specs/API/ProjectAction/List_GET.hs index 2967d6d85..5b98a33c3 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectAction/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireAction.List_GET ( +module Wizard.Specs.API.ProjectAction.List_GET ( list_GET, ) where @@ -11,21 +11,21 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.PageMetadata -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import qualified Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionMigration as QA_Migration +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import qualified Wizard.Database.Migration.Development.Project.ProjectActionMigration as ProjectAction_Migration import Wizard.Model.Context.AppContext -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper +import Wizard.Service.Project.Action.ProjectActionMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaire-actions +-- GET /wizard-api/project-actions -- ------------------------------------------------------------------------ list_GET :: AppContext -> SpecWith ((), Application) list_GET appContext = - describe "GET /wizard-api/questionnaire-actions" $ do + describe "GET /wizard-api/project-actions" $ do test_200 appContext test_401 appContext test_403 appContext @@ -35,7 +35,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaire-actions" +reqUrl = "/wizard-api/project-actions" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -48,21 +48,21 @@ test_200 appContext = do create_test_200 "HTTP 200 OK" appContext - "/wizard-api/questionnaire-actions" + "/wizard-api/project-actions" reqAuthHeader - (Page "questionnaireActions" (PageMetadata 20 3 1 0) [questionnaireActionFtp3, questionnaireActionMail1, questionnaireActionScp1]) + (Page "projectActions" (PageMetadata 20 3 1 0) [projectActionFtp3, projectActionMail1, projectActionScp1]) create_test_200 "HTTP 200 OK (query 'q')" appContext - "/wizard-api/questionnaire-actions?q=FTP" + "/wizard-api/project-actions?q=FTP" reqAuthHeader - (Page "questionnaireActions" (PageMetadata 20 1 1 0) [questionnaireActionFtp3]) + (Page "projectActions" (PageMetadata 20 1 1 0) [projectActionFtp3]) create_test_200 "HTTP 200 OK (query 'q' for non-existing)" appContext - "/wizard-api/questionnaire-actions?q=Non-existing Questionnaire Report" + "/wizard-api/project-actions?q=Non-existing Project Report" reqAuthHeader - (Page "questionnaireActions" (PageMetadata 20 0 0 0) []) + (Page "projectActions" (PageMetadata 20 0 0 0) []) create_test_200 title appContext reqUrl reqAuthHeader expEntities = it title $ @@ -75,7 +75,7 @@ create_test_200 title appContext reqUrl reqAuthHeader expEntities = let expDto = fmap toDTO expEntities let expBody = encode expDto -- AND: Run migrations - runInContextIO QA_Migration.runMigration appContext + runInContextIO ProjectAction_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -90,4 +90,4 @@ test_401 appContext = createAuthTest reqMethod reqUrl [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/List_Suggestions_GET.hs b/wizard-server/test/Wizard/Specs/API/ProjectAction/List_Suggestions_GET.hs similarity index 65% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireAction/List_Suggestions_GET.hs rename to wizard-server/test/Wizard/Specs/API/ProjectAction/List_Suggestions_GET.hs index 82338c969..549ecbb85 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/List_Suggestions_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectAction/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireAction.List_Suggestions_GET ( +module Wizard.Specs.API.ProjectAction.List_Suggestions_GET ( list_suggestions_GET, ) where @@ -12,22 +12,22 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.PageMetadata import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration -import Wizard.Database.Migration.Development.QuestionnaireAction.Data.QuestionnaireActions -import qualified Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionMigration as QA_Migration +import Wizard.Database.Migration.Development.Project.Data.ProjectActions +import qualified Wizard.Database.Migration.Development.Project.ProjectActionMigration as ProjectAction_Migration +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import Wizard.Model.Context.AppContext -import Wizard.Service.QuestionnaireAction.QuestionnaireActionMapper +import Wizard.Service.Project.Action.ProjectActionMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaire-actions/suggestions +-- GET /wizard-api/project-actions/suggestions -- ------------------------------------------------------------------------ list_suggestions_GET :: AppContext -> SpecWith ((), Application) list_suggestions_GET appContext = - describe "GET /wizard-api/questionnaire-actions/suggestions" $ do + describe "GET /wizard-api/project-actions/suggestions" $ do test_200 appContext test_401 appContext test_403 appContext @@ -37,7 +37,7 @@ list_suggestions_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaire-actions/suggestions" +reqUrl = "/wizard-api/project-actions/suggestions" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -50,27 +50,27 @@ test_200 appContext = do create_test_200 "HTTP 200 OK" appContext - "/wizard-api/questionnaire-actions/suggestions?enabled=true" + "/wizard-api/project-actions/suggestions?enabled=true" reqAuthHeader - (Page "questionnaireActions" (PageMetadata 20 2 1 0) [questionnaireActionFtp2, questionnaireActionMail1]) + (Page "projectActions" (PageMetadata 20 2 1 0) [projectActionFtp2, projectActionMail1]) create_test_200 "HTTP 200 OK (query 'q')" appContext - "/wizard-api/questionnaire-actions/suggestions?enabled=true&q=FTP" + "/wizard-api/project-actions/suggestions?enabled=true&q=FTP" reqAuthHeader - (Page "questionnaireActions" (PageMetadata 20 1 1 0) [questionnaireActionFtp2]) + (Page "projectActions" (PageMetadata 20 1 1 0) [projectActionFtp2]) create_test_200 "HTTP 200 OK (query 'q' for non-existing)" appContext - "/wizard-api/questionnaire-actions/suggestions?enabled=true&q=Non-existing Questionnaire Report" + "/wizard-api/project-actions/suggestions?enabled=true&q=Non-existing Project Report" reqAuthHeader - (Page "questionnaireActions" (PageMetadata 20 0 0 0) []) + (Page "projectActions" (PageMetadata 20 0 0 0) []) create_test_200 - "HTTP 200 OK (query 'questionnaireUuid')" + "HTTP 200 OK (query 'projectUuid')" appContext - "/wizard-api/questionnaire-actions/suggestions?enabled=true&questionnaireUuid=af984a75-56e3-49f8-b16f-d6b99599910a" + "/wizard-api/project-actions/suggestions?enabled=true&projectUuid=af984a75-56e3-49f8-b16f-d6b99599910a" reqAuthHeader - (Page "questionnaireActions" (PageMetadata 20 1 1 0) [questionnaireActionFtp2]) + (Page "projectActions" (PageMetadata 20 1 1 0) [projectActionFtp2]) create_test_200 title appContext reqUrl reqAuthHeader expEntities = it title $ @@ -84,8 +84,8 @@ create_test_200 title appContext reqUrl reqAuthHeader expEntities = let expBody = encode expDto -- AND: Run migrations runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO QA_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO ProjectAction_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -100,4 +100,4 @@ test_401 appContext = createAuthTest reqMethod reqUrl [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/ProjectCommentThread/APISpec.hs b/wizard-server/test/Wizard/Specs/API/ProjectCommentThread/APISpec.hs new file mode 100644 index 000000000..c5282e3f9 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/ProjectCommentThread/APISpec.hs @@ -0,0 +1,13 @@ +module Wizard.Specs.API.ProjectCommentThread.APISpec where + +import Test.Hspec +import Test.Hspec.Wai hiding (shouldRespondWith) + +import Wizard.Specs.API.Common + +import Wizard.Specs.API.ProjectCommentThread.List_GET + +projectCommentThreadAPI baseContext appContext = + with (startWebApp baseContext appContext) $ + describe "PROJECT COMMENT THREAD API Spec" $ do + list_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/CommentThread/List_GET.hs b/wizard-server/test/Wizard/Specs/API/ProjectCommentThread/List_GET.hs similarity index 68% rename from wizard-server/test/Wizard/Specs/API/CommentThread/List_GET.hs rename to wizard-server/test/Wizard/Specs/API/ProjectCommentThread/List_GET.hs index e2796e7b5..4666e6080 100644 --- a/wizard-server/test/Wizard/Specs/API/CommentThread/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectCommentThread/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.CommentThread.List_GET ( +module Wizard.Specs.API.ProjectCommentThread.List_GET ( list_GET, ) where @@ -16,17 +16,17 @@ import Shared.Common.Model.Common.PageMetadata import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireComments -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectComments +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnaireComment -import Wizard.Model.Questionnaire.QuestionnaireCommentThreadAssigned +import Wizard.Model.Project.Comment.ProjectComment +import Wizard.Model.Project.Comment.ProjectCommentThreadAssigned +import Wizard.Model.Project.Project import Wizard.Model.User.User import SharedTest.Specs.API.Common @@ -34,11 +34,11 @@ import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/comment-threads +-- GET /wizard-api/project-comment-threads -- ------------------------------------------------------------------------ list_GET :: AppContext -> SpecWith ((), Application) list_GET appContext = - describe "GET /wizard-api/comment-threads" $ do + describe "GET /wizard-api/project-comment-threads" $ do test_200 appContext test_401 appContext test_403 appContext @@ -48,7 +48,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/comment-threads?sort=updatedAt,desc" +reqUrl = "/wizard-api/project-comment-threads?sort=updatedAt,desc" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -66,25 +66,25 @@ test_200 appContext = runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire1) appContext + runInContextIO (insertProject project1) appContext -- AND: Create thread without assignee - thread1 <- liftIO . create_cmtQ1_t1 $ questionnaire1.uuid + thread1 <- liftIO . create_cmtQ1_t1 $ project1.uuid comment1_1 <- liftIO . create_cmtQ1_t1_1 $ thread1.uuid comment1_2 <- liftIO . create_cmtQ1_t1_2 $ thread1.uuid - runInContextIO (insertQuestionnaireCommentThread thread1) appContext - runInContextIO (insertQuestionnaireComment comment1_1) appContext - runInContextIO (insertQuestionnaireComment comment1_2) appContext + runInContextIO (insertProjectCommentThread thread1) appContext + runInContextIO (insertProjectComment comment1_1) appContext + runInContextIO (insertProjectComment comment1_2) appContext -- AND: Create thread with assignee - thread2 <- liftIO . create_cmtQ1_t1 $ questionnaire1.uuid + thread2 <- liftIO . create_cmtQ1_t1 $ project1.uuid comment2_1 <- liftIO . create_cmtQ1_t1_1 $ thread2.uuid comment2_2 <- liftIO . create_cmtQ1_t1_2 $ thread2.uuid - runInContextIO (insertQuestionnaireCommentThread (thread2 {assignedTo = Just userAlbert.uuid})) appContext - runInContextIO (insertQuestionnaireComment comment2_1) appContext - runInContextIO (insertQuestionnaireComment comment2_2) appContext + runInContextIO (insertProjectCommentThread (thread2 {assignedTo = Just userAlbert.uuid})) appContext + runInContextIO (insertProjectComment comment2_1) appContext + runInContextIO (insertProjectComment comment2_2) appContext -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = Page "commentThreads" (PageMetadata 20 1 1 0) [cmtAssigned {commentThreadUuid = thread2.uuid}] + let expDto = Page "projectCommentThreads" (PageMetadata 20 1 1 0) [cmtAssigned {commentThreadUuid = thread2.uuid}] let expBody = encode expDto -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -101,4 +101,4 @@ test_401 appContext = createAuthTest reqMethod reqUrl [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/ProjectImporter/APISpec.hs b/wizard-server/test/Wizard/Specs/API/ProjectImporter/APISpec.hs new file mode 100644 index 000000000..3ff8b2bd6 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/ProjectImporter/APISpec.hs @@ -0,0 +1,18 @@ +module Wizard.Specs.API.ProjectImporter.APISpec where + +import Test.Hspec +import Test.Hspec.Wai hiding (shouldRespondWith) + +import Wizard.Specs.API.Common +import Wizard.Specs.API.ProjectImporter.Detail_GET +import Wizard.Specs.API.ProjectImporter.Detail_PUT +import Wizard.Specs.API.ProjectImporter.List_GET +import Wizard.Specs.API.ProjectImporter.List_Suggestions_GET + +projectImporterAPI baseContext appContext = + with (startWebApp baseContext appContext) $ + describe "PROJECT IMPORTER API Spec" $ do + list_GET appContext + list_suggestions_GET appContext + detail_GET appContext + detail_PUT appContext diff --git a/wizard-server/test/Wizard/Specs/API/ProjectImporter/Common.hs b/wizard-server/test/Wizard/Specs/API/ProjectImporter/Common.hs new file mode 100644 index 000000000..3ed1fbc4c --- /dev/null +++ b/wizard-server/test/Wizard/Specs/API/ProjectImporter/Common.hs @@ -0,0 +1,27 @@ +module Wizard.Specs.API.ProjectImporter.Common where + +import Data.Either (isRight) +import Test.Hspec +import Test.Hspec.Wai hiding (shouldRespondWith) + +import Shared.Common.Api.Resource.Error.ErrorJM () +import Wizard.Database.DAO.Project.ProjectImporterDAO +import Wizard.Model.Project.Importer.ProjectImporter + +import Wizard.Specs.Common + +-- -------------------------------- +-- ASSERTS +-- -------------------------------- +assertExistenceOfProjectImporterInDB appContext importer = do + eProjectImporter <- runInContextIO (findProjectImporterById importer.piId) appContext + liftIO $ isRight eProjectImporter `shouldBe` True + let (Right importerFromDB) = eProjectImporter + compareProjectImporterDtos importerFromDB importer + +-- -------------------------------- +-- COMPARATORS +-- -------------------------------- +compareProjectImporterDtos resDto expDto = do + liftIO $ resDto.name `shouldBe` expDto.name + liftIO $ resDto.enabled `shouldBe` expDto.enabled diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Detail_GET.hs b/wizard-server/test/Wizard/Specs/API/ProjectImporter/Detail_GET.hs similarity index 76% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Detail_GET.hs rename to wizard-server/test/Wizard/Specs/API/ProjectImporter/Detail_GET.hs index ac0e6418e..1155c8b8c 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Detail_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectImporter/Detail_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireImporter.Detail_GET ( +module Wizard.Specs.API.ProjectImporter.Detail_GET ( detail_GET, ) where @@ -9,21 +9,21 @@ import Test.Hspec import Test.Hspec.Wai hiding (shouldRespondWith) import Test.Hspec.Wai.Matcher -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters -import qualified Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterMigration as QI_Migration +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import qualified Wizard.Database.Migration.Development.Project.ProjectImporterMigration as ProjectImporterMigration import Wizard.Model.Context.AppContext -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper +import Wizard.Service.Project.Importer.ProjectImporterMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaire-importers/{qi-id} +-- GET /wizard-api/project-importers/{id} -- ------------------------------------------------------------------------ detail_GET :: AppContext -> SpecWith ((), Application) detail_GET appContext = - describe "GET /wizard-api/questionnaire-importers/{qi-id}" $ do + describe "GET /wizard-api/project-importers/{id}" $ do test_200 appContext test_401 appContext test_403 appContext @@ -34,7 +34,7 @@ detail_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaire-importers/global:questionnaire-importer-bio:3.0.0" +reqUrl = "/wizard-api/project-importers/global:project-importer-bio:3.0.0" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] @@ -53,10 +53,10 @@ create_test_200 title appContext reqAuthHeader = -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeader : resCorsHeaders - let expDto = toDTO questionnaireImporterBio3 + let expDto = toDTO projectImporterBio3 let expBody = encode expDto -- AND: Run migrations - runInContextIO QI_Migration.runMigration appContext + runInContextIO ProjectImporterMigration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -72,7 +72,7 @@ test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "PRJ_PERM" -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -80,8 +80,8 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaire-importers/deab6c38-aeac-4b17-a501-4365a0a70176" + "/wizard-api/project-importers/deab6c38-aeac-4b17-a501-4365a0a70176" (reqHeadersT reqAuthHeader) reqBody - "questionnaire_importer" + "project_importer" [("id", "deab6c38-aeac-4b17-a501-4365a0a70176")] diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Detail_PUT.hs b/wizard-server/test/Wizard/Specs/API/ProjectImporter/Detail_PUT.hs similarity index 66% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Detail_PUT.hs rename to wizard-server/test/Wizard/Specs/API/ProjectImporter/Detail_PUT.hs index 7e9bd58a4..1043fff20 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Detail_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectImporter/Detail_PUT.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireImporter.Detail_PUT ( +module Wizard.Specs.API.ProjectImporter.Detail_PUT ( detail_PUT, ) where @@ -8,25 +8,25 @@ import Network.Wai (Application) import Test.Hspec import Test.Hspec.Wai hiding (shouldRespondWith) -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters -import qualified Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterMigration as QI_Migration +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import qualified Wizard.Database.Migration.Development.Project.ProjectImporterMigration as ProjectImporterMigration import Wizard.Model.Context.AppContext -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper +import Wizard.Model.Project.Importer.ProjectImporter +import Wizard.Service.Project.Importer.ProjectImporterMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common -import Wizard.Specs.API.QuestionnaireImporter.Common +import Wizard.Specs.API.ProjectImporter.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- PUT /wizard-api/questionnaire-importers/{qi-id} +-- PUT /wizard-api/project-importers/{id} -- ------------------------------------------------------------------------ detail_PUT :: AppContext -> SpecWith ((), Application) detail_PUT appContext = - describe "PUT /wizard-api/questionnaire-importers/{qi-id}" $ do + describe "PUT /wizard-api/project-importers/{id}" $ do test_200 appContext test_401 appContext test_403 appContext @@ -37,11 +37,11 @@ detail_PUT appContext = -- ---------------------------------------------------- reqMethod = methodPut -reqUrl = "/wizard-api/questionnaire-importers/global:questionnaire-importer-bio:3.0.0" +reqUrl = "/wizard-api/project-importers/global:project-importer-bio:3.0.0" reqHeadersT reqAuthHeader = [reqCtHeader, reqAuthHeader] -reqDto = toChangeDTO questionnaireImporterBio3Edited +reqDto = toChangeDTO projectImporterBio3Edited reqBody = encode reqDto @@ -58,18 +58,18 @@ create_test_200 title appContext reqAuthHeader = -- AND: Prepare expectation let expStatus = 200 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = toDTO questionnaireImporterBio3Edited + let expDto = toDTO projectImporterBio3Edited let expBody = encode expDto - let expType (a :: QuestionnaireImporterDTO) = a + let expType (a :: ProjectImporterDTO) = a -- AND: Run migrations - runInContextIO QI_Migration.runMigration appContext + runInContextIO ProjectImporterMigration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation - let (status, headers, resDto) = destructResponse response :: (Int, ResponseHeaders, QuestionnaireImporterDTO) + let (status, headers, resDto) = destructResponse response :: (Int, ResponseHeaders, ProjectImporterDTO) assertResponseWithoutFields expStatus expHeaders expDto expType response ["updatedAt"] -- AND: Find result in DB and compare with expectation state - assertExistenceOfQuestionnaireImporterInDB appContext questionnaireImporterBio3Edited + assertExistenceOfProjectImporterInDB appContext projectImporterBio3Edited -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -79,7 +79,7 @@ test_401 appContext = createAuthTest reqMethod reqUrl [reqCtHeader] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "QTN_IMPORTER_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtHeader] reqBody "PRJ_IMPORTER_PERM" -- ---------------------------------------------------- -- ---------------------------------------------------- @@ -87,8 +87,8 @@ test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [reqCtH test_404 appContext = createNotFoundTest' reqMethod - "/wizard-api/questionnaire-importers/deab6c38-aeac-4b17-a501-4365a0a70176" + "/wizard-api/project-importers/deab6c38-aeac-4b17-a501-4365a0a70176" (reqHeadersT reqAuthHeader) reqBody - "questionnaire_importer" + "project_importer" [("id", "deab6c38-aeac-4b17-a501-4365a0a70176")] diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/List_GET.hs b/wizard-server/test/Wizard/Specs/API/ProjectImporter/List_GET.hs similarity index 67% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/List_GET.hs rename to wizard-server/test/Wizard/Specs/API/ProjectImporter/List_GET.hs index b450328f3..30083e826 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectImporter/List_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireImporter.List_GET ( +module Wizard.Specs.API.ProjectImporter.List_GET ( list_GET, ) where @@ -11,23 +11,23 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.PageMetadata -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters -import qualified Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterMigration as QI_Migration +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import qualified Wizard.Database.Migration.Development.Project.ProjectImporterMigration as ProjectImporterMigration import Wizard.Model.Context.AppContext -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper +import Wizard.Service.Project.Importer.ProjectImporterMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaire-importers +-- GET /wizard-api/project-importers -- ------------------------------------------------------------------------ list_GET :: AppContext -> SpecWith ((), Application) list_GET appContext = - describe "GET /wizard-api/questionnaire-importers" $ do + describe "GET /wizard-api/project-importers" $ do test_200 appContext test_401 appContext test_403 appContext @@ -37,7 +37,7 @@ list_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaire-importers" +reqUrl = "/wizard-api/project-importers" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -50,25 +50,25 @@ test_200 appContext = do create_test_200 "HTTP 200 OK" appContext - "/wizard-api/questionnaire-importers" + "/wizard-api/project-importers" reqAuthHeader ( Page - "questionnaireImporters" + "projectImporters" (PageMetadata 20 3 1 0) - (fmap toDTO [questionnaireImporterBio3, questionnaireImporterExt1, questionnaireImporterOnto1]) + (fmap toDTO [projectImporterBio3, projectImporterExt1, projectImporterOnto1]) ) create_test_200 "HTTP 200 OK (query 'q')" appContext - "/wizard-api/questionnaire-importers?q=QuestionnaireImporterBio" + "/wizard-api/project-importers?q=ProjectImporterBio" reqAuthHeader - (Page "questionnaireImporters" (PageMetadata 20 1 1 0) (fmap toDTO [questionnaireImporterBio3])) + (Page "projectImporters" (PageMetadata 20 1 1 0) (fmap toDTO [projectImporterBio3])) create_test_200 "HTTP 200 OK (query 'q' for non-existing)" appContext - "/wizard-api/questionnaire-importers?q=Non-existing Questionnaire Report" + "/wizard-api/project-importers?q=Non-existing Project Report" reqAuthHeader - (Page "questionnaireImporters" (PageMetadata 20 0 0 0) ([] :: [QuestionnaireImporterDTO])) + (Page "projectImporters" (PageMetadata 20 0 0 0) ([] :: [ProjectImporterDTO])) create_test_200 title appContext reqUrl reqAuthHeader expDto = it title $ @@ -80,7 +80,7 @@ create_test_200 title appContext reqUrl reqAuthHeader expDto = let expHeaders = resCtHeader : resCorsHeaders let expBody = encode expDto -- AND: Run migrations - runInContextIO QI_Migration.runMigration appContext + runInContextIO ProjectImporterMigration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -96,4 +96,4 @@ test_401 appContext = createAuthTest reqMethod reqUrl [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/List_Suggestions_GET.hs b/wizard-server/test/Wizard/Specs/API/ProjectImporter/List_Suggestions_GET.hs similarity index 61% rename from wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/List_Suggestions_GET.hs rename to wizard-server/test/Wizard/Specs/API/ProjectImporter/List_Suggestions_GET.hs index 28db9c6dc..5e0d9da1a 100644 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/List_Suggestions_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/ProjectImporter/List_Suggestions_GET.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.API.QuestionnaireImporter.List_Suggestions_GET ( +module Wizard.Specs.API.ProjectImporter.List_Suggestions_GET ( list_suggestions_GET, ) where @@ -11,25 +11,25 @@ import Test.Hspec.Wai.Matcher import Shared.Common.Model.Common.Page import Shared.Common.Model.Common.PageMetadata -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterDTO -import Wizard.Api.Resource.QuestionnaireImporter.QuestionnaireImporterJM () +import Wizard.Api.Resource.Project.Importer.ProjectImporterDTO +import Wizard.Api.Resource.Project.Importer.ProjectImporterJM () import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration -import Wizard.Database.Migration.Development.QuestionnaireImporter.Data.QuestionnaireImporters -import qualified Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterMigration as QI_Migration +import Wizard.Database.Migration.Development.Project.Data.ProjectImporters +import qualified Wizard.Database.Migration.Development.Project.ProjectImporterMigration as ProjectImporterMigration +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import Wizard.Model.Context.AppContext -import Wizard.Service.QuestionnaireImporter.QuestionnaireImporterMapper +import Wizard.Service.Project.Importer.ProjectImporterMapper import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.Common -- ------------------------------------------------------------------------ --- GET /wizard-api/questionnaire-importers/suggestions +-- GET /wizard-api/project-importers/suggestions -- ------------------------------------------------------------------------ list_suggestions_GET :: AppContext -> SpecWith ((), Application) list_suggestions_GET appContext = - describe "GET /wizard-api/questionnaire-importers/suggestions" $ do + describe "GET /wizard-api/project-importers/suggestions" $ do test_200 appContext test_401 appContext test_403 appContext @@ -39,7 +39,7 @@ list_suggestions_GET appContext = -- ---------------------------------------------------- reqMethod = methodGet -reqUrl = "/wizard-api/questionnaire-importers/suggestions" +reqUrl = "/wizard-api/project-importers/suggestions" reqHeadersT reqAuthHeader = [reqAuthHeader] @@ -52,31 +52,31 @@ test_200 appContext = do create_test_200 "HTTP 200 OK" appContext - "/wizard-api/questionnaire-importers/suggestions?enabled=true" + "/wizard-api/project-importers/suggestions?enabled=true" reqAuthHeader ( Page - "questionnaireImporters" + "projectImporters" (PageMetadata 20 2 1 0) - (fmap toDTO [questionnaireImporterBio2, questionnaireImporterExt1]) + (fmap toDTO [projectImporterBio2, projectImporterExt1]) ) create_test_200 "HTTP 200 OK (query 'q')" appContext - "/wizard-api/questionnaire-importers/suggestions?enabled=true&q=QuestionnaireImporterBio" + "/wizard-api/project-importers/suggestions?enabled=true&q=ProjectImporterBio" reqAuthHeader - (Page "questionnaireImporters" (PageMetadata 20 1 1 0) (fmap toDTO [questionnaireImporterBio2])) + (Page "projectImporters" (PageMetadata 20 1 1 0) (fmap toDTO [projectImporterBio2])) create_test_200 "HTTP 200 OK (query 'q' for non-existing)" appContext - "/wizard-api/questionnaire-importers/suggestions?enabled=true&q=Non-existing Questionnaire Report" + "/wizard-api/project-importers/suggestions?enabled=true&q=Non-existing Project Report" reqAuthHeader - (Page "questionnaireImporters" (PageMetadata 20 0 0 0) ([] :: [QuestionnaireImporterDTO])) + (Page "projectImporters" (PageMetadata 20 0 0 0) ([] :: [ProjectImporterDTO])) create_test_200 - "HTTP 200 OK (query 'questionnaireUuid')" + "HTTP 200 OK (query 'projectUuid')" appContext - "/wizard-api/questionnaire-importers/suggestions?enabled=true&questionnaireUuid=af984a75-56e3-49f8-b16f-d6b99599910a" + "/wizard-api/project-importers/suggestions?enabled=true&projectUuid=af984a75-56e3-49f8-b16f-d6b99599910a" reqAuthHeader - (Page "questionnaireImporters" (PageMetadata 20 1 1 0) (fmap toDTO [questionnaireImporterBio2])) + (Page "projectImporters" (PageMetadata 20 1 1 0) (fmap toDTO [projectImporterBio2])) create_test_200 title appContext reqUrl reqAuthHeader expDto = it title $ @@ -89,8 +89,8 @@ create_test_200 title appContext reqUrl reqAuthHeader expDto = let expBody = encode expDto -- AND: Run migrations runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO QI_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO ProjectImporterMigration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -106,4 +106,4 @@ test_401 appContext = createAuthTest reqMethod reqUrl [] reqBody -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "QTN_PERM" +test_403 appContext = createNoPermissionTest appContext reqMethod reqUrl [] reqBody "PRJ_PERM" diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Questionnaire/APISpec.hs deleted file mode 100644 index a0885d748..000000000 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/APISpec.hs +++ /dev/null @@ -1,42 +0,0 @@ -module Wizard.Specs.API.Questionnaire.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Detail_Content_PUT -import Wizard.Specs.API.Questionnaire.Detail_DELETE -import Wizard.Specs.API.Questionnaire.Detail_Documents_GET -import Wizard.Specs.API.Questionnaire.Detail_GET -import Wizard.Specs.API.Questionnaire.Detail_Preview_GET -import Wizard.Specs.API.Questionnaire.Detail_Questionnaire_GET -import Wizard.Specs.API.Questionnaire.Detail_Report_GET -import Wizard.Specs.API.Questionnaire.Detail_Revert_POST -import Wizard.Specs.API.Questionnaire.Detail_Revert_Preview_POST -import Wizard.Specs.API.Questionnaire.Detail_Settings_GET -import Wizard.Specs.API.Questionnaire.Detail_Settings_PUT -import Wizard.Specs.API.Questionnaire.Detail_Share_PUT -import Wizard.Specs.API.Questionnaire.List_GET -import Wizard.Specs.API.Questionnaire.List_POST -import Wizard.Specs.API.Questionnaire.List_POST_CloneUuid -import Wizard.Specs.API.Questionnaire.List_POST_FromTemplate - -questionnaireAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE API Spec" $ do - list_GET appContext - list_POST appContext - list_POST_fromTemplate appContext - list_POST_cloneUuid appContext - detail_GET appContext - detail_questionnaire_GET appContext - detail_share_PUT appContext - detail_preview_GET appContext - detail_settings_GET appContext - detail_settings_PUT appContext - detail_DELETE appContext - detail_content_PUT appContext - detail_report_GET appContext - detail_documents_GET appContext - detail_revert_POST appContext - detail_revert_preview_POST appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Comment/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Questionnaire/Comment/APISpec.hs deleted file mode 100644 index 5e05d6138..000000000 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Comment/APISpec.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Specs.API.Questionnaire.Comment.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Comment.List_GET - -questionnaireCommentAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE COMMENT API Spec" $ - list_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Event/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Questionnaire/Event/APISpec.hs deleted file mode 100644 index 17e29b286..000000000 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Event/APISpec.hs +++ /dev/null @@ -1,14 +0,0 @@ -module Wizard.Specs.API.Questionnaire.Event.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Event.Detail_GET -import Wizard.Specs.API.Questionnaire.Event.List_GET - -questionnaireEventAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE EVENT API Spec" $ do - list_GET appContext - detail_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/ProjectTag/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Questionnaire/ProjectTag/APISpec.hs deleted file mode 100644 index edb656917..000000000 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/ProjectTag/APISpec.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Specs.API.Questionnaire.ProjectTag.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.ProjectTag.List_Suggestions_GET - -questionnaireProjectTagAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE PROJECT TAG API Spec" $ - do list_suggestions_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/User/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Questionnaire/User/APISpec.hs deleted file mode 100644 index ce43b1aa7..000000000 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/User/APISpec.hs +++ /dev/null @@ -1,12 +0,0 @@ -module Wizard.Specs.API.Questionnaire.User.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.User.List_Suggestions_GET - -questionnaireUserAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE USER API Spec" $ - list_suggestions_GET appContext diff --git a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/APISpec.hs b/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/APISpec.hs deleted file mode 100644 index f6c845c0a..000000000 --- a/wizard-server/test/Wizard/Specs/API/Questionnaire/Version/APISpec.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Specs.API.Questionnaire.Version.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.Questionnaire.Version.Detail_DELETE -import Wizard.Specs.API.Questionnaire.Version.Detail_PUT -import Wizard.Specs.API.Questionnaire.Version.List_GET -import Wizard.Specs.API.Questionnaire.Version.List_POST - -questionnaireVersionAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE VERSION API Spec" $ do - list_GET appContext - list_POST appContext - detail_PUT appContext - detail_DELETE appContext diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/APISpec.hs b/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/APISpec.hs deleted file mode 100644 index 034645caa..000000000 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/APISpec.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Specs.API.QuestionnaireAction.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.QuestionnaireAction.Detail_GET -import Wizard.Specs.API.QuestionnaireAction.Detail_PUT -import Wizard.Specs.API.QuestionnaireAction.List_GET -import Wizard.Specs.API.QuestionnaireAction.List_Suggestions_GET - -questionnaireActionAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE ACTION API Spec" $ do - list_GET appContext - list_suggestions_GET appContext - detail_GET appContext - detail_PUT appContext diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Common.hs b/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Common.hs deleted file mode 100644 index f3a10a1ee..000000000 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireAction/Common.hs +++ /dev/null @@ -1,27 +0,0 @@ -module Wizard.Specs.API.QuestionnaireAction.Common where - -import Data.Either (isRight) -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Shared.Common.Api.Resource.Error.ErrorJM () -import Wizard.Database.DAO.QuestionnaireAction.QuestionnaireActionDAO -import Wizard.Model.QuestionnaireAction.QuestionnaireAction - -import Wizard.Specs.Common - --- -------------------------------- --- ASSERTS --- -------------------------------- -assertExistenceOfQuestionnaireActionInDB appContext action = do - eQuestionnaireAction <- runInContextIO (findQuestionnaireActionById action.qaId) appContext - liftIO $ isRight eQuestionnaireAction `shouldBe` True - let (Right actionFromDB) = eQuestionnaireAction - compareQuestionnaireActionDtos actionFromDB action - --- -------------------------------- --- COMPARATORS --- -------------------------------- -compareQuestionnaireActionDtos resDto expDto = do - liftIO $ resDto.name `shouldBe` expDto.name - liftIO $ resDto.enabled `shouldBe` expDto.enabled diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/APISpec.hs b/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/APISpec.hs deleted file mode 100644 index a15d8be3d..000000000 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/APISpec.hs +++ /dev/null @@ -1,18 +0,0 @@ -module Wizard.Specs.API.QuestionnaireImporter.APISpec where - -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Wizard.Specs.API.Common -import Wizard.Specs.API.QuestionnaireImporter.Detail_GET -import Wizard.Specs.API.QuestionnaireImporter.Detail_PUT -import Wizard.Specs.API.QuestionnaireImporter.List_GET -import Wizard.Specs.API.QuestionnaireImporter.List_Suggestions_GET - -questionnaireImporterAPI baseContext appContext = - with (startWebApp baseContext appContext) $ - describe "QUESTIONNAIRE IMPORTER API Spec" $ do - list_GET appContext - list_suggestions_GET appContext - detail_GET appContext - detail_PUT appContext diff --git a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Common.hs b/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Common.hs deleted file mode 100644 index 66b282ef7..000000000 --- a/wizard-server/test/Wizard/Specs/API/QuestionnaireImporter/Common.hs +++ /dev/null @@ -1,27 +0,0 @@ -module Wizard.Specs.API.QuestionnaireImporter.Common where - -import Data.Either (isRight) -import Test.Hspec -import Test.Hspec.Wai hiding (shouldRespondWith) - -import Shared.Common.Api.Resource.Error.ErrorJM () -import Wizard.Database.DAO.QuestionnaireImporter.QuestionnaireImporterDAO -import Wizard.Model.QuestionnaireImporter.QuestionnaireImporter - -import Wizard.Specs.Common - --- -------------------------------- --- ASSERTS --- -------------------------------- -assertExistenceOfQuestionnaireImporterInDB appContext importer = do - eQuestionnaireImporter <- runInContextIO (findQuestionnaireImporterById importer.qiId) appContext - liftIO $ isRight eQuestionnaireImporter `shouldBe` True - let (Right importerFromDB) = eQuestionnaireImporter - compareQuestionnaireImporterDtos importerFromDB importer - --- -------------------------------- --- COMPARATORS --- -------------------------------- -compareQuestionnaireImporterDtos resDto expDto = do - liftIO $ resDto.name `shouldBe` expDto.name - liftIO $ resDto.enabled `shouldBe` expDto.enabled diff --git a/wizard-server/test/Wizard/Specs/API/Submission/List_GET.hs b/wizard-server/test/Wizard/Specs/API/Submission/List_GET.hs index eece3968a..8b2424878 100644 --- a/wizard-server/test/Wizard/Specs/API/Submission/List_GET.hs +++ b/wizard-server/test/Wizard/Specs/API/Submission/List_GET.hs @@ -14,18 +14,18 @@ import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error import Wizard.Api.Resource.Submission.SubmissionJM () import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.Migration.Development.Document.Data.Documents import qualified Wizard.Database.Migration.Development.Document.DocumentMigration as DOC_Migration import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import Wizard.Database.Migration.Development.Submission.Data.Submissions import qualified Wizard.Database.Migration.Development.Submission.SubmissionMigration as SUB_Migration import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import SharedTest.Specs.API.Common import Wizard.Specs.API.Common @@ -56,11 +56,11 @@ reqBody = "" -- ---------------------------------------------------- -- ---------------------------------------------------- test_200 appContext = do - create_test_200 "HTTP 200 OK (Owner, Private)" appContext questionnaire1 [reqAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext questionnaire3 [reqNonAdminAuthHeader] - create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext questionnaire2 [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Owner, Private)" appContext project1 [reqAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleEdit)" appContext project3 [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Non-Owner, VisibleView)" appContext project2 [reqNonAdminAuthHeader] -create_test_200 title appContext qtn authHeader = +create_test_200 title appContext project authHeader = it title $ -- GIVEN: Prepare request do @@ -73,11 +73,11 @@ create_test_200 title appContext qtn authHeader = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO (insertProject project10) appContext runInContextIO DOC_Migration.runMigration appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext runInContextIO SUB_Migration.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -98,11 +98,11 @@ test_403 appContext = create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "View Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "View Project") -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do @@ -115,11 +115,11 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO (insertProject project7) appContext runInContextIO DOC_Migration.runMigration appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/Submission/List_POST.hs b/wizard-server/test/Wizard/Specs/API/Submission/List_POST.hs index 782e9c08d..d43ca8d54 100644 --- a/wizard-server/test/Wizard/Specs/API/Submission/List_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/Submission/List_POST.hs @@ -15,21 +15,21 @@ import Shared.Common.Model.Error.Error import Wizard.Api.Resource.Submission.SubmissionCreateJM () import Wizard.Api.Resource.Submission.SubmissionJM () import Wizard.Database.DAO.Document.DocumentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import Wizard.Database.DAO.Submission.SubmissionDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Database.Migration.Development.Document.Data.Documents import qualified Wizard.Database.Migration.Development.Document.DocumentMigration as DOC_Migration import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration import Wizard.Database.Migration.Development.Submission.Data.Submissions import Wizard.Database.Migration.Development.Tenant.Data.TenantConfigs import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.Submission.SubmissionList import Wizard.Service.Submission.SubmissionMapper @@ -64,15 +64,15 @@ reqBody = encode reqDto -- ---------------------------------------------------- -- ---------------------------------------------------- test_201 appContext = do - create_test_201 "HTTP 201 CREATED (Owner, Private)" appContext questionnaire1 [reqAuthHeader] userAlbertSuggestion + create_test_201 "HTTP 201 CREATED (Owner, Private)" appContext project1 [reqAuthHeader] userAlbertSuggestion create_test_201 "HTTP 201 CREATED (Non-Owner, VisibleEdit)" appContext - questionnaire3 + project3 [reqNonAdminAuthHeader] userNikolaSuggestionDto -create_test_201 title appContext qtn authHeader user = +create_test_201 title appContext project authHeader user = it title $ -- GIVEN: Prepare request do @@ -86,11 +86,11 @@ create_test_201 title appContext qtn authHeader user = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO (insertProject project10) appContext runInContextIO DOC_Migration.runMigration appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext runInContextIO (insertOrUpdateConfigSubmissionService defaultSubmissionService) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -111,17 +111,17 @@ test_403 appContext = do create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, Private)" appContext - questionnaire1 + project1 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") create_test_403 "HTTP 403 FORBIDDEN (Non-Owner, VisibleView)" appContext - questionnaire2 + project2 [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") -create_test_403 title appContext qtn authHeader errorMessage = +create_test_403 title appContext project authHeader errorMessage = it title $ -- GIVEN: Prepare request do @@ -134,11 +134,11 @@ create_test_403 title appContext qtn authHeader errorMessage = -- AND: Run migrations runInContextIO U_Migration.runMigration appContext runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO PRJ_Migration.runMigration appContext + runInContextIO (insertProject project7) appContext runInContextIO DOC_Migration.runMigration appContext runInContextIO (deleteDocumentByUuid doc1.uuid) appContext - runInContextIO (insertDocument (doc1 {questionnaireUuid = Just qtn.uuid})) appContext + runInContextIO (insertDocument (doc1 {projectUuid = Just project.uuid})) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/Tenant/Config/List_PUT.hs b/wizard-server/test/Wizard/Specs/API/Tenant/Config/List_PUT.hs index 4b4838392..fe608f5f9 100644 --- a/wizard-server/test/Wizard/Specs/API/Tenant/Config/List_PUT.hs +++ b/wizard-server/test/Wizard/Specs/API/Tenant/Config/List_PUT.hs @@ -42,7 +42,7 @@ reqUrl = "/wizard-api/tenants/current/config" reqHeaders = [reqAuthHeader, reqCtHeader] -reqDto = defaultTenantConfigChangeDto {questionnaire = editedQuestionnaireChangeDto} :: TenantConfigChangeDTO +reqDto = defaultTenantConfigChangeDto {project = editedProjectChangeDto} :: TenantConfigChangeDTO reqBody = encode reqDto @@ -55,7 +55,7 @@ test_200 appContext = do let expStatus = 200 let expHeaders = resCtHeaderPlain : resCorsHeadersPlain - let expDto = defaultTenantConfig {questionnaire = editedQuestionnaire} :: TenantConfig + let expDto = defaultTenantConfig {project = editedProject} :: TenantConfig -- AND: Run migrations runInContextIO TML_Migration.runMigration appContext runInContextIO (insertOrUpdateConfigSubmissionService defaultSubmissionService) appContext @@ -67,7 +67,7 @@ test_200 appContext = assertResHeaders headers expHeaders compareDtos resBody expDto -- AND: Find result in DB and compare with expectation state - assertExistenceOfTenantConfigQuestionnaireInDB appContext editedQuestionnaire + assertExistenceOfTenantConfigProjectInDB appContext editedProject -- ---------------------------------------------------- -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/API/TypeHint/List_POST.hs b/wizard-server/test/Wizard/Specs/API/TypeHint/List_POST.hs index 910be36e7..80c273542 100644 --- a/wizard-server/test/Wizard/Specs/API/TypeHint/List_POST.hs +++ b/wizard-server/test/Wizard/Specs/API/TypeHint/List_POST.hs @@ -16,12 +16,12 @@ import Shared.Common.Model.Error.Error import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelEditorMigration as KnowledgeModelEditor import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageMigration as KnowledgeModelPackage -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Database.Migration.Development.TypeHint.Data.TypeHints import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext @@ -54,13 +54,13 @@ reqHeadersT authHeader = reqCtHeader : authHeader -- ---------------------------------------------------- -- ---------------------------------------------------- test_200 appContext = do - create_test_200 "HTTP 200 OK (Questionnaire, Owner)" appContext questionnaireTypeHintRequest questionnaire15 [reqAuthHeader] - create_test_200 "HTTP 200 OK (Questionnaire, Editor)" appContext questionnaireTypeHintRequest questionnaire15 [reqNonAdminAuthHeader] - create_test_200 "HTTP 200 OK (Questionnaire, Anonymous)" appContext questionnaireTypeHintRequest questionnaire15AnonymousEdit [] - create_test_200 "HTTP 200 OK (KM Editor-Integration)" appContext kmEditorIntegrationTypeHintRequest questionnaire15 [reqAuthHeader] - create_test_200 "HTTP 200 OK (KM Editor-Question)" appContext kmEditorQuestionTypeHintRequest questionnaire15 [reqAuthHeader] + create_test_200 "HTTP 200 OK (Project, Owner)" appContext projectTypeHintRequest project15 [reqAuthHeader] + create_test_200 "HTTP 200 OK (Project, Editor)" appContext projectTypeHintRequest project15 [reqNonAdminAuthHeader] + create_test_200 "HTTP 200 OK (Project, Anonymous)" appContext projectTypeHintRequest project15AnonymousEdit [] + create_test_200 "HTTP 200 OK (KM Editor-Integration)" appContext kmEditorIntegrationTypeHintRequest project15 [reqAuthHeader] + create_test_200 "HTTP 200 OK (KM Editor-Question)" appContext kmEditorQuestionTypeHintRequest project15 [reqAuthHeader] -create_test_200 title appContext reqDto qtn authHeader = +create_test_200 title appContext reqDto project authHeader = it title $ do -- GIVEN: Prepare request let reqBody = encode reqDto @@ -74,11 +74,11 @@ create_test_200 title appContext reqDto qtn authHeader = runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO KnowledgeModelPackage.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext runInContextIO KnowledgeModelEditor.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO (insertProject project) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation @@ -100,38 +100,38 @@ create_test_401 appContext reqDto = -- ---------------------------------------------------- -- ---------------------------------------------------- test_403 appContext = do - create_test_403_questionnaire - "HTTP 403 FORBIDDEN (Questionnaire, Non-Owner)" + create_test_403_project + "HTTP 403 FORBIDDEN (Project, Non-Owner)" appContext - questionnaireTypeHintRequest - questionnaire15NoPerms + projectTypeHintRequest + project15NoPerms [reqNonAdminAuthHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") - create_test_403_questionnaire - "HTTP 403 FORBIDDEN (Questionnaire, Viewer)" + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") + create_test_403_project + "HTTP 403 FORBIDDEN (Project, Viewer)" appContext - questionnaireTypeHintRequest - questionnaire15 + projectTypeHintRequest + project15 [reqIsaacAuthTokenHeader] - (_ERROR_VALIDATION__FORBIDDEN "Edit Questionnaire") - create_test_403_questionnaire - "HTTP 403 FORBIDDEN (Questionnaire, Anonymous)" + (_ERROR_VALIDATION__FORBIDDEN "Edit Project") + create_test_403_project + "HTTP 403 FORBIDDEN (Project, Anonymous)" appContext - questionnaireTypeHintRequest - questionnaire15 + projectTypeHintRequest + project15 [] _ERROR_SERVICE_USER__MISSING_USER - create_test_403_questionnaire - "HTTP 403 FORBIDDEN (Questionnaire, Anonymous Commenter)" + create_test_403_project + "HTTP 403 FORBIDDEN (Project, Anonymous Commenter)" appContext - questionnaireTypeHintRequest - questionnaire15AnonymousComment + projectTypeHintRequest + project15AnonymousComment [] _ERROR_SERVICE_USER__MISSING_USER create_test_403_knowledge_model_editor appContext kmEditorIntegrationTypeHintRequest create_test_403_knowledge_model_editor appContext kmEditorQuestionTypeHintRequest -create_test_403_questionnaire title appContext reqDto qtn authHeader reason = +create_test_403_project title appContext reqDto project authHeader reason = it title $ do -- GIVEN: Prepare request let reqBody = encode reqDto @@ -145,8 +145,8 @@ create_test_403_questionnaire title appContext reqDto qtn authHeader reason = runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext runInContextIO KnowledgeModelPackage.runMigration appContext - runInContextIO QTN.runMigration appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO PRJ.runMigration appContext + runInContextIO (insertProject project) appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody -- THEN: Compare response with expectation diff --git a/wizard-server/test/Wizard/Specs/API/User/Detail_DELETE.hs b/wizard-server/test/Wizard/Specs/API/User/Detail_DELETE.hs index 68c99e9f7..0d8480a37 100644 --- a/wizard-server/test/Wizard/Specs/API/User/Detail_DELETE.hs +++ b/wizard-server/test/Wizard/Specs/API/User/Detail_DELETE.hs @@ -12,20 +12,20 @@ import Shared.Common.Api.Resource.Error.ErrorJM () import Wizard.Database.Migration.Development.Document.Data.Documents import qualified Wizard.Database.Migration.Development.Document.DocumentMigration as DOC import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Context.AppContext import Wizard.Model.Document.Document -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.User.User -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.ProjectService import SharedTest.Specs.API.Common import Wizard.Specs.API.Common import Wizard.Specs.API.Document.Common -import Wizard.Specs.API.Questionnaire.Common +import Wizard.Specs.API.Project.Common import Wizard.Specs.API.User.Common import Wizard.Specs.Common @@ -63,7 +63,7 @@ test_204 appContext = -- AND: Run migrations runInContextIO U.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext runInContextIO DOC.runMigration appContext -- WHEN: Call API response <- request reqMethod reqUrl reqHeaders reqBody @@ -72,10 +72,10 @@ test_204 appContext = ResponseMatcher {matchHeaders = expHeaders, matchStatus = expStatus, matchBody = bodyEquals ""} response `shouldRespondWith` responseMatcher -- AND: Compare state in DB with expectation - runInContextIO cleanQuestionnaires appContext + runInContextIO cleanProjects appContext assertAbsenceOfUserInDB appContext userAlbert - assertAbsenceOfQuestionnaireInDB appContext questionnaire1 - assertAbsenceOfQuestionnaireInDB appContext questionnaire2 + assertAbsenceOfProjectInDB appContext project1 + assertAbsenceOfProjectInDB appContext project2 assertAbsenceOfDocumentInDB appContext doc3 -- ---------------------------------------------------- diff --git a/wizard-server/test/Wizard/Specs/Service/Document/Common.hs b/wizard-server/test/Wizard/Specs/Service/Document/Common.hs index 24c3cfc0a..0b67d2f3a 100644 --- a/wizard-server/test/Wizard/Specs/Service/Document/Common.hs +++ b/wizard-server/test/Wizard/Specs/Service/Document/Common.hs @@ -8,10 +8,10 @@ import Test.Hspec.Expectations.Pretty compareDocumentContexts resDto expDto = do resDto.document.uuid `shouldBe` expDto.document.uuid resDto.document.name `shouldBe` expDto.document.name - resDto.questionnaire.uuid `shouldBe` expDto.questionnaire.uuid - resDto.questionnaire.name `shouldBe` expDto.questionnaire.name - resDto.questionnaire.replies `shouldBe` expDto.questionnaire.replies - resDto.questionnaire.phaseUuid `shouldBe` expDto.questionnaire.phaseUuid + resDto.project.uuid `shouldBe` expDto.project.uuid + resDto.project.name `shouldBe` expDto.project.name + resDto.project.replies `shouldBe` expDto.project.replies + resDto.project.phaseUuid `shouldBe` expDto.project.phaseUuid resDto.knowledgeModel `shouldBe` expDto.knowledgeModel resDto.report.chapterReports `shouldBe` expDto.report.chapterReports resDto.package `shouldBe` expDto.package diff --git a/wizard-server/test/Wizard/Specs/Service/Document/DocumentServiceSpec.hs b/wizard-server/test/Wizard/Specs/Service/Document/DocumentServiceSpec.hs index efd6056a9..8995b8f9c 100644 --- a/wizard-server/test/Wizard/Specs/Service/Document/DocumentServiceSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Document/DocumentServiceSpec.hs @@ -8,8 +8,8 @@ import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages import Wizard.Database.Migration.Development.Document.Data.Documents import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN +import Wizard.Database.Migration.Development.Project.Data.Projects +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ import qualified Wizard.Database.Migration.Development.User.UserMigration as USR import Wizard.Model.Document.DocumentContext import Wizard.Model.Report.Report @@ -28,10 +28,10 @@ documentIntegrationSpec appContext = -- AND: Run migrations runInContextIO USR.runMigration appContext runInContextIO TML.runMigration appContext - runInContextIO QTN.runMigration appContext + runInContextIO PRJ.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext -- WHEN: - (Right result) <- runInContext (createDocumentContext doc1 germanyKmPackage [] questionnaire1 Nothing) appContext + (Right result) <- runInContext (createDocumentContext doc1 germanyKmPackage [] project1 Nothing) appContext -- THEN: compareDocumentContexts result expectation diff --git a/wizard-server/test/Wizard/Specs/Service/KnowledgeModel/Editor/KnowledgeModelEditorServiceSpec.hs b/wizard-server/test/Wizard/Specs/Service/KnowledgeModel/Editor/KnowledgeModelEditorServiceSpec.hs index 788e1fb64..aa16d06d3 100644 --- a/wizard-server/test/Wizard/Specs/Service/KnowledgeModel/Editor/KnowledgeModelEditorServiceSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/KnowledgeModel/Editor/KnowledgeModelEditorServiceSpec.hs @@ -20,7 +20,7 @@ import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditor import Wizard.Model.KnowledgeModel.Editor.KnowledgeModelEditorState import Wizard.Model.KnowledgeModel.Migration.KnowledgeModelMigration import Wizard.Service.KnowledgeModel.Editor.EditorUtil -import Wizard.Service.KnowledgeModel.Migration.MigrationService +import Wizard.Service.KnowledgeModel.Migration.KnowledgeModelMigrationService import Wizard.Specs.Common diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Collaboration/CollaborationAclSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/Collaboration/ProjectCollaborationAclSpec.hs similarity index 82% rename from wizard-server/test/Wizard/Specs/Service/Questionnaire/Collaboration/CollaborationAclSpec.hs rename to wizard-server/test/Wizard/Specs/Service/Project/Collaboration/ProjectCollaborationAclSpec.hs index 7a8e5dafb..df85c5750 100644 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Collaboration/CollaborationAclSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Project/Collaboration/ProjectCollaborationAclSpec.hs @@ -1,50 +1,50 @@ -module Wizard.Specs.Service.Questionnaire.Collaboration.CollaborationAclSpec where +module Wizard.Specs.Service.Project.Collaboration.ProjectCollaborationAclSpec where import Test.Hspec import Shared.Common.Util.Uuid import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Project import Wizard.Model.User.User import Wizard.Model.Websocket.WebsocketRecord -import Wizard.Service.Questionnaire.Collaboration.CollaborationAcl -import Wizard.Service.Questionnaire.QuestionnaireMapper +import Wizard.Service.Project.Collaboration.ProjectCollaborationAcl +import Wizard.Service.Project.ProjectMapper import WizardLib.Public.Database.Migration.Development.User.Data.UserGroups import WizardLib.Public.Model.User.UserGroup import WizardLib.Public.Model.User.UserGroupMembership import Wizard.Specs.Common -questionnaireCollaborationAclSpec appContext = - describe "Questionnaire Collaboration ACL" $ do +projectCollaborationAclSpec appContext = + describe "Project Collaboration ACL" $ do let permissions = - [ toUserQuestionnairePerm + [ toUserProjectPerm (u' "808d4770-0d38-45b0-a028-0a3ffaafc617") userNikola.uuid ownerPermissions userNikola.tenantUuid - , toUserQuestionnairePerm + , toUserProjectPerm (u' "52e74b8b-ca73-4d6a-a7e1-5c0f34a1819a") userNicolaus.uuid editorPermissions userNicolaus.tenantUuid - , toUserQuestionnairePerm + , toUserProjectPerm (u' "3d60a813-5e54-4fd2-8fe8-5cf3c076bd50") userGalileo.uuid viewerPermissions userGalileo.tenantUuid - , toUserGroupQuestionnairePerm + , toUserGroupProjectPerm (u' "b90b17f4-06a2-40dc-b364-88d8f195c8a0") bioGroup.uuid ownerPermissions bioGroup.tenantUuid - , toUserGroupQuestionnairePerm + , toUserGroupProjectPerm (u' "fcead22d-e453-47a3-84bc-5c29698ab990") plantGroup.uuid editorPermissions plantGroup.tenantUuid - , toUserGroupQuestionnairePerm + , toUserGroupProjectPerm (u' "4e0765e8-f25c-4091-8531-aed2eef161f6") animalGroup.uuid viewerPermissions @@ -73,8 +73,8 @@ questionnaireCollaborationAclSpec appContext = (Just userIsaac.uuid, Just _USER_ROLE_RESEARCHER, []) let (anonymous, anonymousRole, anonymousGroups) = (Nothing, Nothing, []) describe "getPermission" $ do - it "PrivateQuestionnaire RestrictedQuestionnaire" $ do - let fn = getPermission PrivateQuestionnaire RestrictedQuestionnaire permissions + it "PrivateProjectVisibility RestrictedProjectSharing" $ do + let fn = getPermission PrivateProjectVisibility RestrictedProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -84,8 +84,8 @@ questionnaireCollaborationAclSpec appContext = fn userInViewerGroup userInViewerGroupRole userInViewerGroupGroups `shouldBe` ViewerWebsocketPerm fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` NoWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` NoWebsocketPerm - it "VisibleViewQuestionnaire RestrictedQuestionnaire" $ do - let fn = getPermission VisibleViewQuestionnaire RestrictedQuestionnaire permissions + it "VisibleViewProjectVisibility RestrictedProjectSharing" $ do + let fn = getPermission VisibleViewProjectVisibility RestrictedProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -95,8 +95,8 @@ questionnaireCollaborationAclSpec appContext = fn userInViewerGroup userInViewerGroupRole userInViewerGroupGroups `shouldBe` ViewerWebsocketPerm fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` ViewerWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` NoWebsocketPerm - it "VisibleEditQuestionnaire AnyoneWithLinkViewQuestionnaire" $ do - let fn = getPermission VisibleEditQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + it "VisibleEditProjectVisibility AnyoneWithLinkViewProjectSharing" $ do + let fn = getPermission VisibleEditProjectVisibility AnyoneWithLinkViewProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -104,8 +104,8 @@ questionnaireCollaborationAclSpec appContext = fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` EditorWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` ViewerWebsocketPerm -- -------------------- - it "PrivateQuestionnaire AnyoneWithLinkViewQuestionnaire" $ do - let fn = getPermission PrivateQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + it "PrivateProjectVisibility AnyoneWithLinkViewProjectSharing" $ do + let fn = getPermission PrivateProjectVisibility AnyoneWithLinkViewProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -115,8 +115,8 @@ questionnaireCollaborationAclSpec appContext = fn userInViewerGroup userInViewerGroupRole userInViewerGroupGroups `shouldBe` ViewerWebsocketPerm fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` ViewerWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` ViewerWebsocketPerm - it "VisibleViewQuestionnaire AnyoneWithLinkViewQuestionnaire" $ do - let fn = getPermission VisibleViewQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + it "VisibleViewProjectVisibility AnyoneWithLinkViewProjectSharing" $ do + let fn = getPermission VisibleViewProjectVisibility AnyoneWithLinkViewProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -126,8 +126,8 @@ questionnaireCollaborationAclSpec appContext = fn userInViewerGroup userInViewerGroupRole userInViewerGroupGroups `shouldBe` ViewerWebsocketPerm fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` ViewerWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` ViewerWebsocketPerm - it "VisibleEditQuestionnaire AnyoneWithLinkViewQuestionnaire" $ do - let fn = getPermission VisibleEditQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + it "VisibleEditProjectVisibility AnyoneWithLinkViewProjectSharing" $ do + let fn = getPermission VisibleEditProjectVisibility AnyoneWithLinkViewProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -138,8 +138,8 @@ questionnaireCollaborationAclSpec appContext = fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` EditorWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` ViewerWebsocketPerm -- -------------------- - it "PrivateQuestionnaire AnyoneWithLinkEditQuestionnaire" $ do - let fn = getPermission PrivateQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + it "PrivateProjectVisibility AnyoneWithLinkEditProjectSharing" $ do + let fn = getPermission PrivateProjectVisibility AnyoneWithLinkEditProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -149,8 +149,8 @@ questionnaireCollaborationAclSpec appContext = fn userInViewerGroup userInViewerGroupRole userInViewerGroupGroups `shouldBe` EditorWebsocketPerm fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` EditorWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` EditorWebsocketPerm - it "VisibleViewQuestionnaire AnyoneWithLinkEditQuestionnaire" $ do - let fn = getPermission VisibleViewQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + it "VisibleViewProjectVisibility AnyoneWithLinkEditProjectSharing" $ do + let fn = getPermission VisibleViewProjectVisibility AnyoneWithLinkEditProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm @@ -160,8 +160,8 @@ questionnaireCollaborationAclSpec appContext = fn userInViewerGroup userInViewerGroupRole userInViewerGroupGroups `shouldBe` EditorWebsocketPerm fn userWithoutPerm userWithoutPermRole userWithoutPermGroups `shouldBe` EditorWebsocketPerm fn anonymous anonymousRole anonymousGroups `shouldBe` EditorWebsocketPerm - it "VisibleEditQuestionnaire AnyoneWithLinkEditQuestionnaire" $ do - let fn = getPermission VisibleEditQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + it "VisibleEditProjectVisibility AnyoneWithLinkEditProjectSharing" $ do + let fn = getPermission VisibleEditProjectVisibility AnyoneWithLinkEditProjectSharing permissions fn admin adminRole adminGroups `shouldBe` EditorWebsocketPerm fn owner ownerRole ownerGroups `shouldBe` EditorWebsocketPerm fn editor editorRole editorGroups `shouldBe` EditorWebsocketPerm diff --git a/wizard-server/test/Wizard/Specs/Service/Project/Compiler/ProjectCompilerServiceSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/Compiler/ProjectCompilerServiceSpec.hs new file mode 100644 index 000000000..f5b498e28 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/Service/Project/Compiler/ProjectCompilerServiceSpec.hs @@ -0,0 +1,49 @@ +module Wizard.Specs.Service.Project.Compiler.ProjectCompilerServiceSpec where + +import Test.Hspec + +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.ProjectLabels +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Database.Migration.Development.User.Data.Users +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.ProjectContent +import Wizard.Service.Project.Compiler.ProjectCompilerService +import Wizard.Service.Project.Event.ProjectEventMapper + +projectCompilerServiceSpec = + describe "Project Compiler Service" $ + describe "applyEvent" $ do + it "SetReplyEvent" $ + -- GIVEN: + do + let event = toEventList (sre_rQ1Updated' project1Uuid) (Just userAlbert) + -- WHEN: + let updatedProjectCtn = applyEvent project1Ctn event + -- THEN: + updatedProjectCtn.replies `shouldBe` fRepliesWithUpdated + it "ClearReplyEvent" $ + -- GIVEN: + do + let event = toEventList (cre_rQ1' project1Uuid) (Just userAlbert) + -- WHEN: + let updatedProjectCtn = applyEvent project1Ctn event + -- THEN: + updatedProjectCtn.replies `shouldBe` fRepliesWithDeleted + it "SetPhaseEvent" $ + -- GIVEN: + do + let event = toEventList (sphse_2' project1Uuid) (Just userAlbert) + -- WHEN: + let updatedProjectCtn = applyEvent project1Ctn event + -- THEN: + updatedProjectCtn.phaseUuid `shouldBe` (sphse_2 project1Uuid).phaseUuid + it "SetLabelsEvent" $ + -- GIVEN: + do + let event = toEventList (slble_rQ2' project1Uuid) (Just userAlbert) + -- WHEN: + let updatedProjectCtn = applyEvent project1Ctn event + -- THEN: + updatedProjectCtn.labels `shouldBe` fLabelsEdited diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Event/QuestionnaireEventServiceSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/Event/ProjectEventServiceSpec.hs similarity index 62% rename from wizard-server/test/Wizard/Specs/Service/Questionnaire/Event/QuestionnaireEventServiceSpec.hs rename to wizard-server/test/Wizard/Specs/Service/Project/Event/ProjectEventServiceSpec.hs index 5f70a8ad8..76e446384 100644 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Event/QuestionnaireEventServiceSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Project/Event/ProjectEventServiceSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Service.Questionnaire.Event.QuestionnaireEventServiceSpec where +module Wizard.Specs.Service.Project.Event.ProjectEventServiceSpec where import Data.Maybe (fromJust) import Data.Time @@ -9,31 +9,31 @@ import Shared.Common.Constant.Tenant import Shared.Common.Model.Common.Lens import Shared.Common.Util.Date import Shared.Common.Util.Uuid -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireVersions -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Model.Questionnaire.QuestionnaireEventLenses () -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Model.Questionnaire.QuestionnaireVersion -import Wizard.Service.Questionnaire.Event.QuestionnaireEventService +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.ProjectVersions +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.Event.ProjectEvent +import Wizard.Model.Project.Event.ProjectEventLenses () +import Wizard.Model.Project.ProjectReply +import Wizard.Model.Project.Version.ProjectVersion +import Wizard.Service.Project.Event.ProjectEventService -- --------------------------- -- TESTS -- --------------------------- -questionnaireEventServiceSpec = - describe "QuestionnaireEventService" $ +projectEventServiceSpec = + describe "ProjectEventService" $ it "squash" $ -- GIVEN: prepare data do let versions = [version1] let events = [ setCreatedAt q1_event1 (dt'' 2018 1 21 1) - , setCreatedAt (cre_rQ1' questionnaire1Uuid) (dt'' 2018 1 21 2) + , setCreatedAt (cre_rQ1' project1Uuid) (dt'' 2018 1 21 2) , setCreatedAt q1_event2 (dt'' 2018 1 21 3) - , setCreatedAt (sphse_1' questionnaire1Uuid) (dt'' 2018 1 21 4) + , setCreatedAt (sphse_1' project1Uuid) (dt'' 2018 1 21 4) , setCreatedAt q1_event3 (dt'' 2018 1 21 5) - , setCreatedAt (slble_rQ1' questionnaire1Uuid) (dt'' 2018 1 21 6) + , setCreatedAt (slble_rQ1' project1Uuid) (dt'' 2018 1 21 6) , setCreatedAt q2_event1 (dt'' 2018 1 21 7) , setCreatedAt q1_event4 (dt'' 2018 1 21 8) , setCreatedAt q1_event5_nikola (dt'' 2018 1 21 9) @@ -44,9 +44,9 @@ questionnaireEventServiceSpec = ] -- AND: prepare expectation let expEvents = - [ setCreatedAt (cre_rQ1' questionnaire1Uuid) (dt'' 2018 1 21 2) - , setCreatedAt (sphse_1' questionnaire1Uuid) (dt'' 2018 1 21 4) - , setCreatedAt (slble_rQ1' questionnaire1Uuid) (dt'' 2018 1 21 6) + [ setCreatedAt (cre_rQ1' project1Uuid) (dt'' 2018 1 21 2) + , setCreatedAt (sphse_1' project1Uuid) (dt'' 2018 1 21 4) + , setCreatedAt (slble_rQ1' project1Uuid) (dt'' 2018 1 21 6) , setCreatedAt q2_event1 (dt'' 2018 1 21 7) , setCreatedAt q1_event4 (dt'' 2018 1 21 8) , setCreatedAt q1_event5_nikola (dt'' 2018 1 21 9) @@ -63,131 +63,131 @@ questionnaireEventServiceSpec = -- --------------------------- -- EVENTS -- --------------------------- -q1_event1 :: QuestionnaireEvent +q1_event1 :: ProjectEvent q1_event1 = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "4b2a1d62f725" + { uuid = createEventUuid project1Uuid "4b2a1d62f725" , path = "question1" , value = StringReply "question1_value_1" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = albert , createdAt = dt'' 2018 1 21 0 } -q1_event2 :: QuestionnaireEvent +q1_event2 :: ProjectEvent q1_event2 = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "0d2b486b3231" + { uuid = createEventUuid project1Uuid "0d2b486b3231" , path = "question1" , value = StringReply "question1_value_2" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = albert , createdAt = dt'' 2018 1 21 1 } -q1_event3 :: QuestionnaireEvent +q1_event3 :: ProjectEvent q1_event3 = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "04702766ab48" + { uuid = createEventUuid project1Uuid "04702766ab48" , path = "question1" , value = StringReply "question1_value_3" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = albert , createdAt = dt'' 2018 1 21 2 } -q2_event1 :: QuestionnaireEvent +q2_event1 :: ProjectEvent q2_event1 = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "b2eb9e2aacc7" + { uuid = createEventUuid project1Uuid "b2eb9e2aacc7" , path = "question2" , value = StringReply "question2_value_1" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = albert , createdAt = dt'' 2018 1 21 3 } -q1_event4 :: QuestionnaireEvent +q1_event4 :: ProjectEvent q1_event4 = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "4db8b2bd8345" + { uuid = createEventUuid project1Uuid "4db8b2bd8345" , path = "question1" , value = StringReply "question1_value_4" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = albert , createdAt = dt'' 2018 1 21 4 } -q1_event5_nikola :: QuestionnaireEvent +q1_event5_nikola :: ProjectEvent q1_event5_nikola = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "3fa10bf8bc47" + { uuid = createEventUuid project1Uuid "3fa10bf8bc47" , path = "question1" , value = StringReply "question1_value_5" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = nikola , createdAt = dt'' 2018 1 21 5 } -q1_event6_anonymous1 :: QuestionnaireEvent +q1_event6_anonymous1 :: ProjectEvent q1_event6_anonymous1 = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "fbbb6cc6d91c" + { uuid = createEventUuid project1Uuid "fbbb6cc6d91c" , path = "question1" , value = StringReply "question1_value_6" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = Nothing , createdAt = dt'' 2018 1 21 6 } -q1_event7_nikola :: QuestionnaireEvent +q1_event7_nikola :: ProjectEvent q1_event7_nikola = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "fe7cfccc9c50" + { uuid = createEventUuid project1Uuid "fe7cfccc9c50" , path = "question1" , value = StringReply "question1_value_7" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = nikola , createdAt = dt'' 2018 1 21 7 } -q1_event8_nikola :: QuestionnaireEvent +q1_event8_nikola :: ProjectEvent q1_event8_nikola = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "b9c6b1dd31f8" + { uuid = createEventUuid project1Uuid "b9c6b1dd31f8" , path = "question1" , value = StringReply "question1_value_8" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = nikola , createdAt = dt'' 2018 1 21 8 } -q2_event2 :: QuestionnaireEvent +q2_event2 :: ProjectEvent q2_event2 = SetReplyEvent' $ SetReplyEvent - { uuid = createEventUuid questionnaire1Uuid "a023f5ef76f7" + { uuid = createEventUuid project1Uuid "a023f5ef76f7" , path = "question2" , value = StringReply "question2_value_2" - , questionnaireUuid = questionnaire1Uuid + , projectUuid = project1Uuid , tenantUuid = defaultTenantUuid , createdBy = albert , createdAt = UTCTime (fromJust $ fromGregorianValid 2018 1 22) 0 @@ -196,7 +196,7 @@ q2_event2 = -- --------------------------- -- VERSIONS -- --------------------------- -version1 = (questionnaireVersion1 questionnaire1Uuid) {eventUuid = getUuid q1_event7_nikola} +version1 = (projectVersion1 project1Uuid) {eventUuid = getUuid q1_event7_nikola} -- --------------------------- -- USERS diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/ChangeQTypeSanitizerSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/ChangeQTypeSanitizerSpec.hs similarity index 94% rename from wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/ChangeQTypeSanitizerSpec.hs rename to wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/ChangeQTypeSanitizerSpec.hs index 73427cbbd..0af519925 100644 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/ChangeQTypeSanitizerSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/ChangeQTypeSanitizerSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Service.Questionnaire.Migration.Migrator.ChangeQTypeSanitizerSpec where +module Wizard.Specs.Service.Project.Migration.Migrator.ChangeQTypeSanitizerSpec where import Data.Maybe (fromJust) import Data.Time @@ -9,10 +9,10 @@ import Shared.Common.Util.Uuid import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.AnswersAndFollowUpQuestions import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Service.Questionnaire.Migration.Migrator.ChangeQTypeSanitizer +import Wizard.Model.Project.ProjectReply +import Wizard.Service.Project.Migration.Migrator.ChangeQTypeSanitizer import qualified Wizard.Service.User.UserMapper as UM sanitizerSpec = diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/MoveSanitizerSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/MoveSanitizerSpec.hs similarity index 96% rename from wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/MoveSanitizerSpec.hs rename to wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/MoveSanitizerSpec.hs index 6b6ab58bc..9e2f422e7 100644 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/MoveSanitizerSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/MoveSanitizerSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Service.Questionnaire.Migration.Migrator.MoveSanitizerSpec where +module Wizard.Specs.Service.Project.Migration.Migrator.MoveSanitizerSpec where import qualified Data.Map.Strict as M import qualified Data.UUID as U @@ -16,11 +16,11 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Model.KnowledgeModel.Event.KnowledgeModelEvent import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelUtil -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Model.Questionnaire.QuestionnaireUtil +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Model.Project.ProjectUtil import Wizard.Service.KnowledgeModel.Compiler.Compiler -import Wizard.Service.Questionnaire.Migration.Migrator.MoveEventGenerator -import Wizard.Service.Questionnaire.Migration.Migrator.MoveSanitizer +import Wizard.Service.Project.Migration.Migrator.MoveEventGenerator +import Wizard.Service.Project.Migration.Migrator.MoveSanitizer sanitizerSpec = describe "MoveSanitizer" $ do diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/SanitizerSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/SanitizerSpec.hs similarity index 61% rename from wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/SanitizerSpec.hs rename to wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/SanitizerSpec.hs index 648491178..c86c09965 100644 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Migration/Migrator/SanitizerSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Project/Migration/Migrator/SanitizerSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Service.Questionnaire.Migration.Migrator.SanitizerSpec where +module Wizard.Specs.Service.Project.Migration.Migrator.SanitizerSpec where import Test.Hspec hiding (shouldBe, shouldNotBe) import Test.Hspec.Expectations.Pretty @@ -7,18 +7,18 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Questions import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModelLenses -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Model.Questionnaire.QuestionnaireEventList -import Wizard.Model.Questionnaire.QuestionnaireReply -import Wizard.Service.Questionnaire.Migration.Migrator.Sanitizer +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Database.Migration.Development.Project.Data.Projects +import Wizard.Model.Project.Event.ProjectEventList +import Wizard.Model.Project.ProjectReply +import Wizard.Service.Project.Migration.Migrator.Sanitizer import Wizard.Specs.Common sanitizerIntegrationSpec appContext = describe "Sanitizer" $ - describe "sanitizeQuestionnaireEvents" $ + describe "sanitizeProjectEvents" $ it "Succeed" $ -- GIVEN: do @@ -27,19 +27,19 @@ sanitizerIntegrationSpec appContext = putInQuestionsM question1.uuid question1WithNewType' . putInQuestionsM question9.uuid question9WithNewType' $ km1WithQ4 - let qtnEvents = fEventsList questionnaire1Uuid + let projectEvents = fEventsList project1Uuid -- WHEN: - (Right result) <- runInContext (sanitizeQuestionnaireEvents questionnaire1Uuid oldKm newKm qtnEvents) appContext + (Right result) <- runInContext (sanitizeProjectEvents project1Uuid oldKm newKm projectEvents) appContext -- THEN: extractEventPath (result !! 16) `shouldBe` fst rQ1 extractEventPath (result !! 17) `shouldBe` fst rQ9 extractSetEventValue (result !! 17) `shouldBe` (snd rQ9WithNewType).value -extractEventPath :: QuestionnaireEventList -> String +extractEventPath :: ProjectEventList -> String extractEventPath (ClearReplyEventList' event) = event.path extractEventPath (SetReplyEventList' event) = event.path extractEventPath _ = error "Expected ClearReplyEventList' or SetReplyEventList'" -extractSetEventValue :: QuestionnaireEventList -> ReplyValue +extractSetEventValue :: ProjectEventList -> ReplyValue extractSetEventValue (SetReplyEventList' event) = event.value extractSetEventValue _ = error "Expected SetReplyEventList'" diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireAclSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/ProjectAclSpec.hs similarity index 85% rename from wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireAclSpec.hs rename to wizard-server/test/Wizard/Specs/Service/Project/ProjectAclSpec.hs index dad3c89b8..dddfc6316 100644 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireAclSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Project/ProjectAclSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Service.Questionnaire.QuestionnaireAclSpec where +module Wizard.Specs.Service.Project.ProjectAclSpec where import Data.Foldable (traverse_) import Test.Hspec @@ -8,17 +8,17 @@ import Shared.DocumentTemplate.Database.DAO.DocumentTemplate.DocumentTemplateDAO import Shared.DocumentTemplate.Database.Migration.Development.DocumentTemplate.Data.DocumentTemplates import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectPermDAO import Wizard.Database.DAO.User.UserDAO -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Model.Questionnaire.QuestionnairePerm +import Wizard.Model.Project.Acl.ProjectPerm +import Wizard.Model.Project.Project import Wizard.Model.User.User -import Wizard.Service.Questionnaire.QuestionnaireAcl -import Wizard.Service.Questionnaire.QuestionnaireMapper +import Wizard.Service.Project.ProjectAcl +import Wizard.Service.Project.ProjectMapper import qualified Wizard.Service.User.UserMapper as U_Mapper import WizardLib.Public.Database.DAO.User.UserGroupDAO import WizardLib.Public.Database.DAO.User.UserGroupMembershipDAO @@ -27,35 +27,35 @@ import WizardLib.Public.Model.User.UserGroup import Wizard.Specs.Common -questionnaireAclSpec appContext = - describe "Questionnaire ACL" $ do +projectAclSpec appContext = + describe "Project ACL" $ do let permissions = - [ toUserQuestionnairePerm + [ toUserProjectPerm (u' "808d4770-0d38-45b0-a028-0a3ffaafc617") userNikola.uuid ownerPermissions userNikola.tenantUuid - , toUserQuestionnairePerm + , toUserProjectPerm (u' "52e74b8b-ca73-4d6a-a7e1-5c0f34a1819a") userNicolaus.uuid editorPermissions userNicolaus.tenantUuid - , toUserQuestionnairePerm + , toUserProjectPerm (u' "3d60a813-5e54-4fd2-8fe8-5cf3c076bd50") userGalileo.uuid viewerPermissions userGalileo.tenantUuid - , toUserGroupQuestionnairePerm + , toUserGroupProjectPerm (u' "b90b17f4-06a2-40dc-b364-88d8f195c8a0") bioGroup.uuid ownerPermissions bioGroup.tenantUuid - , toUserGroupQuestionnairePerm + , toUserGroupProjectPerm (u' "fcead22d-e453-47a3-84bc-5c29698ab990") plantGroup.uuid editorPermissions plantGroup.tenantUuid - , toUserGroupQuestionnairePerm + , toUserGroupProjectPerm (u' "4e0765e8-f25c-4091-8531-aed2eef161f6") animalGroup.uuid viewerPermissions @@ -71,12 +71,12 @@ questionnaireAclSpec appContext = let userInViewerGroupCtx = makeContext userIsaac let userWithoutPermCtx = makeContext userIsaac let anonymousCtx = appContext {currentUser = Nothing} - it "checkViewPermissionToQtn" $ do + it "checkViewPermissionToProject" $ do runLocalTestMigration appContext let fn1 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn PrivateQuestionnaire RestrictedQuestionnaire permissions + checkViewPermissionToProject PrivateProjectVisibility RestrictedProjectSharing permissions shouldSucceed adminCtx (fn1 []) shouldSucceed ownerCtx (fn1 []) shouldSucceed editorCtx (fn1 []) @@ -89,7 +89,7 @@ questionnaireAclSpec appContext = let fn2 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn VisibleViewQuestionnaire RestrictedQuestionnaire permissions + checkViewPermissionToProject VisibleViewProjectVisibility RestrictedProjectSharing permissions shouldSucceed adminCtx (fn2 []) shouldSucceed ownerCtx (fn2 []) shouldSucceed editorCtx (fn2 []) @@ -102,7 +102,7 @@ questionnaireAclSpec appContext = let fn3 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn VisibleEditQuestionnaire RestrictedQuestionnaire permissions + checkViewPermissionToProject VisibleEditProjectVisibility RestrictedProjectSharing permissions shouldSucceed adminCtx (fn3 []) shouldSucceed ownerCtx (fn3 []) shouldSucceed editorCtx (fn3 []) @@ -116,7 +116,7 @@ questionnaireAclSpec appContext = let fn4 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn PrivateQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + checkViewPermissionToProject PrivateProjectVisibility AnyoneWithLinkViewProjectSharing permissions shouldSucceed adminCtx (fn4 []) shouldSucceed ownerCtx (fn4 []) shouldSucceed editorCtx (fn4 []) @@ -129,7 +129,7 @@ questionnaireAclSpec appContext = let fn5 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn VisibleViewQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + checkViewPermissionToProject VisibleViewProjectVisibility AnyoneWithLinkViewProjectSharing permissions shouldSucceed adminCtx (fn5 []) shouldSucceed ownerCtx (fn5 []) shouldSucceed editorCtx (fn5 []) @@ -142,7 +142,7 @@ questionnaireAclSpec appContext = let fn6 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn VisibleEditQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + checkViewPermissionToProject VisibleEditProjectVisibility AnyoneWithLinkViewProjectSharing permissions shouldSucceed adminCtx (fn6 []) shouldSucceed ownerCtx (fn6 []) shouldSucceed editorCtx (fn6 []) @@ -156,7 +156,7 @@ questionnaireAclSpec appContext = let fn7 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn PrivateQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + checkViewPermissionToProject PrivateProjectVisibility AnyoneWithLinkEditProjectSharing permissions shouldSucceed adminCtx (fn7 []) shouldSucceed ownerCtx (fn7 []) shouldSucceed editorCtx (fn7 []) @@ -169,7 +169,7 @@ questionnaireAclSpec appContext = let fn8 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn VisibleViewQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + checkViewPermissionToProject VisibleViewProjectVisibility AnyoneWithLinkEditProjectSharing permissions shouldSucceed adminCtx (fn8 []) shouldSucceed ownerCtx (fn8 []) shouldSucceed editorCtx (fn8 []) @@ -182,7 +182,7 @@ questionnaireAclSpec appContext = let fn9 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkViewPermissionToQtn VisibleEditQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + checkViewPermissionToProject VisibleEditProjectVisibility AnyoneWithLinkEditProjectSharing permissions shouldSucceed adminCtx (fn9 []) shouldSucceed ownerCtx (fn9 []) shouldSucceed editorCtx (fn9 []) @@ -192,12 +192,12 @@ questionnaireAclSpec appContext = shouldSucceed userInViewerGroupCtx (fn9 [userIsaacAnimalGroupMembership]) shouldSucceed userWithoutPermCtx (fn9 []) shouldSucceed anonymousCtx (fn9 []) - it "checkOwnerPermissionToQtn" $ do + it "checkOwnerPermissionToProject" $ do runLocalTestMigration appContext let fn1 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkOwnerPermissionToQtn PrivateQuestionnaire permissions + checkOwnerPermissionToProject PrivateProjectVisibility permissions shouldSucceed adminCtx (fn1 []) shouldSucceed ownerCtx (fn1 []) shouldFailed editorCtx (fn1 []) @@ -210,7 +210,7 @@ questionnaireAclSpec appContext = let fn2 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkOwnerPermissionToQtn VisibleViewQuestionnaire permissions + checkOwnerPermissionToProject VisibleViewProjectVisibility permissions shouldSucceed adminCtx (fn2 []) shouldSucceed ownerCtx (fn2 []) shouldFailed editorCtx (fn2 []) @@ -223,7 +223,7 @@ questionnaireAclSpec appContext = let fn3 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkOwnerPermissionToQtn VisibleEditQuestionnaire permissions + checkOwnerPermissionToProject VisibleEditProjectVisibility permissions shouldSucceed adminCtx (fn3 []) shouldSucceed ownerCtx (fn3 []) shouldFailed editorCtx (fn3 []) @@ -233,12 +233,12 @@ questionnaireAclSpec appContext = shouldFailed userInViewerGroupCtx (fn3 [userIsaacAnimalGroupMembership]) shouldFailed userWithoutPermCtx (fn3 []) shouldFailed anonymousCtx (fn3 []) - it "checkEditPermissionToQtn" $ do + it "checkEditPermissionToProject" $ do runLocalTestMigration appContext let fn1 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn PrivateQuestionnaire RestrictedQuestionnaire permissions + checkEditPermissionToProject PrivateProjectVisibility RestrictedProjectSharing permissions shouldSucceed adminCtx (fn1 []) shouldSucceed ownerCtx (fn1 []) shouldSucceed editorCtx (fn1 []) @@ -251,7 +251,7 @@ questionnaireAclSpec appContext = let fn2 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn VisibleViewQuestionnaire RestrictedQuestionnaire permissions + checkEditPermissionToProject VisibleViewProjectVisibility RestrictedProjectSharing permissions shouldSucceed adminCtx (fn2 []) shouldSucceed ownerCtx (fn2 []) shouldSucceed editorCtx (fn2 []) @@ -264,7 +264,7 @@ questionnaireAclSpec appContext = let fn3 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn VisibleEditQuestionnaire RestrictedQuestionnaire permissions + checkEditPermissionToProject VisibleEditProjectVisibility RestrictedProjectSharing permissions shouldSucceed adminCtx (fn3 []) shouldSucceed ownerCtx (fn3 []) shouldSucceed editorCtx (fn3 []) @@ -278,7 +278,7 @@ questionnaireAclSpec appContext = let fn4 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn PrivateQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + checkEditPermissionToProject PrivateProjectVisibility AnyoneWithLinkViewProjectSharing permissions shouldSucceed adminCtx (fn4 []) shouldSucceed ownerCtx (fn4 []) shouldSucceed editorCtx (fn4 []) @@ -291,7 +291,7 @@ questionnaireAclSpec appContext = let fn5 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn VisibleViewQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + checkEditPermissionToProject VisibleViewProjectVisibility AnyoneWithLinkViewProjectSharing permissions shouldSucceed adminCtx (fn5 []) shouldSucceed ownerCtx (fn5 []) shouldSucceed editorCtx (fn5 []) @@ -304,7 +304,7 @@ questionnaireAclSpec appContext = let fn6 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn VisibleEditQuestionnaire AnyoneWithLinkViewQuestionnaire permissions + checkEditPermissionToProject VisibleEditProjectVisibility AnyoneWithLinkViewProjectSharing permissions shouldSucceed adminCtx (fn6 []) shouldSucceed ownerCtx (fn6 []) shouldSucceed editorCtx (fn6 []) @@ -318,7 +318,7 @@ questionnaireAclSpec appContext = let fn7 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn PrivateQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + checkEditPermissionToProject PrivateProjectVisibility AnyoneWithLinkEditProjectSharing permissions shouldSucceed adminCtx (fn7 []) shouldSucceed ownerCtx (fn7 []) shouldSucceed editorCtx (fn7 []) @@ -331,7 +331,7 @@ questionnaireAclSpec appContext = let fn8 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn VisibleViewQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + checkEditPermissionToProject VisibleViewProjectVisibility AnyoneWithLinkEditProjectSharing permissions shouldSucceed adminCtx (fn8 []) shouldSucceed ownerCtx (fn8 []) shouldSucceed editorCtx (fn8 []) @@ -344,7 +344,7 @@ questionnaireAclSpec appContext = let fn9 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkEditPermissionToQtn VisibleEditQuestionnaire AnyoneWithLinkEditQuestionnaire permissions + checkEditPermissionToProject VisibleEditProjectVisibility AnyoneWithLinkEditProjectSharing permissions shouldSucceed adminCtx (fn9 []) shouldSucceed ownerCtx (fn9 []) shouldSucceed editorCtx (fn9 []) @@ -354,12 +354,12 @@ questionnaireAclSpec appContext = shouldSucceed userInViewerGroupCtx (fn9 [userIsaacAnimalGroupMembership]) shouldSucceed userWithoutPermCtx (fn9 []) shouldSucceed anonymousCtx (fn9 []) - it "checkMigrationPermissionToQtn" $ do + it "checkMigrationPermissionToProject" $ do runLocalTestMigration appContext let fn1 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkMigrationPermissionToQtn PrivateQuestionnaire permissions + checkMigrationPermissionToProject PrivateProjectVisibility permissions shouldSucceed adminCtx (fn1 []) shouldSucceed ownerCtx (fn1 []) shouldSucceed editorCtx (fn1 []) @@ -372,7 +372,7 @@ questionnaireAclSpec appContext = let fn2 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkMigrationPermissionToQtn VisibleViewQuestionnaire permissions + checkMigrationPermissionToProject VisibleViewProjectVisibility permissions shouldSucceed adminCtx (fn2 []) shouldSucceed ownerCtx (fn2 []) shouldSucceed editorCtx (fn2 []) @@ -385,7 +385,7 @@ questionnaireAclSpec appContext = let fn3 memberships = do deleteUserGroupMemberships traverse_ insertUserGroupMembership memberships - checkMigrationPermissionToQtn VisibleEditQuestionnaire permissions + checkMigrationPermissionToProject VisibleEditProjectVisibility permissions shouldSucceed adminCtx (fn3 []) shouldSucceed ownerCtx (fn3 []) shouldSucceed editorCtx (fn3 []) @@ -397,11 +397,11 @@ questionnaireAclSpec appContext = shouldFailed anonymousCtx (fn3 []) runLocalTestMigration appContext = do - runInContext deleteQuestionnairePerms appContext - runInContext deleteQuestionnaires appContext + runInContext deleteProjectPerms appContext + runInContext deleteProjects appContext runInContext (insertPackage germanyKmPackage) appContext runInContext (insertDocumentTemplate wizardDocumentTemplate) appContext - runInContext (insertQuestionnaire questionnaire1) appContext + runInContext (insertProject project1) appContext runInContext (insertUser userIsaac) appContext runInContext (insertUserGroup bioGroup) appContext runInContext (insertUserGroup plantGroup) appContext diff --git a/wizard-server/test/Wizard/Specs/Service/Project/ProjectServiceSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/ProjectServiceSpec.hs new file mode 100644 index 000000000..c7b7dc00e --- /dev/null +++ b/wizard-server/test/Wizard/Specs/Service/Project/ProjectServiceSpec.hs @@ -0,0 +1,51 @@ +module Wizard.Specs.Service.Project.ProjectServiceSpec where + +import Control.Monad.Reader (liftIO) +import Test.Hspec + +import Wizard.Database.DAO.Project.ProjectDAO +import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration +import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageMigration as PKG_Migration +import Wizard.Database.Migration.Development.Project.Data.ProjectCommands +import qualified Wizard.Database.Migration.Development.Project.ProjectMigration as PRJ_Migration +import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration +import Wizard.Model.Project.Project +import Wizard.Service.Project.ProjectService +import WizardLib.Public.Model.PersistentCommand.Project.CreateProjectCommand + +import Wizard.Specs.API.Common +import Wizard.Specs.Common + +projectServiceSpec appContext = + describe "Project Service" $ do + it "createProjectsFromCommands" $ + -- GIVEN: + do + runInContextIO U_Migration.runMigration appContext + runInContextIO PKG_Migration.runMigration appContext + runInContextIO TML_Migration.runMigration appContext + -- WHEN: + (Right ()) <- runInContext (createProjectsFromCommands [command1, command2]) appContext + -- THEN: + (Right projects) <- runInContext findProjects appContext + length projects `shouldBe` 2 + compareProject (head projects) command1 + compareProject (projects !! 1) command2 + + it "cleanProjects works" $ + -- GIVEN: + do + runInContextIO TML_Migration.runMigration appContext + runInContextIO PRJ_Migration.runMigration appContext + assertCountInDB findProjects appContext 3 + -- WHEN: + (Right ()) <- runInContext cleanProjects appContext + -- THEN: + assertCountInDB findProjects appContext 2 + +compareProject :: Project -> CreateProjectCommand -> IO () +compareProject project command = liftIO $ do + project.name `shouldBe` command.name + project.knowledgeModelPackageId `shouldBe` command.knowledgeModelPackageId + project.documentTemplateId `shouldBe` command.documentTemplateId + length project.permissions `shouldBe` length command.emails diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireValidationSpec.hs b/wizard-server/test/Wizard/Specs/Service/Project/ProjectValidationSpec.hs similarity index 76% rename from wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireValidationSpec.hs rename to wizard-server/test/Wizard/Specs/Service/Project/ProjectValidationSpec.hs index 930880514..84fcaaffe 100644 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireValidationSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Project/ProjectValidationSpec.hs @@ -1,14 +1,14 @@ -module Wizard.Specs.Service.Questionnaire.QuestionnaireValidationSpec where +module Wizard.Specs.Service.Project.ProjectValidationSpec where import qualified Data.Map.Strict as M import Test.Hspec import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error -import Wizard.Service.Questionnaire.QuestionnaireValidation +import Wizard.Service.Project.ProjectValidation -questionnaireValidationSpec = - describe "QuestionnaireValidation" $ do +projectValidationSpec = + describe "ProjectValidation" $ do it "isValidProjectTag" $ do let validationError word = Just $ ValidationError [] (M.singleton "tags" [_ERROR_VALIDATION__FORBIDDEN_CHARACTERS word]) diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Compiler/CompilerServiceSpec.hs b/wizard-server/test/Wizard/Specs/Service/Questionnaire/Compiler/CompilerServiceSpec.hs deleted file mode 100644 index b896ec5d8..000000000 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/Compiler/CompilerServiceSpec.hs +++ /dev/null @@ -1,49 +0,0 @@ -module Wizard.Specs.Service.Questionnaire.Compiler.CompilerServiceSpec where - -import Test.Hspec - -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireLabels -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires -import Wizard.Database.Migration.Development.User.Data.Users -import Wizard.Model.Questionnaire.QuestionnaireContent -import Wizard.Model.Questionnaire.QuestionnaireEvent -import Wizard.Service.Questionnaire.Compiler.CompilerService -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper - -questionnaireCompilerServiceSpec = - describe "Questionnaire Compiler Service" $ - describe "applyEvent" $ do - it "SetReplyEvent" $ - -- GIVEN: - do - let event = toEventList (sre_rQ1Updated' questionnaire1Uuid) (Just userAlbert) - -- WHEN: - let updatedQtnCtn = applyEvent questionnaire1Ctn event - -- THEN: - updatedQtnCtn.replies `shouldBe` fRepliesWithUpdated - it "ClearReplyEvent" $ - -- GIVEN: - do - let event = toEventList (cre_rQ1' questionnaire1Uuid) (Just userAlbert) - -- WHEN: - let updatedQtnCtn = applyEvent questionnaire1Ctn event - -- THEN: - updatedQtnCtn.replies `shouldBe` fRepliesWithDeleted - it "SetPhaseEvent" $ - -- GIVEN: - do - let event = toEventList (sphse_2' questionnaire1Uuid) (Just userAlbert) - -- WHEN: - let updatedQtnCtn = applyEvent questionnaire1Ctn event - -- THEN: - updatedQtnCtn.phaseUuid `shouldBe` (sphse_2 questionnaire1Uuid).phaseUuid - it "SetLabelsEvent" $ - -- GIVEN: - do - let event = toEventList (slble_rQ2' questionnaire1Uuid) (Just userAlbert) - -- WHEN: - let updatedQtnCtn = applyEvent questionnaire1Ctn event - -- THEN: - updatedQtnCtn.labels `shouldBe` fLabelsEdited diff --git a/wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireServiceSpec.hs b/wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireServiceSpec.hs deleted file mode 100644 index 89c58e89a..000000000 --- a/wizard-server/test/Wizard/Specs/Service/Questionnaire/QuestionnaireServiceSpec.hs +++ /dev/null @@ -1,51 +0,0 @@ -module Wizard.Specs.Service.Questionnaire.QuestionnaireServiceSpec where - -import Control.Monad.Reader (liftIO) -import Test.Hspec - -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageMigration as PKG_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireCommands -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireMigration as QTN_Migration -import qualified Wizard.Database.Migration.Development.User.UserMigration as U_Migration -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.QuestionnaireService -import WizardLib.Public.Model.PersistentCommand.Questionnaire.CreateQuestionnaireCommand - -import Wizard.Specs.API.Common -import Wizard.Specs.Common - -questionnaireServiceSpec appContext = - describe "Questionnaire Service" $ do - it "createQuestionnairesFromCommands" $ - -- GIVEN: - do - runInContextIO U_Migration.runMigration appContext - runInContextIO PKG_Migration.runMigration appContext - runInContextIO TML_Migration.runMigration appContext - -- WHEN: - (Right ()) <- runInContext (createQuestionnairesFromCommands [command1, command2]) appContext - -- THEN: - (Right questionnaires) <- runInContext findQuestionnaires appContext - length questionnaires `shouldBe` 2 - compareQuestionnaire (head questionnaires) command1 - compareQuestionnaire (questionnaires !! 1) command2 - - it "cleanQuestionnaires works" $ - -- GIVEN: - do - runInContextIO TML_Migration.runMigration appContext - runInContextIO QTN_Migration.runMigration appContext - assertCountInDB findQuestionnaires appContext 3 - -- WHEN: - (Right ()) <- runInContext cleanQuestionnaires appContext - -- THEN: - assertCountInDB findQuestionnaires appContext 2 - -compareQuestionnaire :: Questionnaire -> CreateQuestionnaireCommand -> IO () -compareQuestionnaire questionnaire command = liftIO $ do - questionnaire.name `shouldBe` command.name - questionnaire.knowledgeModelPackageId `shouldBe` command.knowledgeModelPackageId - questionnaire.documentTemplateId `shouldBe` command.documentTemplateId - length questionnaire.permissions `shouldBe` length command.emails diff --git a/wizard-server/test/Wizard/Specs/Service/Report/ReportGeneratorSpec.hs b/wizard-server/test/Wizard/Specs/Service/Report/ReportGeneratorSpec.hs index ca1ac1b3a..1b1616c2b 100644 --- a/wizard-server/test/Wizard/Specs/Service/Report/ReportGeneratorSpec.hs +++ b/wizard-server/test/Wizard/Specs/Service/Report/ReportGeneratorSpec.hs @@ -7,10 +7,10 @@ import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data. import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.KnowledgeModels import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Phases import Shared.KnowledgeModel.Model.KnowledgeModel.KnowledgeModel -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireReplies -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectReplies +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.Report.Data.Reports -import Wizard.Model.Questionnaire.QuestionnaireContent +import Wizard.Model.Project.ProjectContent import Wizard.Service.Report.ReportGenerator reportGeneratorSpec = @@ -27,7 +27,7 @@ createComputeChapterReportTest number chapter expectation = do let requiredPhaseUuidUuid = Just $ phase1.uuid let km = km1WithQ4 - let rs = M.fromList $ unused_rQ2_aYes_fuQ1_aYes_fuq2 : M.toList questionnaire1Ctn.replies + let rs = M.fromList $ unused_rQ2_aYes_fuQ1_aYes_fuq2 : M.toList project1Ctn.replies -- WHEN: let result = computeChapterReport requiredPhaseUuidUuid km rs chapter -- THEN @@ -39,7 +39,7 @@ createComputeTotalReportTest number expectation = do let requiredPhaseUuidUuid = Just $ phase1.uuid let km = km1WithQ4 - let rs = M.fromList $ unused_rQ2_aYes_fuQ1_aYes_fuq2 : M.toList questionnaire1Ctn.replies + let rs = M.fromList $ unused_rQ2_aYes_fuQ1_aYes_fuq2 : M.toList project1Ctn.replies -- WHEN: let result = computeTotalReport requiredPhaseUuidUuid km rs -- THEN diff --git a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/Common.hs b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/Common.hs index 707005044..4fe4e648b 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/Common.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/Common.hs @@ -13,7 +13,7 @@ import Shared.Common.Util.String import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO import Wizard.Cache.KnowledgeModelEditorWebsocketCache import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO @@ -86,8 +86,8 @@ connectTestWebsocketUsers appContext bUuid = read_SetUserList connection expConnectionCount = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerKnowledgeModelEditorActionDTO) - let (Right (Success_ServerActionDTO (SetUserList_ServerKnowledgeModelEditorActionDTO resConnection))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerKnowledgeModelEditorMessageDTO) + let (Right (Success_ServerActionDTO (SetUserList_ServerKnowledgeModelEditorMessageDTO resConnection))) = eResult length resConnection `shouldBe` expConnectionCount read_Error connection expError = do diff --git a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/GeneralSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/GeneralSpec.hs index 97aa10197..d05fb1253 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/GeneralSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/GeneralSpec.hs @@ -81,7 +81,7 @@ test404 appContext = do read_Error c1 expError -- AND: Close sockets closeSockets [s1] - it "WS 404 NOT FOUND - questionnaire was deleted" $ + it "WS 404 NOT FOUND - project was deleted" $ -- GIVEN: Prepare database do let editor = amsterdamKnowledgeModelEditor diff --git a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetEventSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetEventSpec.hs index c5fec5c17..4e839cc4e 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetEventSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetEventSpec.hs @@ -5,7 +5,7 @@ import Network.WebSockets import Test.Hspec hiding (shouldBe) import Test.Hspec.Expectations.Pretty -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorEvents import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditors @@ -44,11 +44,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_SetReply connection replyDto = do - let reqDto = SetContent_ClientKnowledgeModelEditorActionDTO replyDto + let reqDto = SetContent_ClientKnowledgeModelEditorMessageDTO replyDto sendMessage connection reqDto read_SetReply connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerKnowledgeModelEditorActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerKnowledgeModelEditorActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerKnowledgeModelEditorMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerKnowledgeModelEditorMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetRepliesSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetRepliesSpec.hs index 5b6c20a2d..4e4f3ebfc 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetRepliesSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/KnowledgeModelEditor/Detail/SetRepliesSpec.hs @@ -5,7 +5,7 @@ import Network.WebSockets import Test.Hspec hiding (shouldBe) import Test.Hspec.Expectations.Pretty -import Wizard.Api.Resource.Websocket.KnowledgeModelEditorActionDTO +import Wizard.Api.Resource.Websocket.KnowledgeModelEditorMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditorEvents import Wizard.Database.Migration.Development.KnowledgeModel.Data.Editor.KnowledgeModelEditors @@ -44,11 +44,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_SetReplies connection replyDto = do - let reqDto = SetReplies_ClientKnowledgeModelEditorActionDTO replyDto + let reqDto = SetReplies_ClientKnowledgeModelEditorMessageDTO replyDto sendMessage connection reqDto read_SetReplies connection expRepliesDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerKnowledgeModelEditorActionDTO) - let (Right (Success_ServerActionDTO (SetReplies_ServerKnowledgeModelEditorActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerKnowledgeModelEditorMessageDTO) + let (Right (Success_ServerActionDTO (SetReplies_ServerKnowledgeModelEditorMessageDTO replyDto))) = eResult expRepliesDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/AddCommentSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/AddCommentSpec.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/AddCommentSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/AddCommentSpec.hs index 640ebab60..bfa34a66a 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/AddCommentSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/AddCommentSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.AddCommentSpec where +module Wizard.Specs.Websocket.Project.Detail.AddCommentSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,18 +9,18 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common addCommentSpec appContext = describe "addComment" $ test200 appContext @@ -31,16 +31,15 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: write_AddComment c1 acche_rQ2_t1_1' -- THEN: @@ -57,11 +56,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_AddComment connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_AddComment connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/AssignCommentThreadSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/AssignCommentThreadSpec.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/AssignCommentThreadSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/AssignCommentThreadSpec.hs index da04ed454..4e116f137 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/AssignCommentThreadSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/AssignCommentThreadSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.AssignCommentThreadSpec where +module Wizard.Specs.Websocket.Project.Detail.AssignCommentThreadSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,18 +9,18 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common assignCommentThreadSpec appContext = describe "assignCommentThread" $ test200 appContext @@ -31,16 +31,15 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: write_AssignCommentThread c1 asche_rQ1_t1' -- THEN: @@ -57,11 +56,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_AssignCommentThread connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_AssignCommentThread connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ClearReplySpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ClearReplySpec.hs similarity index 62% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ClearReplySpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ClearReplySpec.hs index de0c3202e..562a97386 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ClearReplySpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ClearReplySpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.ClearReplySpec where +module Wizard.Specs.Websocket.Project.Detail.ClearReplySpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,20 +9,20 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common clearReplySpec appContext = describe "clearReply" $ test200 appContext @@ -33,22 +33,21 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: - write_ClearReply c1 (toEventChangeDTO (cre_rQ1' questionnaire10Uuid)) + write_ClearReply c1 (toEventChangeDTO (cre_rQ1' project10Uuid)) -- THEN: - read_ClearReply c1 (toEventDTO (cre_rQ1' questionnaire10Uuid) (Just userAlbert)) - read_ClearReply c2 (toEventDTO (cre_rQ1' questionnaire10Uuid) (Just userAlbert)) - read_ClearReply c3 (toEventDTO (cre_rQ1' questionnaire10Uuid) (Just userAlbert)) + read_ClearReply c1 (toEventDTO (cre_rQ1' project10Uuid) (Just userAlbert)) + read_ClearReply c2 (toEventDTO (cre_rQ1' project10Uuid) (Just userAlbert)) + read_ClearReply c3 (toEventDTO (cre_rQ1' project10Uuid) (Just userAlbert)) nothingWasReceived c4 nothingWasReceived c5 nothingWasReceived c6 @@ -59,11 +58,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_ClearReply connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_ClearReply connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/Common.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/Common.hs similarity index 79% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/Common.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/Common.hs index 6ef1386be..05c0bd820 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/Common.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/Common.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.Common where +module Wizard.Specs.Websocket.Project.Detail.Common where import qualified Control.Exception.Base as E import Data.Aeson @@ -21,16 +21,16 @@ import Shared.Common.Util.String import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Cache.QuestionnaireWebsocketCache -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Cache.ProjectWebsocketCache +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Config.ServerConfig import Wizard.Model.Context.AppContext import Wizard.Model.Websocket.WebsocketRecord -import Wizard.Service.Questionnaire.Collaboration.CollaborationService +import Wizard.Service.Project.Collaboration.ProjectCollaborationService import Wizard.Specs.API.Common import Wizard.Specs.Common @@ -46,41 +46,41 @@ assertCountOfWebsocketConnection appContext expCount = do -- -------------------------------- -- URL -- -------------------------------- -reqUrlT qtnUuid mUser = +reqUrlT projectUuid mUser = let suffix = case mUser of Just user -> "?Authorization=Bearer%20" ++ user Nothing -> "" - in f' "/wizard-api/questionnaires/%s/websocket%s" [U.toString qtnUuid, suffix] + in f' "/wizard-api/projects/%s/websocket%s" [U.toString projectUuid, suffix] -- -------------------------------- -- DATABASE -- -------------------------------- -insertQuestionnaireAndUsers appContext qtn = +insertProjectAndUsers appContext project = -- Prepare DB do runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire qtn) appContext + runInContextIO (insertProject project) appContext -- -------------------------------- -- CONNECT -- -------------------------------- -connectTestWebsocketUsers appContext qtnUuid = +connectTestWebsocketUsers appContext projectUuid = -- Clear websockets do - clearConnections appContext qtnUuid + clearConnections appContext projectUuid -- Connect 1. user - (c1, s1) <- createConnection appContext (reqUrlT qtnUuid (Just reqAuthToken)) + (c1, s1) <- createConnection appContext (reqUrlT projectUuid (Just reqAuthToken)) read_SetUserList c1 0 -- Connect 2. user - (c2, s2) <- createConnection appContext (reqUrlT qtnUuid (Just reqNonAdminAuthToken)) + (c2, s2) <- createConnection appContext (reqUrlT projectUuid (Just reqNonAdminAuthToken)) read_SetUserList c1 1 read_SetUserList c2 1 -- Connect 3. user - (c3, s3) <- createConnection appContext (reqUrlT qtnUuid Nothing) + (c3, s3) <- createConnection appContext (reqUrlT projectUuid Nothing) read_SetUserList c1 2 read_SetUserList c2 2 read_SetUserList c3 2 @@ -88,8 +88,8 @@ connectTestWebsocketUsers appContext qtnUuid = read_SetUserList connection expConnectionCount = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetUserList_ServerQuestionnaireActionDTO resConnection))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetUserList_ServerProjectMessageDTO resConnection))) = eResult length resConnection `shouldBe` expConnectionCount read_Error connection expError = do @@ -118,13 +118,13 @@ nothingWasReceived connection = do -- DISCONNECT -- -------------------------------- clearConnections :: AppContext -> U.UUID -> IO () -clearConnections appContext qtnUuid = do +clearConnections appContext projectUuid = do (Right records) <- runInContext getAllFromCache appContext - traverse_ (clearConnection appContext qtnUuid) . filter (\r -> r.entityId == U.toString qtnUuid) $ records + traverse_ (clearConnection appContext projectUuid) . filter (\r -> r.entityId == U.toString projectUuid) $ records clearConnection :: AppContext -> U.UUID -> WebsocketRecord -> IO () -clearConnection appContext qtnUuid record = do - runInContext (deleteUser qtnUuid record.connectionUuid) appContext +clearConnection appContext projectUuid record = do + runInContext (deleteUser projectUuid record.connectionUuid) appContext return () -- -------------------------------- diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/DeleteCommentSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/DeleteCommentSpec.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/DeleteCommentSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/DeleteCommentSpec.hs index 6db313dad..923874c3f 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/DeleteCommentSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/DeleteCommentSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.DeleteCommentSpec where +module Wizard.Specs.Websocket.Project.Detail.DeleteCommentSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,18 +9,18 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common deleteCommentSpec appContext = describe "deleteComment" $ test200 appContext @@ -31,16 +31,15 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: write_DeleteComment c1 dcche_rQ1_t1_1' -- THEN: @@ -57,11 +56,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_DeleteComment connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_DeleteComment connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/DeleteCommentThreadSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/DeleteCommentThreadSpec.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/DeleteCommentThreadSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/DeleteCommentThreadSpec.hs index cfcb10c39..b92307010 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/DeleteCommentThreadSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/DeleteCommentThreadSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.DeleteCommentThreadSpec where +module Wizard.Specs.Websocket.Project.Detail.DeleteCommentThreadSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,18 +9,18 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common deleteCommentThreadSpec appContext = describe "deleteCommentThread" $ test200 appContext @@ -31,16 +31,15 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: write_DeleteCommentThread c1 dtche_rQ1_t1' -- THEN: @@ -57,11 +56,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_DeleteCommentThread connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_DeleteCommentThread connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/EditCommentSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/EditCommentSpec.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/EditCommentSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/EditCommentSpec.hs index 4975bb123..6db023848 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/EditCommentSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/EditCommentSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.EditCommentSpec where +module Wizard.Specs.Websocket.Project.Detail.EditCommentSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,18 +9,18 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common editCommentSpec appContext = describe "editComment" $ test200 appContext @@ -31,16 +31,15 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: write_EditComment c1 ecche_rQ1_t1_1' -- THEN: @@ -57,11 +56,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_EditComment connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_EditComment connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/GeneralSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/GeneralSpec.hs similarity index 68% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/GeneralSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/GeneralSpec.hs index c393a9917..724306946 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/GeneralSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/GeneralSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.GeneralSpec where +module Wizard.Specs.Websocket.Project.Detail.GeneralSpec where import qualified Data.UUID as U import Test.Hspec hiding (shouldBe) @@ -6,20 +6,20 @@ import Test.Hspec hiding (shouldBe) import Shared.Common.Localization.Messages.Public import Shared.Common.Model.Error.Error import Shared.Common.Util.Uuid -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.Tenant.Data.Tenants import Wizard.Localization.Messages.Public import Wizard.Model.Config.ServerConfig import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Model.Tenant.Tenant -import Wizard.Service.Questionnaire.QuestionnaireMapper -import Wizard.Service.Questionnaire.QuestionnaireService +import Wizard.Service.Project.ProjectMapper +import Wizard.Service.Project.ProjectService import Wizard.Specs.API.Common import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common generalSpec appContext = describe "general" $ do @@ -34,10 +34,10 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 - insertQuestionnaireAndUsers appContext qtn + let project = project10 + insertProjectAndUsers appContext project -- WHEN - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext qtn.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project.uuid -- THEN: assertCountOfWebsocketConnection appContext 3 -- AND: Close sockets @@ -50,27 +50,27 @@ test403 appContext = do create_403_no_perm "WS 403 FORBIDDEN - no required view entity permission (Anonymous, Private)" appContext - questionnaire1 + project1 Nothing - "View Questionnaire" + "View Project" create_403_no_perm "WS 403 FORBIDDEN - no required view entity permission (Non-owner, Private)" appContext - questionnaire1 + project1 (Just reqNonAdminAuthToken) - "View Questionnaire" + "View Project" it "WS 403 FORBIDDEN - when perms are changed" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 - insertQuestionnaireAndUsers appContext qtn - let updatedQtn = qtn {visibility = PrivateQuestionnaire, sharing = RestrictedQuestionnaire} + let project = project10 + insertProjectAndUsers appContext project + let updatedProject = project {visibility = PrivateProjectVisibility, sharing = RestrictedProjectSharing} -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext qtn.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project.uuid -- AND: Prepare expectation - let expError = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "View Questionnaire" + let expError = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN "View Project" -- WHEN: Update permission - runInContext (modifyQuestionnaireShare updatedQtn.uuid (toChangeDTO updatedQtn)) appContext + runInContext (modifyProjectShare updatedProject.uuid (toChangeDTO updatedProject)) appContext -- THEN: Read response read_SetUserList c1 1 read_SetUserList c1 0 @@ -79,15 +79,15 @@ test403 appContext = do -- AND: Close sockets closeSockets [s1, s2, s3] -create_403_no_perm title appContext qtn authToken errorMessage = +create_403_no_perm title appContext project authToken errorMessage = it title $ -- GIVEN: Prepare database do - insertQuestionnaireAndUsers appContext qtn + insertProjectAndUsers appContext project -- AND: Prepare expectation let expError = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN errorMessage -- WHEN: Connect to websocket - (c1, s1) <- createConnection appContext (reqUrlT qtn.uuid authToken) + (c1, s1) <- createConnection appContext (reqUrlT project.uuid authToken) -- THEN: Read response read_Error c1 expError -- AND: Close sockets @@ -100,31 +100,31 @@ test404 appContext = do it "WS 404 NOT FOUND - non existing entity" $ -- GIVEN: Prepare request do - let nonExistingQtnUuid = "fd5ea37c-852a-4174-9d65-2bf23202541d" + let nonExistingProjectUuid = "fd5ea37c-852a-4174-9d65-2bf23202541d" -- AND: Prepare expectation let expError = NotExistsError ( _ERROR_DATABASE__ENTITY_NOT_FOUND - "questionnaire" - [("tenant_uuid", U.toString defaultTenant.uuid), ("uuid", nonExistingQtnUuid)] + "project" + [("tenant_uuid", U.toString defaultTenant.uuid), ("uuid", nonExistingProjectUuid)] ) -- WHEN: - (c1, s1) <- createConnection appContext (reqUrlT (u' nonExistingQtnUuid) (Just reqAuthToken)) + (c1, s1) <- createConnection appContext (reqUrlT (u' nonExistingProjectUuid) (Just reqAuthToken)) -- THEN: read_Error c1 expError -- AND: Close sockets closeSockets [s1] - it "WS 404 NOT FOUND - questionnaire was deleted" $ + it "WS 404 NOT FOUND - project was deleted" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 - insertQuestionnaireAndUsers appContext qtn + let project = project10 + insertProjectAndUsers appContext project -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext qtn.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project.uuid -- AND: Prepare expectation - let expError = NotExistsError (_ERROR_SERVICE_QTN_COLLABORATION__FORCE_DISCONNECT (U.toString $ qtn.uuid)) + let expError = NotExistsError (_ERROR_SERVICE_PROJECT_COLLABORATION__FORCE_DISCONNECT (U.toString $ project.uuid)) -- WHEN: Update permission - runInContext (deleteQuestionnaire qtn.uuid True) appContext + runInContext (deleteProject project.uuid True) appContext -- THEN: Read response read_Error c1 expError read_Error c2 expError diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ReopenCommentThreadSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ReopenCommentThreadSpec.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ReopenCommentThreadSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ReopenCommentThreadSpec.hs index f4a6cb879..7f9b9bac4 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ReopenCommentThreadSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ReopenCommentThreadSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.ReopenCommentThreadSpec where +module Wizard.Specs.Websocket.Project.Detail.ReopenCommentThreadSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,18 +9,18 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common reopenCommentThreadSpec appContext = describe "reopenCommentThread" $ test200 appContext @@ -31,16 +31,15 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: write_ReopenCommentThread c1 otche_rQ1_t1' -- THEN: @@ -57,11 +56,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_ReopenCommentThread connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_ReopenCommentThread connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ResolveCommentThreadSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ResolveCommentThreadSpec.hs similarity index 71% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ResolveCommentThreadSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ResolveCommentThreadSpec.hs index dd1b3af94..c9d7e8c75 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/ResolveCommentThreadSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/ResolveCommentThreadSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.ResolveCommentThreadSpec where +module Wizard.Specs.Websocket.Project.Detail.ResolveCommentThreadSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,18 +9,18 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common resolveCommentThreadSpec appContext = describe "resolveCommentThread" $ test200 appContext @@ -31,16 +31,15 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: write_ResolveCommentThread c1 rtche_rQ1_t1' -- THEN: @@ -57,11 +56,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_ResolveCommentThread connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_ResolveCommentThread connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetLabelsSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetLabelsSpec.hs similarity index 61% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetLabelsSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetLabelsSpec.hs index ef97d14ea..b399f88dc 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetLabelsSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetLabelsSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.SetLabelsSpec where +module Wizard.Specs.Websocket.Project.Detail.SetLabelsSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,20 +9,20 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common setLabelsSpec appContext = describe "setLabels" $ test200 appContext @@ -33,22 +33,21 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: - write_SetLabels c1 (toEventChangeDTO (slble_rQ1' questionnaire10Uuid)) + write_SetLabels c1 (toEventChangeDTO (slble_rQ1' project10Uuid)) -- THEN: - read_SetLabels c1 (toEventDTO (slble_rQ1' questionnaire10Uuid) (Just userAlbert)) - read_SetLabels c2 (toEventDTO (slble_rQ1' questionnaire10Uuid) (Just userAlbert)) - read_SetLabels c3 (toEventDTO (slble_rQ1' questionnaire10Uuid) (Just userAlbert)) + read_SetLabels c1 (toEventDTO (slble_rQ1' project10Uuid) (Just userAlbert)) + read_SetLabels c2 (toEventDTO (slble_rQ1' project10Uuid) (Just userAlbert)) + read_SetLabels c3 (toEventDTO (slble_rQ1' project10Uuid) (Just userAlbert)) nothingWasReceived c4 nothingWasReceived c5 nothingWasReceived c6 @@ -59,11 +58,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_SetLabels connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_SetLabels connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetPhaseSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetPhaseSpec.hs similarity index 62% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetPhaseSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetPhaseSpec.hs index e11faf6a2..68cd8015b 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetPhaseSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetPhaseSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.SetPhaseSpec where +module Wizard.Specs.Websocket.Project.Detail.SetPhaseSpec where import Data.Aeson import Data.Foldable (traverse_) @@ -9,20 +9,20 @@ import Test.Hspec.Expectations.Pretty import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common setPhaseSpec appContext = describe "setPhase" $ test200 appContext @@ -33,22 +33,21 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: - write_SetPhase c1 (toEventChangeDTO (sphse_2' questionnaire10Uuid)) + write_SetPhase c1 (toEventChangeDTO (sphse_2' project10Uuid)) -- THEN: - read_SetPhase c1 (toEventDTO (sphse_2' questionnaire10Uuid) (Just userAlbert)) - read_SetPhase c2 (toEventDTO (sphse_2' questionnaire10Uuid) (Just userAlbert)) - read_SetPhase c3 (toEventDTO (sphse_2' questionnaire10Uuid) (Just userAlbert)) + read_SetPhase c1 (toEventDTO (sphse_2' project10Uuid) (Just userAlbert)) + read_SetPhase c2 (toEventDTO (sphse_2' project10Uuid) (Just userAlbert)) + read_SetPhase c3 (toEventDTO (sphse_2' project10Uuid) (Just userAlbert)) nothingWasReceived c4 nothingWasReceived c5 nothingWasReceived c6 @@ -59,11 +58,11 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- write_SetPhase connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_SetPhase connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetQuestionnaireSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetProjectSpec.hs similarity index 67% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetQuestionnaireSpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetProjectSpec.hs index bb8da1f83..0aecd6b3e 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetQuestionnaireSpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetProjectSpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.SetQuestionnaireSpec where +module Wizard.Specs.Websocket.Project.Detail.SetProjectSpec where import Data.Aeson import qualified Data.ByteString.Lazy.Char8 as BSL @@ -16,21 +16,21 @@ import Shared.Common.Model.Http.HttpRequest import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.Projects import qualified Wizard.Database.Migration.Development.User.UserMigration as U -import Wizard.Model.Questionnaire.Questionnaire +import Wizard.Model.Project.Project import Wizard.Specs.API.Common import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common -setQuestionnaireSpec appContext = - describe "setQuestionnaireSpec" $ +setProjectSpec appContext = + describe "setProjectSpec" $ test200 appContext -- ---------------------------------------------------- @@ -40,23 +40,22 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- AND: Prepare request let request = HttpRequest { requestMethod = "PUT" - , requestUrl = "/wizard-api/questionnaires/" ++ U.toString questionnaire10.uuid ++ "/settings" + , requestUrl = "/wizard-api/projects/" ++ U.toString project10.uuid ++ "/settings" , requestHeaders = M.fromList [("Authorization", "Bearer " ++ reqAuthToken), ("Content-Type", "application/json")] - , requestBody = BSL.toStrict . encode $ questionnaire10EditedSettingsChange + , requestBody = BSL.toStrict . encode $ project10EditedSettingsChange , multipart = Nothing } -- AND: Prepare expectation @@ -68,9 +67,9 @@ test200 appContext = let (Right r) = response HC.responseStatus r `shouldBe` ok200 -- AND: - read_SetQuestionnaire c1 questionnaire10EditedWs - read_SetQuestionnaire c2 questionnaire10EditedWs - read_SetQuestionnaire c3 questionnaire10EditedWs + read_SetProject c1 project10EditedWs + read_SetProject c2 project10EditedWs + read_SetProject c3 project10EditedWs nothingWasReceived c4 nothingWasReceived c5 nothingWasReceived c6 @@ -80,8 +79,8 @@ test200 appContext = -- ---------------------------------------------------- -- ---------------------------------------------------- -- ---------------------------------------------------- -read_SetQuestionnaire connection expQtnChangeDto = do +read_SetProject connection expProjectChangeDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetQuestionnaire_ServerQuestionnaireActionDTO qtnChangeDto))) = eResult - expQtnChangeDto `shouldBe` qtnChangeDto + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetProject_ServerProjectMessageDTO projectChangeDto))) = eResult + expProjectChangeDto `shouldBe` projectChangeDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetReplySpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetReplySpec.hs similarity index 65% rename from wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetReplySpec.hs rename to wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetReplySpec.hs index 3b970f253..95d7f1e57 100644 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/SetReplySpec.hs +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/SetReplySpec.hs @@ -1,4 +1,4 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.SetReplySpec where +module Wizard.Specs.Websocket.Project.Detail.SetReplySpec where import Data.Aeson import Data.Foldable (traverse_) @@ -11,23 +11,23 @@ import Shared.Common.Model.Error.Error import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageDAO import Shared.KnowledgeModel.Database.DAO.Package.KnowledgeModelPackageEventDAO import Shared.KnowledgeModel.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages -import Wizard.Api.Resource.Websocket.QuestionnaireActionDTO +import Wizard.Api.Resource.Websocket.ProjectMessageDTO import Wizard.Api.Resource.Websocket.WebsocketActionDTO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO +import Wizard.Database.DAO.Project.ProjectDAO import qualified Wizard.Database.Migration.Development.DocumentTemplate.DocumentTemplateMigration as TML_Migration -import Wizard.Database.Migration.Development.Questionnaire.Data.QuestionnaireEvents -import Wizard.Database.Migration.Development.Questionnaire.Data.Questionnaires +import Wizard.Database.Migration.Development.Project.Data.ProjectEvents +import Wizard.Database.Migration.Development.Project.Data.Projects import Wizard.Database.Migration.Development.User.Data.Users import qualified Wizard.Database.Migration.Development.User.UserMigration as U import Wizard.Model.Config.ServerConfig import Wizard.Model.Context.AppContext -import Wizard.Model.Questionnaire.Questionnaire -import Wizard.Service.Questionnaire.Event.QuestionnaireEventMapper +import Wizard.Model.Project.Project +import Wizard.Service.Project.Event.ProjectEventMapper import Wizard.Specs.API.Common import Wizard.Specs.Common import Wizard.Specs.Websocket.Common -import Wizard.Specs.Websocket.Questionnaire.Detail.Common +import Wizard.Specs.Websocket.Project.Detail.Common setReplySpec appContext = describe "setReply" $ do @@ -41,22 +41,21 @@ test200 appContext = it "WS 200 OK" $ -- GIVEN: Prepare database do - let qtn = questionnaire10 runInContext U.runMigration appContext runInContextIO TML_Migration.runMigration appContext runInContextIO (insertPackage germanyKmPackage) appContext runInContextIO (traverse_ insertPackageEvent germanyKmPackageEvents) appContext - runInContextIO (insertQuestionnaire questionnaire10) appContext - runInContextIO (insertQuestionnaire questionnaire7) appContext + runInContextIO (insertProject project10) appContext + runInContextIO (insertProject project7) appContext -- AND: Connect to websocket - ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext questionnaire10.uuid - ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext questionnaire7.uuid + ((c1, s1), (c2, s2), (c3, s3)) <- connectTestWebsocketUsers appContext project10.uuid + ((c4, s4), (c5, s5), (c6, s6)) <- connectTestWebsocketUsers appContext project7.uuid -- WHEN: - write_SetReply c1 (toEventChangeDTO (sre_rQ1Updated' questionnaire10Uuid)) + write_SetReply c1 (toEventChangeDTO (sre_rQ1Updated' project10Uuid)) -- THEN: - read_SetReply c1 (toEventDTO (sre_rQ1Updated' questionnaire10Uuid) (Just userAlbert)) - read_SetReply c2 (toEventDTO (sre_rQ1Updated' questionnaire10Uuid) (Just userAlbert)) - read_SetReply c3 (toEventDTO (sre_rQ1Updated' questionnaire10Uuid) (Just userAlbert)) + read_SetReply c1 (toEventDTO (sre_rQ1Updated' project10Uuid) (Just userAlbert)) + read_SetReply c2 (toEventDTO (sre_rQ1Updated' project10Uuid) (Just userAlbert)) + read_SetReply c3 (toEventDTO (sre_rQ1Updated' project10Uuid) (Just userAlbert)) nothingWasReceived c4 nothingWasReceived c5 nothingWasReceived c6 @@ -70,28 +69,28 @@ test403 appContext = do create_403_no_perm "WS 403 FORBIDDEN - no required edit entity permission (Anonymous, VisibleView)" appContext - questionnaire5 + project5 Nothing - "Edit Questionnaire" + "Edit Project" create_403_no_perm "WS 403 FORBIDDEN - no required edit entity permission (Non-owner, VisibleView)" appContext - questionnaire5 + project5 (Just reqNonAdminAuthToken) - "Edit Questionnaire" + "Edit Project" -create_403_no_perm title appContext qtn authToken errorMessage = +create_403_no_perm title appContext project authToken errorMessage = it title $ -- GIVEN: Prepare database do - insertQuestionnaireAndUsers appContext qtn + insertProjectAndUsers appContext project -- AND: Prepare expectation let expError = ForbiddenError $ _ERROR_VALIDATION__FORBIDDEN errorMessage -- AND: Connect to websocket - (c1, s1) <- createConnection appContext (reqUrlT qtn.uuid authToken) + (c1, s1) <- createConnection appContext (reqUrlT project.uuid authToken) read_SetUserList c1 0 -- WHEN: Send setReply - write_SetReply c1 (toEventChangeDTO (sre_rQ1Updated' qtn.uuid)) + write_SetReply c1 (toEventChangeDTO (sre_rQ1Updated' project.uuid)) -- THEN: Read response read_Error c1 expError -- AND: Close sockets @@ -101,11 +100,11 @@ create_403_no_perm title appContext qtn authToken errorMessage = -- ---------------------------------------------------- -- ---------------------------------------------------- write_SetReply connection replyDto = do - let reqDto = SetContent_ClientQuestionnaireActionDTO replyDto + let reqDto = SetContent_ClientProjectMessageDTO replyDto sendMessage connection reqDto read_SetReply connection expReplyDto = do resDto <- receiveData connection - let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerQuestionnaireActionDTO) - let (Right (Success_ServerActionDTO (SetContent_ServerQuestionnaireActionDTO replyDto))) = eResult + let eResult = eitherDecode resDto :: Either String (Success_ServerActionDTO ServerProjectMessageDTO) + let (Right (Success_ServerActionDTO (SetContent_ServerProjectMessageDTO replyDto))) = eResult expReplyDto `shouldBe` replyDto diff --git a/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/WebsocketSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/WebsocketSpec.hs new file mode 100644 index 000000000..05abe30d6 --- /dev/null +++ b/wizard-server/test/Wizard/Specs/Websocket/Project/Detail/WebsocketSpec.hs @@ -0,0 +1,36 @@ +module Wizard.Specs.Websocket.Project.Detail.WebsocketSpec where + +import Test.Hspec hiding (shouldBe) + +import Wizard.Model.Context.AppContext + +import Wizard.Specs.Websocket.Project.Detail.AddCommentSpec +import Wizard.Specs.Websocket.Project.Detail.AssignCommentThreadSpec +import Wizard.Specs.Websocket.Project.Detail.ClearReplySpec +import Wizard.Specs.Websocket.Project.Detail.DeleteCommentSpec +import Wizard.Specs.Websocket.Project.Detail.DeleteCommentThreadSpec +import Wizard.Specs.Websocket.Project.Detail.EditCommentSpec +import Wizard.Specs.Websocket.Project.Detail.GeneralSpec +import Wizard.Specs.Websocket.Project.Detail.ReopenCommentThreadSpec +import Wizard.Specs.Websocket.Project.Detail.ResolveCommentThreadSpec +import Wizard.Specs.Websocket.Project.Detail.SetLabelsSpec +import Wizard.Specs.Websocket.Project.Detail.SetPhaseSpec +import Wizard.Specs.Websocket.Project.Detail.SetProjectSpec +import Wizard.Specs.Websocket.Project.Detail.SetReplySpec + +projectWebsocketAPI :: AppContext -> SpecWith () +projectWebsocketAPI appContext = + describe "WS /wizard-api/projects/{projectUuid}/websocket" $ do + generalSpec appContext + setReplySpec appContext + clearReplySpec appContext + setPhaseSpec appContext + setLabelsSpec appContext + resolveCommentThreadSpec appContext + reopenCommentThreadSpec appContext + assignCommentThreadSpec appContext + deleteCommentThreadSpec appContext + addCommentSpec appContext + editCommentSpec appContext + deleteCommentSpec appContext + setProjectSpec appContext diff --git a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/WebsocketSpec.hs b/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/WebsocketSpec.hs deleted file mode 100644 index b76b1e3eb..000000000 --- a/wizard-server/test/Wizard/Specs/Websocket/Questionnaire/Detail/WebsocketSpec.hs +++ /dev/null @@ -1,36 +0,0 @@ -module Wizard.Specs.Websocket.Questionnaire.Detail.WebsocketSpec where - -import Test.Hspec hiding (shouldBe) - -import Wizard.Model.Context.AppContext - -import Wizard.Specs.Websocket.Questionnaire.Detail.AddCommentSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.AssignCommentThreadSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.ClearReplySpec -import Wizard.Specs.Websocket.Questionnaire.Detail.DeleteCommentSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.DeleteCommentThreadSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.EditCommentSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.GeneralSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.ReopenCommentThreadSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.ResolveCommentThreadSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.SetLabelsSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.SetPhaseSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.SetQuestionnaireSpec -import Wizard.Specs.Websocket.Questionnaire.Detail.SetReplySpec - -questionnaireWebsocketAPI :: AppContext -> SpecWith () -questionnaireWebsocketAPI appContext = - describe "WS /wizard-api/questionnaires/{qtnUuid}/websocket" $ do - generalSpec appContext - setReplySpec appContext - clearReplySpec appContext - setPhaseSpec appContext - setLabelsSpec appContext - resolveCommentThreadSpec appContext - reopenCommentThreadSpec appContext - assignCommentThreadSpec appContext - deleteCommentThreadSpec appContext - addCommentSpec appContext - editCommentSpec appContext - deleteCommentSpec appContext - setQuestionnaireSpec appContext diff --git a/wizard-server/test/Wizard/TestMigration.hs b/wizard-server/test/Wizard/TestMigration.hs index 0079f5dab..71547b25e 100644 --- a/wizard-server/test/Wizard/TestMigration.hs +++ b/wizard-server/test/Wizard/TestMigration.hs @@ -20,18 +20,18 @@ import Wizard.Database.DAO.Document.DocumentDAO import Wizard.Database.DAO.DocumentTemplate.DocumentTemplateDraftDAO import Wizard.Database.DAO.Feedback.FeedbackDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelEditorDAO -import qualified Wizard.Database.DAO.KnowledgeModel.KnowledgeModelMigrationDAO as KM_MigratorDAO +import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelMigrationDAO import Wizard.Database.DAO.KnowledgeModel.KnowledgeModelSecretDAO -import qualified Wizard.Database.DAO.Questionnaire.MigratorDAO as QTN_MigratorDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireCommentThreadDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireEventDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireFileDAO -import Wizard.Database.DAO.Questionnaire.QuestionnairePermDAO -import Wizard.Database.DAO.Questionnaire.QuestionnaireVersionDAO -import Wizard.Database.DAO.QuestionnaireAction.QuestionnaireActionDAO -import Wizard.Database.DAO.QuestionnaireImporter.QuestionnaireImporterDAO +import Wizard.Database.DAO.Project.ProjectActionDAO +import Wizard.Database.DAO.Project.ProjectCommentDAO +import Wizard.Database.DAO.Project.ProjectCommentThreadDAO +import Wizard.Database.DAO.Project.ProjectDAO +import Wizard.Database.DAO.Project.ProjectEventDAO +import Wizard.Database.DAO.Project.ProjectFileDAO +import Wizard.Database.DAO.Project.ProjectImporterDAO +import Wizard.Database.DAO.Project.ProjectMigrationDAO +import Wizard.Database.DAO.Project.ProjectPermDAO +import Wizard.Database.DAO.Project.ProjectVersionDAO import Wizard.Database.DAO.Registry.RegistryKnowledgeModelPackageDAO import Wizard.Database.DAO.Registry.RegistryOrganizationDAO import Wizard.Database.DAO.Registry.RegistryTemplateDAO @@ -42,7 +42,7 @@ import Wizard.Database.DAO.Tenant.Config.TenantConfigKnowledgeModelDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOrganizationDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigOwlDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigPrivacyAndSupportDAO -import Wizard.Database.DAO.Tenant.Config.TenantConfigQuestionnaireDAO +import Wizard.Database.DAO.Tenant.Config.TenantConfigProjectDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigRegistryDAO import Wizard.Database.DAO.Tenant.Config.TenantConfigSubmissionDAO import Wizard.Database.DAO.Tenant.TenantDAO @@ -58,16 +58,16 @@ import qualified Wizard.Database.Migration.Development.Instance.InstanceSchemaMi import Wizard.Database.Migration.Development.KnowledgeModel.Data.Package.KnowledgeModelPackages import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelCacheSchemaMigration as KnowledgeModelCache import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelEditorSchemaMigration as KnowledgeModelEditor -import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelMigrationSchemaMigration as KnowledgeModelMigrator +import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelMigrationSchemaMigration as KnowledgeModelMigration import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelPackageSchemaMigration as KnowledgeModelPackage import qualified Wizard.Database.Migration.Development.KnowledgeModel.KnowledgeModelSecretSchemaMigration as KnowledgeModelSecret import qualified Wizard.Database.Migration.Development.Locale.LocaleMigration as LocaleMigration import qualified Wizard.Database.Migration.Development.Locale.LocaleSchemaMigration as Locale import qualified Wizard.Database.Migration.Development.PersistentCommand.PersistentCommandSchemaMigration as PersistentCommand -import qualified Wizard.Database.Migration.Development.Questionnaire.MigratorSchemaMigration as QuestionnaireMigrator -import qualified Wizard.Database.Migration.Development.Questionnaire.QuestionnaireSchemaMigration as Questionnaire -import qualified Wizard.Database.Migration.Development.QuestionnaireAction.QuestionnaireActionSchemaMigration as QuestionnaireAction -import qualified Wizard.Database.Migration.Development.QuestionnaireImporter.QuestionnaireImporterSchemaMigration as QuestionnaireImporter +import qualified Wizard.Database.Migration.Development.Project.ProjectActionSchemaMigration as ProjectAction +import qualified Wizard.Database.Migration.Development.Project.ProjectImporterSchemaMigration as ProjectImporter +import qualified Wizard.Database.Migration.Development.Project.ProjectMigrationSchemaMigration as ProjectMigration +import qualified Wizard.Database.Migration.Development.Project.ProjectSchemaMigration as Project import qualified Wizard.Database.Migration.Development.Registry.RegistrySchemaMigration as Registry import qualified Wizard.Database.Migration.Development.Submission.SubmissionSchemaMigration as Submission import Wizard.Database.Migration.Development.Tenant.Data.TenantConfigs @@ -96,10 +96,10 @@ import Wizard.Specs.Common buildSchema appContext = do putStrLn "DB: dropping DB triggers" runInContext Document.dropTriggers appContext - runInContext Questionnaire.dropTriggers appContext + runInContext Project.dropTriggers appContext runInContext Locale.dropTriggers appContext putStrLn "DB: dropping DB functions" - runInContext Questionnaire.dropFunctions appContext + runInContext Project.dropFunctions appContext runInContext DocumentTemplate.dropFunctions appContext runInContext KnowledgeModelEditor.dropFunctions appContext runInContext KnowledgeModelPackage.dropFunctions appContext @@ -109,20 +109,20 @@ buildSchema appContext = do runInContext ExternalLink.dropTables appContext runInContext Component.dropTables appContext runInContext Registry.dropTables appContext - runInContext QuestionnaireAction.dropTables appContext - runInContext QuestionnaireImporter.dropTables appContext + runInContext ProjectAction.dropTables appContext + runInContext ProjectImporter.dropTables appContext runInContext Audit.dropTables appContext runInContext Prefab.dropTables appContext runInContext PersistentCommand.dropTables appContext runInContext Submission.dropTables appContext runInContext ActionKey.dropTables appContext runInContext Feedback.dropTables appContext - runInContext KnowledgeModelMigrator.dropTables appContext + runInContext KnowledgeModelMigration.dropTables appContext runInContext KnowledgeModelCache.dropTables appContext runInContext KnowledgeModelEditor.dropTables appContext runInContext Document.dropTables appContext - runInContext QuestionnaireMigrator.dropTables appContext - runInContext Questionnaire.dropTables appContext + runInContext ProjectMigration.dropTables appContext + runInContext Project.dropTables appContext runInContext KnowledgeModelSecret.dropTables appContext runInContext KnowledgeModelPackage.dropTables appContext runInContext User.dropTables appContext @@ -149,17 +149,17 @@ buildSchema appContext = do runInContext Feedback.createTables appContext runInContext KnowledgeModelEditor.createTables appContext runInContext KnowledgeModelCache.createTables appContext - runInContext Questionnaire.createTables appContext + runInContext Project.createTables appContext runInContext DocumentTemplate.createDraftDataTable appContext runInContext Document.createTables appContext - runInContext QuestionnaireMigrator.createTables appContext - runInContext KnowledgeModelMigrator.createTables appContext + runInContext ProjectMigration.createTables appContext + runInContext KnowledgeModelMigration.createTables appContext runInContext Submission.createTables appContext runInContext PersistentCommand.createTables appContext runInContext Prefab.createTables appContext runInContext Audit.createTables appContext - runInContext QuestionnaireAction.createTables appContext - runInContext QuestionnaireImporter.createTables appContext + runInContext ProjectAction.createTables appContext + runInContext ProjectImporter.createTables appContext runInContext Registry.createTables appContext runInContext Component.createTables appContext runInContext ExternalLink.createTables appContext @@ -169,12 +169,12 @@ buildSchema appContext = do runInContext KnowledgeModelPackage.createFunctions appContext runInContext KnowledgeModelEditor.createFunctions appContext runInContext DocumentTemplate.createFunctions appContext - runInContext Questionnaire.createFunctions appContext + runInContext Project.createFunctions appContext putStrLn "DB: Creating missing foreign key constraints" runInContext User.createUserLocaleForeignKeyConstraint appContext putStrLn "DB: Creating triggers" runInContext Locale.createTriggers appContext - runInContext Questionnaire.createTriggers appContext + runInContext Project.createTriggers appContext runInContext Document.createTriggers appContext putStrLn "DB-S3: Purging and creating schema" runInContext DocumentTemplateMigration.runS3Migration appContext @@ -193,7 +193,7 @@ resetDB appContext = do runInContext deleteTenantConfigMails appContext runInContext deleteTenantConfigFeatures appContext runInContext deleteTenantConfigSubmissions appContext - runInContext deleteTenantConfigQuestionnaires appContext + runInContext deleteTenantConfigProjects appContext runInContext deleteTenantConfigKnowledgeModels appContext runInContext deleteTenantConfigRegistries appContext runInContext deleteTenantConfigLookAndFeels appContext @@ -201,23 +201,23 @@ resetDB appContext = do runInContext deleteTenantConfigPrivacyAndSupports appContext runInContext deleteTenantConfigAuthentications appContext runInContext deleteTenantConfigOrganizations appContext - runInContext KM_MigratorDAO.deleteMigratorStates appContext - runInContext QTN_MigratorDAO.deleteMigratorStates appContext + runInContext deleteKnowledgeModelMigrations appContext + runInContext deleteProjectMigrations appContext runInContext deleteFeedbacks appContext runInContext deleteActionKeys appContext runInContext deleteKnowledgeModelEditors appContext runInContext deleteDocuments appContext runInContext deleteDrafts appContext - runInContext deleteQuestionnaireVersions appContext - runInContext deleteQuestionnaireEvents appContext - runInContext deleteQuestionnaireFiles appContext - runInContext deleteQuestionnaireVersions appContext - runInContext deleteQuestionnaireComments appContext - runInContext deleteQuestionnaireCommentThreads appContext - runInContext deleteQuestionnairePerms appContext - runInContext deleteQuestionnaires appContext - runInContext deleteQuestionnaireActions appContext - runInContext deleteQuestionnaireImporters appContext + runInContext deleteProjectVersions appContext + runInContext deleteProjectEvents appContext + runInContext deleteProjectFiles appContext + runInContext deleteProjectVersions appContext + runInContext deleteProjectComments appContext + runInContext deleteProjectCommentThreads appContext + runInContext deleteProjectPerms appContext + runInContext deleteProjects appContext + runInContext deleteProjectActions appContext + runInContext deleteProjectImporters appContext runInContext deleteDocumentTemplates appContext runInContext deleteKnowledgeModelSecrets appContext runInContext deletePackages appContext @@ -245,7 +245,7 @@ resetDB appContext = do runInContext (insertTenantConfigRegistry defaultRegistryEncrypted) appContext runInContext (insertTenantConfigKnowledgeModel defaultKnowledgeModelEncrypted) appContext runInContext (insertTenantConfigKnowledgeModelPublicPackagePattern defaultKnowledgeModelPublicPackagePattern) appContext - runInContext (insertTenantConfigQuestionnaire defaultQuestionnaireEncrypted) appContext + runInContext (insertTenantConfigProject defaultProjectEncrypted) appContext runInContext (insertTenantConfigSubmission (defaultSubmission {services = []})) appContext runInContext (insertTenantConfigFeatures defaultFeatures) appContext runInContext (insertTenantConfigMail defaultMail) appContext From 34373e0a7df2cabd924610290de905b23e89d82d Mon Sep 17 00:00:00 2001 From: Eddie Ehlin Date: Mon, 15 Dec 2025 13:58:42 +0100 Subject: [PATCH 2/2] Fix to ensure only one User-Agent header is added to request. --- .../Common/Integration/Http/Common/HttpClientFactory.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/shared-common/src/Shared/Common/Integration/Http/Common/HttpClientFactory.hs b/shared-common/src/Shared/Common/Integration/Http/Common/HttpClientFactory.hs index 3d3334407..9dd584b3d 100644 --- a/shared-common/src/Shared/Common/Integration/Http/Common/HttpClientFactory.hs +++ b/shared-common/src/Shared/Common/Integration/Http/Common/HttpClientFactory.hs @@ -43,10 +43,14 @@ createHttpClientManager serverConfig = modifyRequest :: Bool -> Request -> IO Request modifyRequest logHttpClient request = do - let updatedRequest = + let originalHeaders = requestHeaders request + -- Filter out "User-Agent" headers (case-insensitive) and (re-)add our explicit "User-Agent" header, to ensure there's only one User-Agent header. + -- Note: Reason for using case-insensitive search for header key(s) is because HTTP spec. states that header keys are case-insensitive. + headersWithoutUA = filter (\(headerName, _) -> headerName /= CI.mk (BS.pack "User-Agent")) originalHeaders + updatedRequest = request { path = BS.pack . replace "//" "/" . BS.unpack . path $ request - , requestHeaders = ("User-Agent", "wizard-http-client") : requestHeaders request + , requestHeaders = ("User-Agent", "wizard-http-client") : headersWithoutUA } logRequest logHttpClient updatedRequest return updatedRequest