@@ -162,13 +162,13 @@ func main() {
162162 answerFileHandler := answer .NewFileResourceHandler (logger , answerQueries )
163163 fileService := file .NewService (logger , dbPool , answerFileHandler )
164164
165- setupImpl := config.SetupImpl {}
166- err = setupImpl .LoadSetupConfig (logger , cfg .SetupPath , cfg .SetupData )
165+ setupCfg := config.Setup {}
166+ err = setupCfg .LoadSetupConfig (logger , cfg .SetupPath , cfg .SetupData )
167167 if err != nil {
168168 logger .Fatal ("Failed to load setup configuration" , zap .Error (err ))
169169 }
170170
171- userService := user .NewService (logger , dbPool , fileService , unitService , unitService , & setupImpl )
171+ userService := user .NewService (logger , dbPool , fileService , unitService , unitService , & setupCfg )
172172 jwtService := jwt .NewService (logger , dbPool , cfg .Secret , cfg .OauthProxySecret , cfg .AccessTokenExpiration , cfg .RefreshTokenExpiration )
173173 distributeService := distribute .NewService (logger , unitService )
174174 markdownService := markdown .NewService (logger )
@@ -182,7 +182,7 @@ func main() {
182182 submitService := submit .NewService (logger , formService , questionService , responseService , answerService )
183183 publishService := publish .NewService (logger , distributeService , formService , inboxService , workflowService )
184184
185- setupService := setup .NewService (logger , setupImpl , unitService , userService )
185+ setupService := setup .NewService (logger , setupCfg , unitService , userService )
186186 err = setupService .Setup (context .Background ())
187187 if err != nil {
188188 logger .Fatal ("Failed to setup" , zap .Error (err ))
@@ -250,9 +250,9 @@ func main() {
250250 formCreator := formRole .Require (formResolver )
251251 formOwner := op .Or (unitAdmin , op .And (unitMember , formCreator ))
252252
253- notArchivedByForm := formMiddleware .Require (formResolver )
254- notArchivedBySection := formMiddleware .Require (sectionResolver )
255- notArchivedByResponse := formMiddleware .Require (responseResolver )
253+ availableByForm := formMiddleware .Require (formResolver )
254+ availableBySection := formMiddleware .Require (sectionResolver )
255+ availableByResponse := formMiddleware .Require (responseResolver )
256256
257257 // HTTP Server
258258 mux := http .NewServeMux ()
@@ -349,22 +349,23 @@ func main() {
349349
350350 // Form Management
351351 // ----------------------
352- mux .Handle ("GET /api/forms" , authMiddleware .HandlerFunc (formHandler .ListHandler ))
353- mux .Handle ("GET /api/forms/{formId}" , authMiddleware .HandlerFunc (formHandler .GetHandler ))
354- mux .Handle ("GET /api/orgs/{slug}/forms" , tenantAuthMiddleware .Append (unitRole .Require (auth .RoleMember , slugResolver )).HandlerFunc (formHandler .ListByOrgHandler ))
355- mux .Handle ("POST /api/orgs/{slug}/forms" , tenantAuthMiddleware .Append (unitRole .Require (auth .RoleMember , slugResolver )).HandlerFunc (formHandler .CreateUnderOrgHandler ))
356- mux .Handle ("PATCH /api/forms/{formId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (notArchivedByForm ).HandlerFunc (formHandler .PatchHandler ))
357- mux .Handle ("DELETE /api/forms/{formId}" , authMiddleware .Append (formOwner ).HandlerFunc (formHandler .DeleteHandler ))
352+ mux .Handle ("GET /api/forms" , authMiddleware .HandlerFunc (formHandler .List ))
353+ mux .Handle ("GET /api/forms/{formId}" , authMiddleware .HandlerFunc (formHandler .Get ))
354+ mux .Handle ("GET /api/orgs/{slug}/forms" , tenantAuthMiddleware .Append (unitRole .Require (auth .RoleMember , slugResolver )).HandlerFunc (formHandler .ListByOrg ))
355+ mux .Handle ("POST /api/orgs/{slug}/forms" , tenantAuthMiddleware .Append (unitRole .Require (auth .RoleMember , slugResolver )).HandlerFunc (formHandler .CreateUnderOrg ))
356+ mux .Handle ("PATCH /api/forms/{formId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (availableByForm ).HandlerFunc (formHandler .Patch ))
357+ mux .Handle ("DELETE /api/forms/{formId}" , authMiddleware .Append (formOwner ).HandlerFunc (formHandler .Delete ))
358358
359359 // Form Resource
360- mux .Handle ("GET /api/forms/fonts" , authMiddleware .HandlerFunc (formHandler .GetFontsHandler ))
361- mux .Handle ("GET /api/forms/{formId}/cover" , authMiddleware .HandlerFunc (formHandler .GetCoverImageHandler ))
362- mux .Handle ("POST /api/forms/{formId}/cover" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (notArchivedByForm ).HandlerFunc (formHandler .UploadCoverImageHandler ))
360+ mux .Handle ("GET /api/forms/fonts" , authMiddleware .HandlerFunc (formHandler .GetFonts ))
361+ mux .Handle ("GET /api/forms/{formId}/cover" , authMiddleware .HandlerFunc (formHandler .GetCoverImage ))
362+ mux .Handle ("POST /api/forms/{formId}/cover" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (availableByForm ).HandlerFunc (formHandler .UploadCoverImage ))
363363
364364 // Form Operations
365- mux .Handle ("POST /api/forms/{formId}/unarchive" , authMiddleware .Append (unitRole .Require (auth .RoleAdmin , formResolver )).HandlerFunc (formHandler .UnarchiveHandler ))
366- mux .Handle ("POST /api/forms/{formId}/archive" , authMiddleware .Append (unitRole .Require (auth .RoleAdmin , formResolver )).HandlerFunc (formHandler .ArchiveHandler ))
365+ mux .Handle ("POST /api/forms/{formId}/unarchive" , authMiddleware .Append (unitRole .Require (auth .RoleAdmin , formResolver )).HandlerFunc (formHandler .Unarchive ))
366+ mux .Handle ("POST /api/forms/{formId}/archive" , authMiddleware .Append (unitRole .Require (auth .RoleAdmin , formResolver )).HandlerFunc (formHandler .Archive ))
367367 mux .Handle ("POST /api/forms/{formId}/publish" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).HandlerFunc (publishHandler .PublishForm ))
368+ mux .Handle ("POST /api/forms/{formId}/close" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).HandlerFunc (formHandler .Close ))
368369 mux .Handle ("GET /api/forms/{formId}/highlight" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).HandlerFunc (highlightHandler .Get ))
369370 mux .Handle ("PUT /api/forms/{formId}/highlight" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).HandlerFunc (highlightHandler .Put ))
370371 mux .Handle ("PATCH /api/forms/{formId}/highlight" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).HandlerFunc (highlightHandler .Patch ))
@@ -375,13 +376,13 @@ func main() {
375376 // --- (Get sections will also return questions)
376377 mux .Handle ("GET /api/forms/{formId}/sections" , authMiddleware .HandlerFunc (questionHandler .ListHandler ))
377378 // --- (Create sections via the workflow endpoint, not a direct sections API call)
378- mux .Handle ("PATCH /api/forms/{formId}/sections/{sectionId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (notArchivedByForm ).HandlerFunc (formHandler .UpdateSectionHandler ))
379+ mux .Handle ("PATCH /api/forms/{formId}/sections/{sectionId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (availableByForm ).HandlerFunc (formHandler .UpdateSection ))
379380
380381 // Question Management
381382 // ----------------------
382- mux .Handle ("POST /api/sections/{sectionId}/questions" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (notArchivedBySection ).HandlerFunc (questionHandler .AddHandler ))
383- mux .Handle ("PUT /api/sections/{sectionId}/questions/{questionId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (notArchivedBySection ).HandlerFunc (questionHandler .UpdateHandler ))
384- mux .Handle ("DELETE /api/sections/{sectionId}/questions/{questionId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (notArchivedBySection ).HandlerFunc (questionHandler .DeleteHandler ))
383+ mux .Handle ("POST /api/sections/{sectionId}/questions" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (availableBySection ).HandlerFunc (questionHandler .AddHandler ))
384+ mux .Handle ("PUT /api/sections/{sectionId}/questions/{questionId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (availableBySection ).HandlerFunc (questionHandler .UpdateHandler ))
385+ mux .Handle ("DELETE /api/sections/{sectionId}/questions/{questionId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , sectionResolver )).Append (availableBySection ).HandlerFunc (questionHandler .DeleteHandler ))
385386
386387 // Response Management
387388 // ----------------------
@@ -390,27 +391,27 @@ func main() {
390391 mux .Handle ("POST /api/forms/{formId}/responses/export/preview" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).HandlerFunc (responseHandler .ExportPreview ))
391392 mux .Handle ("POST /api/forms/{formId}/responses/export/download" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).HandlerFunc (responseHandler .ExportDownload ))
392393 mux .Handle ("GET /api/forms/{formId}/responses/{responseId}" , authMiddleware .HandlerFunc (responseHandler .Get ))
393- mux .Handle ("POST /api/forms/{formId}/responses" , authMiddleware .Append (notArchivedByForm ).HandlerFunc (responseHandler .Create ))
394+ mux .Handle ("POST /api/forms/{formId}/responses" , authMiddleware .Append (availableByForm ).HandlerFunc (responseHandler .Create ))
394395 mux .Handle ("DELETE /api/forms/{formId}/responses/{responseId}" , authMiddleware .Append (formOwner ).HandlerFunc (responseHandler .Delete ))
395396
396397 // Response Operations
397- mux .Handle ("POST /api/responses/{responseId}/submit" , authMiddleware .Append (notArchivedByResponse ).HandlerFunc (submitHandler .SubmitHandler ))
398- mux .Handle ("POST /api/responses/{responseId}/cancel" , authMiddleware .Append (notArchivedByResponse ).HandlerFunc (responseHandler .Cancel ))
398+ mux .Handle ("POST /api/responses/{responseId}/submit" , authMiddleware .Append (availableByResponse ).HandlerFunc (submitHandler .SubmitHandler ))
399+ mux .Handle ("POST /api/responses/{responseId}/cancel" , authMiddleware .Append (availableByResponse ).HandlerFunc (responseHandler .Cancel ))
399400
400401 // Answer Management
401402 // ----------------------
402403 mux .Handle ("GET /api/responses/{responseId}/questions/{questionId}" , authMiddleware .HandlerFunc (answerHandler .GetQuestionResponse ))
403- mux .Handle ("PATCH /api/responses/{responseId}/answers" , authMiddleware .Append (notArchivedByResponse ).HandlerFunc (answerHandler .UpdateFormResponse ))
404- mux .Handle ("POST /api/responses/{responseId}/questions/{questionId}/files" , authMiddleware .Append (notArchivedByResponse ).HandlerFunc (answerHandler .UploadQuestionFiles ))
405- mux .Handle ("GET /api/responses/{responseId}/questions/{questionId}/oauth" , authMiddleware .HandlerFunc (answerHandler .ConnectOAuthAccountStart ))
404+ mux .Handle ("PATCH /api/responses/{responseId}/answers" , authMiddleware .Append (availableByResponse ).HandlerFunc (answerHandler .UpdateFormResponse ))
405+ mux .Handle ("POST /api/responses/{responseId}/questions/{questionId}/files" , authMiddleware .Append (availableByResponse ).HandlerFunc (answerHandler .UploadQuestionFiles ))
406+ mux .Handle ("GET /api/responses/{responseId}/questions/{questionId}/oauth" , authMiddleware .Append ( availableByResponse ). HandlerFunc (answerHandler .ConnectOAuthAccountStart ))
406407 mux .Handle ("GET /api/oauth/questions/{provider}/callback" , authMiddleware .HandlerFunc (answerHandler .OAuthAnswerCallback ))
407408
408409 // Workflow Management
409410 // ----------------------
410411 mux .Handle ("GET /api/forms/{formId}/workflow" , authMiddleware .HandlerFunc (workflowHandler .GetHandler ))
411- mux .Handle ("POST /api/forms/{formId}/workflow/nodes" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (notArchivedByForm ).HandlerFunc (workflowHandler .CreateNodeHandler ))
412- mux .Handle ("PUT /api/forms/{formId}/workflow" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (notArchivedByForm ).HandlerFunc (workflowHandler .UpdateHandler ))
413- mux .Handle ("DELETE /api/forms/{formId}/workflow/nodes/{nodeId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (notArchivedByForm ).HandlerFunc (workflowHandler .DeleteNodeHandler ))
412+ mux .Handle ("POST /api/forms/{formId}/workflow/nodes" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (availableByForm ).HandlerFunc (workflowHandler .CreateNodeHandler ))
413+ mux .Handle ("PUT /api/forms/{formId}/workflow" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (availableByForm ).HandlerFunc (workflowHandler .UpdateHandler ))
414+ mux .Handle ("DELETE /api/forms/{formId}/workflow/nodes/{nodeId}" , authMiddleware .Append (unitRole .Require (auth .RoleMember , formResolver )).Append (availableByForm ).HandlerFunc (workflowHandler .DeleteNodeHandler ))
414415
415416 // View Management
416417 // ----------------------
0 commit comments