Documentation
¶
Index ¶
- func HandleError(ctx *gin.Context, err error)
- type AdminController
- func (c *AdminController) ActivateInjectable(ctx *gin.Context)
- func (c *AdminController) AssignSystemRole(ctx *gin.Context)
- func (c *AdminController) AssignSystemRoleByEmail(ctx *gin.Context)
- func (c *AdminController) BulkActivate(ctx *gin.Context)
- func (c *AdminController) BulkCreateAssignments(ctx *gin.Context)
- func (c *AdminController) BulkDeactivate(ctx *gin.Context)
- func (c *AdminController) BulkDeleteAssignments(ctx *gin.Context)
- func (c *AdminController) CreateAssignment(ctx *gin.Context)
- func (c *AdminController) CreateTenant(ctx *gin.Context)
- func (c *AdminController) DeactivateInjectable(ctx *gin.Context)
- func (c *AdminController) DeleteAssignment(ctx *gin.Context)
- func (c *AdminController) DeleteTenant(ctx *gin.Context)
- func (c *AdminController) ExcludeAssignment(ctx *gin.Context)
- func (c *AdminController) GetTenant(ctx *gin.Context)
- func (c *AdminController) IncludeAssignment(ctx *gin.Context)
- func (c *AdminController) ListAssignments(ctx *gin.Context)
- func (c *AdminController) ListSystemInjectables(ctx *gin.Context)
- func (c *AdminController) ListSystemUsers(ctx *gin.Context)
- func (c *AdminController) ListTenantWorkspaces(ctx *gin.Context)
- func (c *AdminController) ListTenantsPaginated(ctx *gin.Context)
- func (c *AdminController) RegisterRoutes(rg *gin.RouterGroup)
- func (c *AdminController) RevokeSystemRole(ctx *gin.Context)
- func (c *AdminController) UpdateTenant(ctx *gin.Context)
- func (c *AdminController) UpdateTenantStatus(ctx *gin.Context)
- type ContentInjectableController
- type ContentTemplateController
- func (c *ContentTemplateController) AddTemplateTags(ctx *gin.Context)
- func (c *ContentTemplateController) AssignDocumentType(ctx *gin.Context)
- func (c *ContentTemplateController) CloneTemplate(ctx *gin.Context)
- func (c *ContentTemplateController) CreateTemplate(ctx *gin.Context)
- func (c *ContentTemplateController) DeleteTemplate(ctx *gin.Context)
- func (c *ContentTemplateController) GetTemplate(ctx *gin.Context)
- func (c *ContentTemplateController) GetTemplateWithAllVersions(ctx *gin.Context)
- func (c *ContentTemplateController) ListTemplates(ctx *gin.Context)
- func (c *ContentTemplateController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
- func (c *ContentTemplateController) RemoveTemplateTag(ctx *gin.Context)
- func (c *ContentTemplateController) UpdateTemplate(ctx *gin.Context)
- type DocumentTypeController
- func (c *DocumentTypeController) CreateDocumentType(ctx *gin.Context)
- func (c *DocumentTypeController) DeleteDocumentType(ctx *gin.Context)
- func (c *DocumentTypeController) GetDocumentType(ctx *gin.Context)
- func (c *DocumentTypeController) GetDocumentTypeByCode(ctx *gin.Context)
- func (c *DocumentTypeController) ListDocumentTypes(ctx *gin.Context)
- func (c *DocumentTypeController) ListTemplatesByTypeCode(ctx *gin.Context)
- func (c *DocumentTypeController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
- func (c *DocumentTypeController) UpdateDocumentType(ctx *gin.Context)
- type MeController
- type RenderController
- type TemplateVersionController
- func (c *TemplateVersionController) AddInjectable(ctx *gin.Context)
- func (c *TemplateVersionController) ArchiveVersion(ctx *gin.Context)
- func (c *TemplateVersionController) CancelSchedule(ctx *gin.Context)
- func (c *TemplateVersionController) CreateVersion(ctx *gin.Context)
- func (c *TemplateVersionController) CreateVersionFromExisting(ctx *gin.Context)
- func (c *TemplateVersionController) DeleteVersion(ctx *gin.Context)
- func (c *TemplateVersionController) GetVersion(ctx *gin.Context)
- func (c *TemplateVersionController) ListVersions(ctx *gin.Context)
- func (c *TemplateVersionController) PublishVersion(ctx *gin.Context)
- func (c *TemplateVersionController) RegisterRoutes(templates *gin.RouterGroup)
- func (c *TemplateVersionController) RemoveInjectable(ctx *gin.Context)
- func (c *TemplateVersionController) ScheduleArchive(ctx *gin.Context)
- func (c *TemplateVersionController) SchedulePublish(ctx *gin.Context)
- func (c *TemplateVersionController) UpdateVersion(ctx *gin.Context)
- type TenantController
- func (c *TenantController) AddTenantMember(ctx *gin.Context)
- func (c *TenantController) CreateWorkspace(ctx *gin.Context)
- func (c *TenantController) DeleteWorkspace(ctx *gin.Context)
- func (c *TenantController) GetTenant(ctx *gin.Context)
- func (c *TenantController) GetTenantMember(ctx *gin.Context)
- func (c *TenantController) ListTenantMembers(ctx *gin.Context)
- func (c *TenantController) ListWorkspaces(ctx *gin.Context)
- func (c *TenantController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
- func (c *TenantController) RemoveTenantMember(ctx *gin.Context)
- func (c *TenantController) UpdateCurrentTenant(ctx *gin.Context)
- func (c *TenantController) UpdateTenantMemberRole(ctx *gin.Context)
- func (c *TenantController) UpdateWorkspaceStatus(ctx *gin.Context)
- type WorkspaceController
- func (c *WorkspaceController) ActivateInjectable(ctx *gin.Context)
- func (c *WorkspaceController) ArchiveWorkspace(ctx *gin.Context)
- func (c *WorkspaceController) CreateFolder(ctx *gin.Context)
- func (c *WorkspaceController) CreateTag(ctx *gin.Context)
- func (c *WorkspaceController) CreateWorkspaceInjectable(ctx *gin.Context)
- func (c *WorkspaceController) DeactivateInjectable(ctx *gin.Context)
- func (c *WorkspaceController) DeleteFolder(ctx *gin.Context)
- func (c *WorkspaceController) DeleteTag(ctx *gin.Context)
- func (c *WorkspaceController) DeleteWorkspaceInjectable(ctx *gin.Context)
- func (c *WorkspaceController) GetFolder(ctx *gin.Context)
- func (c *WorkspaceController) GetFolderTree(ctx *gin.Context)
- func (c *WorkspaceController) GetMember(ctx *gin.Context)
- func (c *WorkspaceController) GetTag(ctx *gin.Context)
- func (c *WorkspaceController) GetWorkspace(ctx *gin.Context)
- func (c *WorkspaceController) GetWorkspaceInjectable(ctx *gin.Context)
- func (c *WorkspaceController) InviteMember(ctx *gin.Context)
- func (c *WorkspaceController) ListFolders(ctx *gin.Context)
- func (c *WorkspaceController) ListMembers(ctx *gin.Context)
- func (c *WorkspaceController) ListTags(ctx *gin.Context)
- func (c *WorkspaceController) ListWorkspaceInjectables(ctx *gin.Context)
- func (c *WorkspaceController) MoveFolder(ctx *gin.Context)
- func (c *WorkspaceController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
- func (c *WorkspaceController) RemoveMember(ctx *gin.Context)
- func (c *WorkspaceController) UpdateFolder(ctx *gin.Context)
- func (c *WorkspaceController) UpdateMemberRole(ctx *gin.Context)
- func (c *WorkspaceController) UpdateTag(ctx *gin.Context)
- func (c *WorkspaceController) UpdateWorkspace(ctx *gin.Context)
- func (c *WorkspaceController) UpdateWorkspaceInjectable(ctx *gin.Context)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func HandleError ¶
HandleError maps domain errors to HTTP status codes. This is a centralized error handler that consolidates all error handling logic from the various controller-specific error handlers.
Types ¶
type AdminController ¶
type AdminController struct {
// contains filtered or unexported fields
}
AdminController handles admin-related HTTP requests. All routes require system-level roles (SUPERADMIN or PLATFORM_ADMIN).
func NewAdminController ¶
func NewAdminController( tenantUC organizationuc.TenantUseCase, systemRoleUC accessuc.SystemRoleUseCase, systemInjectableUC injectableuc.SystemInjectableUseCase, ) *AdminController
NewAdminController creates a new admin controller.
func (*AdminController) ActivateInjectable ¶
func (c *AdminController) ActivateInjectable(ctx *gin.Context)
ActivateInjectable activates a system injectable globally. @Summary Activate system injectable @Tags System - Injectables @Accept json @Produce json @Param key path string true "Injectable key" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/injectables/{key}/activate [patch] @Security BearerAuth
func (*AdminController) AssignSystemRole ¶
func (c *AdminController) AssignSystemRole(ctx *gin.Context)
AssignSystemRole assigns a system role to a user. Requires SUPERADMIN role. @Summary Assign system role @Tags System - Users @Accept json @Produce json @Param userId path string true "User ID" @Param request body dto.AssignSystemRoleRequest true "Role data" @Success 200 {object} dto.SystemRoleResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/users/{userId}/role [post] @Security BearerAuth
func (*AdminController) AssignSystemRoleByEmail ¶
func (c *AdminController) AssignSystemRoleByEmail(ctx *gin.Context)
AssignSystemRoleByEmail assigns a system role to a user identified by email. Creates a shadow user if the email doesn't exist. Requires SUPERADMIN role. @Summary Assign system role by email @Tags System - Users @Accept json @Produce json @Param request body dto.AssignSystemRoleByEmailRequest true "Email and role data" @Success 201 {object} dto.SystemRoleWithUserResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/users [post] @Security BearerAuth
func (*AdminController) BulkActivate ¶
func (c *AdminController) BulkActivate(ctx *gin.Context)
BulkActivate activates multiple system injectables globally. @Summary Bulk activate system injectables @Tags System - Injectables @Accept json @Produce json @Param request body dto.BulkKeysRequest true "Keys to activate" @Success 200 {object} dto.BulkOperationResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/injectables/bulk/activate [patch] @Security BearerAuth
func (*AdminController) BulkCreateAssignments ¶
func (c *AdminController) BulkCreateAssignments(ctx *gin.Context)
BulkCreateAssignments creates scoped assignments for multiple injectables. @Summary Bulk create scoped assignments @Tags System - Injectables @Accept json @Produce json @Param request body dto.BulkScopedAssignmentsRequest true "Keys and scope data" @Success 200 {object} dto.BulkOperationResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/injectables/bulk/assignments [post] @Security BearerAuth
func (*AdminController) BulkDeactivate ¶
func (c *AdminController) BulkDeactivate(ctx *gin.Context)
BulkDeactivate deactivates multiple system injectables globally. @Summary Bulk deactivate system injectables @Tags System - Injectables @Accept json @Produce json @Param request body dto.BulkKeysRequest true "Keys to deactivate" @Success 200 {object} dto.BulkOperationResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/injectables/bulk/deactivate [patch] @Security BearerAuth
func (*AdminController) BulkDeleteAssignments ¶
func (c *AdminController) BulkDeleteAssignments(ctx *gin.Context)
BulkDeleteAssignments deletes scoped assignments for multiple injectables. @Summary Bulk delete scoped assignments @Tags System - Injectables @Accept json @Produce json @Param request body dto.BulkScopedAssignmentsRequest true "Keys and scope data" @Success 200 {object} dto.BulkOperationResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/injectables/bulk/assignments [delete] @Security BearerAuth
func (*AdminController) CreateAssignment ¶
func (c *AdminController) CreateAssignment(ctx *gin.Context)
CreateAssignment creates a new assignment for a system injectable. @Summary Create injectable assignment @Tags System - Injectables @Accept json @Produce json @Param key path string true "Injectable key" @Param request body dto.CreateAssignmentRequest true "Assignment data" @Success 201 {object} dto.SystemInjectableAssignmentResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/injectables/{key}/assignments [post] @Security BearerAuth
func (*AdminController) CreateTenant ¶
func (c *AdminController) CreateTenant(ctx *gin.Context)
CreateTenant creates a new tenant. Requires SUPERADMIN role. @Summary Create tenant @Tags System - Tenants @Accept json @Produce json @Param request body dto.CreateTenantRequest true "Tenant data" @Success 201 {object} dto.TenantResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 409 {object} dto.ErrorResponse @Router /api/v1/system/tenants [post] @Security BearerAuth
func (*AdminController) DeactivateInjectable ¶
func (c *AdminController) DeactivateInjectable(ctx *gin.Context)
DeactivateInjectable deactivates a system injectable globally. @Summary Deactivate system injectable @Tags System - Injectables @Accept json @Produce json @Param key path string true "Injectable key" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/injectables/{key}/deactivate [patch] @Security BearerAuth
func (*AdminController) DeleteAssignment ¶
func (c *AdminController) DeleteAssignment(ctx *gin.Context)
DeleteAssignment deletes an assignment. @Summary Delete injectable assignment @Tags System - Injectables @Accept json @Produce json @Param key path string true "Injectable key" @Param assignmentId path string true "Assignment ID" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/injectables/{key}/assignments/{assignmentId} [delete] @Security BearerAuth
func (*AdminController) DeleteTenant ¶
func (c *AdminController) DeleteTenant(ctx *gin.Context)
DeleteTenant deletes a tenant. @Summary Delete tenant @Tags System - Tenants @Accept json @Produce json @Param tenantId path string true "Tenant ID" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/tenants/{tenantId} [delete] @Security BearerAuth
func (*AdminController) ExcludeAssignment ¶
func (c *AdminController) ExcludeAssignment(ctx *gin.Context)
ExcludeAssignment excludes an assignment (sets is_active=false). @Summary Exclude injectable assignment @Tags System - Injectables @Accept json @Produce json @Param key path string true "Injectable key" @Param assignmentId path string true "Assignment ID" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/injectables/{key}/assignments/{assignmentId}/exclude [patch] @Security BearerAuth
func (*AdminController) GetTenant ¶
func (c *AdminController) GetTenant(ctx *gin.Context)
GetTenant retrieves a tenant by ID. @Summary Get tenant @Tags System - Tenants @Accept json @Produce json @Param tenantId path string true "Tenant ID" @Success 200 {object} dto.TenantResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/tenants/{tenantId} [get] @Security BearerAuth
func (*AdminController) IncludeAssignment ¶
func (c *AdminController) IncludeAssignment(ctx *gin.Context)
IncludeAssignment includes an assignment (sets is_active=true). @Summary Include injectable assignment @Tags System - Injectables @Accept json @Produce json @Param key path string true "Injectable key" @Param assignmentId path string true "Assignment ID" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/injectables/{key}/assignments/{assignmentId}/include [patch] @Security BearerAuth
func (*AdminController) ListAssignments ¶
func (c *AdminController) ListAssignments(ctx *gin.Context)
ListAssignments lists all assignments for a system injectable. @Summary List injectable assignments @Tags System - Injectables @Accept json @Produce json @Param key path string true "Injectable key" @Success 200 {object} dto.ListAssignmentsResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/injectables/{key}/assignments [get] @Security BearerAuth
func (*AdminController) ListSystemInjectables ¶
func (c *AdminController) ListSystemInjectables(ctx *gin.Context)
ListSystemInjectables lists all system injectables with their active state. @Summary List system injectables @Tags System - Injectables @Accept json @Produce json @Success 200 {object} dto.ListSystemInjectablesResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/injectables [get] @Security BearerAuth
func (*AdminController) ListSystemUsers ¶
func (c *AdminController) ListSystemUsers(ctx *gin.Context)
ListSystemUsers lists all users with system roles. Requires SUPERADMIN role. @Summary List users with system roles @Tags System - Users @Accept json @Produce json @Success 200 {object} dto.ListResponse[dto.SystemRoleWithUserResponse] @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/users [get] @Security BearerAuth
func (*AdminController) ListTenantWorkspaces ¶
func (c *AdminController) ListTenantWorkspaces(ctx *gin.Context)
ListTenantWorkspaces lists workspaces for a specific tenant with optional search. @Summary List tenant workspaces @Tags System - Tenants @Accept json @Produce json @Param tenantId path string true "Tenant ID" @Param page query int false "Page number" default(1) @Param perPage query int false "Items per page" default(10) @Param q query string false "Search query (name)" @Success 200 {object} dto.PaginatedWorkspacesResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/tenants/{tenantId}/workspaces [get] @Security BearerAuth
func (*AdminController) ListTenantsPaginated ¶
func (c *AdminController) ListTenantsPaginated(ctx *gin.Context)
ListTenantsPaginated lists tenants with pagination and optional search. @Summary List tenants with pagination @Tags System - Tenants @Accept json @Produce json @Param page query int false "Page number" default(1) @Param perPage query int false "Items per page" default(10) @Param q query string false "Search query (name or code)" @Success 200 {object} dto.PaginatedTenantsResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/system/tenants [get] @Security BearerAuth
func (*AdminController) RegisterRoutes ¶
func (c *AdminController) RegisterRoutes(rg *gin.RouterGroup)
RegisterRoutes registers all admin routes. System routes do NOT require X-Workspace-ID or X-Tenant-ID headers.
func (*AdminController) RevokeSystemRole ¶
func (c *AdminController) RevokeSystemRole(ctx *gin.Context)
RevokeSystemRole revokes a user's system role. Requires SUPERADMIN role. @Summary Revoke system role @Tags System - Users @Accept json @Produce json @Param userId path string true "User ID" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/users/{userId}/role [delete] @Security BearerAuth
func (*AdminController) UpdateTenant ¶
func (c *AdminController) UpdateTenant(ctx *gin.Context)
UpdateTenant updates a tenant. @Summary Update tenant @Tags System - Tenants @Accept json @Produce json @Param tenantId path string true "Tenant ID" @Param request body dto.UpdateTenantRequest true "Tenant data" @Success 200 {object} dto.TenantResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/tenants/{tenantId} [put] @Security BearerAuth
func (*AdminController) UpdateTenantStatus ¶
func (c *AdminController) UpdateTenantStatus(ctx *gin.Context)
UpdateTenantStatus updates a tenant's status. Requires SUPERADMIN role. @Summary Update tenant status @Tags System - Tenants @Accept json @Produce json @Param tenantId path string true "Tenant ID" @Param request body dto.UpdateTenantStatusRequest true "Status data" @Success 200 {object} dto.TenantResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/system/tenants/{tenantId}/status [patch] @Security BearerAuth
type ContentInjectableController ¶
type ContentInjectableController struct {
// contains filtered or unexported fields
}
ContentInjectableController handles injectable-related HTTP requests.
func NewContentInjectableController ¶
func NewContentInjectableController( injectableUC injectableuc.InjectableUseCase, injectableMapper *mapper.InjectableMapper, ) *ContentInjectableController
NewContentInjectableController creates a new injectable controller.
func (*ContentInjectableController) GetInjectable ¶
func (c *ContentInjectableController) GetInjectable(ctx *gin.Context)
GetInjectable retrieves an injectable by ID. @Summary Get injectable @Tags Injectables @Accept json @Produce json @Param injectableId path string true "Injectable ID" @Success 200 {object} dto.InjectableResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/injectables/{injectableId} [get]
func (*ContentInjectableController) ListInjectables ¶
func (c *ContentInjectableController) ListInjectables(ctx *gin.Context)
ListInjectables lists all injectable definitions for a workspace. @Summary List injectables @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param locale query string false "Locale for translations (default: es)" @Success 200 {object} dto.ListInjectablesResponse @Failure 401 {object} dto.ErrorResponse @Router /api/v1/content/injectables [get]
func (*ContentInjectableController) RegisterRoutes ¶
func (c *ContentInjectableController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
RegisterRoutes registers all injectable routes. All injectable routes require X-Workspace-ID header. Note: Injectables are read-only - they are managed via database migrations/seeds.
type ContentTemplateController ¶
type ContentTemplateController struct {
// contains filtered or unexported fields
}
ContentTemplateController handles template-related HTTP requests.
func NewContentTemplateController ¶
func NewContentTemplateController( templateUC templateuc.TemplateUseCase, templateMapper *mapper.TemplateMapper, versionController *TemplateVersionController, ) *ContentTemplateController
NewContentTemplateController creates a new template controller.
func (*ContentTemplateController) AddTemplateTags ¶
func (c *ContentTemplateController) AddTemplateTags(ctx *gin.Context)
AddTemplateTags adds tags to a template. @Summary Add tags to template @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param request body dto.AddTagsRequest true "Tag IDs" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/tags [post]
func (*ContentTemplateController) AssignDocumentType ¶
func (c *ContentTemplateController) AssignDocumentType(ctx *gin.Context)
AssignDocumentType assigns or unassigns a document type to a template. @Summary Assign document type to template @Description Assigns a document type to a template. If the type is already assigned to another template in the workspace and force=false, returns conflict info. Use force=true to reassign the type (previous template will have its type unassigned). @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param request body dto.AssignDocumentTypeRequest true "Document type assignment data" @Success 200 {object} dto.AssignDocumentTypeResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Failure 409 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/document-type [put]
func (*ContentTemplateController) CloneTemplate ¶
func (c *ContentTemplateController) CloneTemplate(ctx *gin.Context)
CloneTemplate creates a copy of an existing template from a specific version. @Summary Clone template from specific version @Description Clones a template using the content from a specific version (identified by versionId in request body). The versionId must belong to the specified templateId. @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param request body dto.CloneTemplateRequest true "Clone data (versionId is required and must belong to the template)" @Success 201 {object} dto.TemplateCreateResponse @Failure 400 {object} dto.ErrorResponse "Bad request (invalid versionId, version doesn't belong to template, validation error)" @Failure 404 {object} dto.ErrorResponse "Template or version not found" @Failure 409 {object} dto.ErrorResponse "Template title already exists" @Router /api/v1/content/templates/{templateId}/clone [post]
func (*ContentTemplateController) CreateTemplate ¶
func (c *ContentTemplateController) CreateTemplate(ctx *gin.Context)
CreateTemplate creates a new template with an initial draft version. @Summary Create template @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param request body dto.CreateTemplateRequest true "Template data" @Success 201 {object} dto.TemplateCreateResponse @Failure 400 {object} dto.ErrorResponse @Failure 409 {object} dto.ErrorResponse @Router /api/v1/content/templates [post]
func (*ContentTemplateController) DeleteTemplate ¶
func (c *ContentTemplateController) DeleteTemplate(ctx *gin.Context)
DeleteTemplate deletes a template and all its versions. @Summary Delete template @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Success 204 "No Content" @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId} [delete]
func (*ContentTemplateController) GetTemplate ¶
func (c *ContentTemplateController) GetTemplate(ctx *gin.Context)
GetTemplate retrieves a template by ID with published version details. @Summary Get template @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Success 200 {object} dto.TemplateWithDetailsResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId} [get]
func (*ContentTemplateController) GetTemplateWithAllVersions ¶
func (c *ContentTemplateController) GetTemplateWithAllVersions(ctx *gin.Context)
GetTemplateWithAllVersions retrieves a template with all its versions. @Summary Get template with all versions @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Success 200 {object} dto.TemplateWithAllVersionsResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/all-versions [get]
func (*ContentTemplateController) ListTemplates ¶
func (c *ContentTemplateController) ListTemplates(ctx *gin.Context)
ListTemplates lists all templates in a workspace. @Summary List templates @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param folderId query string false "Filter by folder ID. Use 'root' to get only root-level templates (no folder)" @Param hasPublishedVersion query bool false "Filter by published status" @Param tagIds query []string false "Filter by tag IDs" @Param search query string false "Search by title" @Param limit query int false "Limit results" @Param offset query int false "Offset results" @Success 200 {object} dto.ListTemplatesResponse @Failure 401 {object} dto.ErrorResponse @Router /api/v1/content/templates [get]
func (*ContentTemplateController) RegisterRoutes ¶
func (c *ContentTemplateController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
RegisterRoutes registers all template routes. All template routes require X-Workspace-ID header.
func (*ContentTemplateController) RemoveTemplateTag ¶
func (c *ContentTemplateController) RemoveTemplateTag(ctx *gin.Context)
RemoveTemplateTag removes a tag from a template. @Summary Remove tag from template @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param tagId path string true "Tag ID" @Success 204 "No Content" @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/tags/{tagId} [delete]
func (*ContentTemplateController) UpdateTemplate ¶
func (c *ContentTemplateController) UpdateTemplate(ctx *gin.Context)
UpdateTemplate updates a template's metadata. @Summary Update template @Description Updates a template's metadata. Use folderId="root" to move the template to the root folder. @Tags Templates @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param request body dto.UpdateTemplateRequest true "Template data (folderId can be a folder UUID or 'root' to move to root)" @Success 200 {object} dto.TemplateResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId} [put]
type DocumentTypeController ¶
type DocumentTypeController struct {
// contains filtered or unexported fields
}
DocumentTypeController handles document type HTTP requests. All routes require X-Tenant-ID header and appropriate tenant role.
func NewDocumentTypeController ¶
func NewDocumentTypeController( docTypeUC cataloguc.DocumentTypeUseCase, templateUC templateuc.TemplateUseCase, templateMapper *mapper.TemplateMapper, ) *DocumentTypeController
NewDocumentTypeController creates a new document type controller.
func (*DocumentTypeController) CreateDocumentType ¶
func (c *DocumentTypeController) CreateDocumentType(ctx *gin.Context)
CreateDocumentType creates a new document type. @Summary Create document type @Tags Tenant - Document Types @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param request body dto.CreateDocumentTypeRequest true "Document type data" @Success 201 {object} dto.DocumentTypeResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 409 {object} dto.ErrorResponse @Router /api/v1/tenant/document-types [post] @Security BearerAuth
func (*DocumentTypeController) DeleteDocumentType ¶
func (c *DocumentTypeController) DeleteDocumentType(ctx *gin.Context)
DeleteDocumentType attempts to delete a document type. Global types (from SYS tenant) cannot be deleted. If templates are assigned, returns information about them without deleting. Use force=true to delete anyway (templates will have their type set to null). Use replaceWithId to replace the type in all templates before deleting. @Summary Delete document type @Tags Tenant - Document Types @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param id path string true "Document Type ID" @Param request body dto.DeleteDocumentTypeRequest false "Delete options" @Success 200 {object} dto.DeleteDocumentTypeResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/document-types/{id} [delete] @Security BearerAuth
func (*DocumentTypeController) GetDocumentType ¶
func (c *DocumentTypeController) GetDocumentType(ctx *gin.Context)
GetDocumentType retrieves a document type by ID. @Summary Get document type by ID @Tags Tenant - Document Types @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param id path string true "Document Type ID" @Success 200 {object} dto.DocumentTypeResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/document-types/{id} [get] @Security BearerAuth
func (*DocumentTypeController) GetDocumentTypeByCode ¶
func (c *DocumentTypeController) GetDocumentTypeByCode(ctx *gin.Context)
GetDocumentTypeByCode retrieves a document type by code within the current tenant. @Summary Get document type by code @Tags Tenant - Document Types @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param code path string true "Document Type Code" @Success 200 {object} dto.DocumentTypeResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/document-types/code/{code} [get] @Security BearerAuth
func (*DocumentTypeController) ListDocumentTypes ¶
func (c *DocumentTypeController) ListDocumentTypes(ctx *gin.Context)
ListDocumentTypes lists all document types for the current tenant with pagination. @Summary List document types @Tags Tenant - Document Types @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param page query int false "Page number" default(1) @Param perPage query int false "Items per page" default(10) @Param q query string false "Search query for document type name or code" @Success 200 {object} dto.PaginatedDocumentTypesResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/tenant/document-types [get] @Security BearerAuth
func (*DocumentTypeController) ListTemplatesByTypeCode ¶
func (c *DocumentTypeController) ListTemplatesByTypeCode(ctx *gin.Context)
ListTemplatesByTypeCode lists all templates using a specific document type code across the tenant. @Summary List templates by document type code @Tags Tenant - Document Types @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param code path string true "Document Type Code" @Success 200 {object} dto.ListTemplatesResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/document-types/code/{code}/templates [get] @Security BearerAuth
func (*DocumentTypeController) RegisterRoutes ¶
func (c *DocumentTypeController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
RegisterRoutes registers all /tenant/document-types routes. These routes require X-Tenant-ID header and tenant context.
func (*DocumentTypeController) UpdateDocumentType ¶
func (c *DocumentTypeController) UpdateDocumentType(ctx *gin.Context)
UpdateDocumentType updates a document type's name and description. Global types (from SYS tenant) cannot be modified. @Summary Update document type @Tags Tenant - Document Types @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param id path string true "Document Type ID" @Param request body dto.UpdateDocumentTypeRequest true "Document type data" @Success 200 {object} dto.DocumentTypeResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/document-types/{id} [put] @Security BearerAuth
type MeController ¶
type MeController struct {
// contains filtered or unexported fields
}
MeController handles user-specific HTTP requests. These routes don't require X-Tenant-ID or X-Workspace-ID headers.
func NewMeController ¶
func NewMeController( tenantUC organizationuc.TenantUseCase, tenantMemberRepo port.TenantMemberRepository, workspaceMemberRepo port.WorkspaceMemberRepository, accessHistoryUC accessuc.UserAccessHistoryUseCase, ) *MeController
NewMeController creates a new me controller.
func (*MeController) GetMyRoles ¶
func (c *MeController) GetMyRoles(ctx *gin.Context)
GetMyRoles returns the roles of the current user. Optionally includes tenant and workspace roles if X-Tenant-ID and X-Workspace-ID headers are provided. @Summary Get my roles @Description Returns the current user's roles. Always includes system role if assigned. @Description Optionally includes tenant role if X-Tenant-ID header is provided. @Description Optionally includes workspace role if X-Workspace-ID header is provided. @Tags Me @Accept json @Produce json @Param X-Tenant-ID header string false "Tenant ID to check role for" @Param X-Workspace-ID header string false "Workspace ID to check role for" @Success 200 {object} dto.MyRolesResponse @Failure 401 {object} dto.ErrorResponse @Router /api/v1/me/roles [get] @Security BearerAuth
func (*MeController) ListMyTenants ¶
func (c *MeController) ListMyTenants(ctx *gin.Context)
ListMyTenants lists tenants the current user is a member of with pagination and optional search. @Summary List my tenants with pagination and optional search @Description Lists tenants where the user is an active member. Supports pagination and optional search by name/code. @Tags Me @Accept json @Produce json @Param page query int false "Page number" default(1) @Param perPage query int false "Items per page" default(10) @Param q query string false "Search query for tenant name or code" @Success 200 {object} dto.PaginatedTenantsWithRoleResponse @Failure 401 {object} dto.ErrorResponse @Router /api/v1/me/tenants [get] @Security BearerAuth
func (*MeController) RecordAccess ¶
func (c *MeController) RecordAccess(ctx *gin.Context)
RecordAccess records that the user accessed a tenant or workspace. @Summary Record resource access @Description Records that the user accessed a tenant or workspace for quick access history @Tags Me @Accept json @Produce json @Param request body dto.RecordAccessRequest true "Access details" @Success 204 "Access recorded" @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/me/access [post] @Security BearerAuth
func (*MeController) RegisterRoutes ¶
func (c *MeController) RegisterRoutes(rg *gin.RouterGroup)
RegisterRoutes registers all /me routes. These routes only require authentication, no tenant or workspace context.
type RenderController ¶
type RenderController struct {
// contains filtered or unexported fields
}
RenderController handles document rendering HTTP requests. For document type render routes, no RBAC is enforced in this controller. Users should implement custom authorization via engine.UseAPIMiddleware() if needed.
func NewRenderController ¶
func NewRenderController( versionUC templateuc.TemplateVersionUseCase, documentTypeRenderUC templateuc.InternalRenderUseCase, pdfRenderer port.PDFRenderer, ) *RenderController
NewRenderController creates a new render controller.
func (*RenderController) PreviewVersion ¶
func (c *RenderController) PreviewVersion(ctx *gin.Context)
PreviewVersion generates a preview PDF for a template version. @Summary Generate preview PDF @Tags Template Versions @Accept json @Produce application/pdf @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Param request body dto.RenderPreviewRequest true "Injectable values" @Success 200 {file} application/pdf @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Failure 500 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/preview [post]
func (*RenderController) RegisterRoutes ¶
func (c *RenderController) RegisterRoutes(versions *gin.RouterGroup)
RegisterRoutes registers all render routes. These routes are nested under /content/templates/:templateId/versions/:versionId
func (*RenderController) RegisterWorkspaceRoutes ¶
func (c *RenderController) RegisterWorkspaceRoutes(workspaceGroup *gin.RouterGroup)
RegisterWorkspaceRoutes registers document type render routes under workspace. Route: POST /api/v1/workspace/document-types/{code}/render No RBAC is enforced - users should add custom authorization via engine.UseAPIMiddleware().
func (*RenderController) RenderByDocumentType ¶
func (c *RenderController) RenderByDocumentType(ctx *gin.Context)
RenderByDocumentType resolves a template by document type code and renders a PDF. Uses the fallback chain: workspace → tenant system workspace → global system. @Summary Render PDF by document type @Tags Workspace - Render @Accept json @Produce application/pdf @Param X-Workspace-ID header string true "Workspace ID" @Param code path string true "Document type code" @Param disposition query string false "Content disposition: inline (default) or attachment" @Param request body dto.RenderRequest false "Injectable values" @Success 200 {file} application/pdf @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Failure 500 {object} dto.ErrorResponse @Router /api/v1/workspace/document-types/{code}/render [post] @Security BearerAuth
type TemplateVersionController ¶
type TemplateVersionController struct {
// contains filtered or unexported fields
}
TemplateVersionController handles template version HTTP requests.
func NewTemplateVersionController ¶
func NewTemplateVersionController( versionUC templateuc.TemplateVersionUseCase, versionMapper *mapper.TemplateVersionMapper, templateMapper *mapper.TemplateMapper, renderController *RenderController, ) *TemplateVersionController
NewTemplateVersionController creates a new template version controller.
func (*TemplateVersionController) AddInjectable ¶
func (c *TemplateVersionController) AddInjectable(ctx *gin.Context)
AddInjectable adds an injectable to a version. @Summary Add injectable to version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Param request body dto.AddVersionInjectableRequest true "Injectable data" @Success 201 {object} dto.TemplateVersionInjectableResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/injectables [post]
func (*TemplateVersionController) ArchiveVersion ¶
func (c *TemplateVersionController) ArchiveVersion(ctx *gin.Context)
ArchiveVersion archives a published version. @Summary Archive template version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/archive [post]
func (*TemplateVersionController) CancelSchedule ¶
func (c *TemplateVersionController) CancelSchedule(ctx *gin.Context)
CancelSchedule cancels any scheduled publication or archival. @Summary Cancel scheduled action @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/schedule [delete]
func (*TemplateVersionController) CreateVersion ¶
func (c *TemplateVersionController) CreateVersion(ctx *gin.Context)
CreateVersion creates a new version for a template. @Summary Create template version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param request body dto.CreateVersionRequest true "Version data" @Success 201 {object} dto.TemplateVersionResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions [post]
func (*TemplateVersionController) CreateVersionFromExisting ¶
func (c *TemplateVersionController) CreateVersionFromExisting(ctx *gin.Context)
CreateVersionFromExisting creates a new version copying content from an existing one. @Summary Create version from existing @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param request body dto.CreateVersionFromExistingRequest true "Version data" @Success 201 {object} dto.TemplateVersionResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/from-existing [post]
func (*TemplateVersionController) DeleteVersion ¶
func (c *TemplateVersionController) DeleteVersion(ctx *gin.Context)
DeleteVersion deletes a draft version. @Summary Delete template version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId} [delete]
func (*TemplateVersionController) GetVersion ¶
func (c *TemplateVersionController) GetVersion(ctx *gin.Context)
GetVersion retrieves a version by ID with details. @Summary Get template version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Success 200 {object} dto.TemplateVersionDetailResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId} [get]
func (*TemplateVersionController) ListVersions ¶
func (c *TemplateVersionController) ListVersions(ctx *gin.Context)
ListVersions lists all versions for a template. @Summary List template versions @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Success 200 {object} dto.ListTemplateVersionsResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions [get]
func (*TemplateVersionController) PublishVersion ¶
func (c *TemplateVersionController) PublishVersion(ctx *gin.Context)
PublishVersion publishes a version. @Summary Publish template version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/publish [post]
func (*TemplateVersionController) RegisterRoutes ¶
func (c *TemplateVersionController) RegisterRoutes(templates *gin.RouterGroup)
RegisterRoutes registers all template version routes. These routes are nested under /content/templates/:templateId/versions
func (*TemplateVersionController) RemoveInjectable ¶
func (c *TemplateVersionController) RemoveInjectable(ctx *gin.Context)
RemoveInjectable removes an injectable from a version. @Summary Remove injectable from version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Param injectableId path string true "Injectable ID" @Success 204 "No Content" @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/injectables/{injectableId} [delete]
func (*TemplateVersionController) ScheduleArchive ¶
func (c *TemplateVersionController) ScheduleArchive(ctx *gin.Context)
ScheduleArchive schedules the published version for future archival. @Summary Schedule version archival @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Param request body dto.ScheduleArchiveRequest true "Schedule data" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/schedule-archive [post]
func (*TemplateVersionController) SchedulePublish ¶
func (c *TemplateVersionController) SchedulePublish(ctx *gin.Context)
SchedulePublish schedules a version for future publication. @Summary Schedule version publication @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Param request body dto.SchedulePublishRequest true "Schedule data" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId}/schedule-publish [post]
func (*TemplateVersionController) UpdateVersion ¶
func (c *TemplateVersionController) UpdateVersion(ctx *gin.Context)
UpdateVersion updates a version. @Summary Update template version @Tags Template Versions @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param templateId path string true "Template ID" @Param versionId path string true "Version ID" @Param request body dto.UpdateVersionRequest true "Version data" @Success 200 {object} dto.TemplateVersionResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/content/templates/{templateId}/versions/{versionId} [put]
type TenantController ¶
type TenantController struct {
// contains filtered or unexported fields
}
TenantController handles tenant-scoped HTTP requests. All routes require X-Tenant-ID header and appropriate tenant role.
func NewTenantController ¶
func NewTenantController( tenantUC organizationuc.TenantUseCase, workspaceUC organizationuc.WorkspaceUseCase, tenantMemberUC organizationuc.TenantMemberUseCase, ) *TenantController
NewTenantController creates a new tenant controller.
func (*TenantController) AddTenantMember ¶
func (c *TenantController) AddTenantMember(ctx *gin.Context)
AddTenantMember adds a user to the current tenant. @Summary Add tenant member @Tags Tenant - Members @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param request body dto.AddTenantMemberRequest true "Member data" @Success 201 {object} dto.TenantMemberResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 409 {object} dto.ErrorResponse @Router /api/v1/tenant/members [post] @Security BearerAuth
func (*TenantController) CreateWorkspace ¶
func (c *TenantController) CreateWorkspace(ctx *gin.Context)
CreateWorkspace creates a new workspace in the current tenant. @Summary Create workspace in tenant @Tags Tenant - Workspaces @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param request body dto.CreateWorkspaceRequest true "Workspace data" @Success 201 {object} dto.WorkspaceResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/tenant/workspaces [post] @Security BearerAuth
func (*TenantController) DeleteWorkspace ¶
func (c *TenantController) DeleteWorkspace(ctx *gin.Context)
DeleteWorkspace deletes a workspace from the current tenant. @Summary Delete workspace from tenant @Tags Tenant - Workspaces @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param workspaceId path string true "Workspace ID" @Success 204 "No Content" @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/workspaces/{workspaceId} [delete] @Security BearerAuth
func (*TenantController) GetTenant ¶
func (c *TenantController) GetTenant(ctx *gin.Context)
GetTenant retrieves the current tenant info. @Summary Get current tenant @Tags Tenant @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Success 200 {object} dto.TenantResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant [get] @Security BearerAuth
func (*TenantController) GetTenantMember ¶
func (c *TenantController) GetTenantMember(ctx *gin.Context)
GetTenantMember retrieves a specific tenant member. @Summary Get tenant member @Tags Tenant - Members @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param memberId path string true "Member ID" @Success 200 {object} dto.TenantMemberResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/members/{memberId} [get] @Security BearerAuth
func (*TenantController) ListTenantMembers ¶
func (c *TenantController) ListTenantMembers(ctx *gin.Context)
ListTenantMembers lists all members of the current tenant. @Summary List tenant members @Tags Tenant - Members @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Success 200 {object} dto.ListResponse[dto.TenantMemberResponse] @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/tenant/members [get] @Security BearerAuth
func (*TenantController) ListWorkspaces ¶
func (c *TenantController) ListWorkspaces(ctx *gin.Context)
ListWorkspaces lists workspaces with pagination and optional search in the current tenant. @Summary List workspaces with pagination and optional search @Tags Tenant - Workspaces @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param page query int false "Page number" default(1) @Param perPage query int false "Items per page" default(10) @Param q query string false "Search query for workspace name" @Param status query string false "Filter by status (ACTIVE, SUSPENDED, ARCHIVED)" @Success 200 {object} dto.PaginatedWorkspacesResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Router /api/v1/tenant/workspaces [get] @Security BearerAuth
func (*TenantController) RegisterRoutes ¶
func (c *TenantController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
RegisterRoutes registers all /tenant routes. These routes require X-Tenant-ID header and tenant context.
func (*TenantController) RemoveTenantMember ¶
func (c *TenantController) RemoveTenantMember(ctx *gin.Context)
RemoveTenantMember removes a member from the current tenant. @Summary Remove tenant member @Tags Tenant - Members @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param memberId path string true "Member ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/members/{memberId} [delete] @Security BearerAuth
func (*TenantController) UpdateCurrentTenant ¶
func (c *TenantController) UpdateCurrentTenant(ctx *gin.Context)
UpdateCurrentTenant updates the current tenant's info. @Summary Update current tenant @Tags Tenant @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param request body dto.UpdateTenantRequest true "Tenant data" @Success 200 {object} dto.TenantResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant [put] @Security BearerAuth
func (*TenantController) UpdateTenantMemberRole ¶
func (c *TenantController) UpdateTenantMemberRole(ctx *gin.Context)
UpdateTenantMemberRole updates a tenant member's role. @Summary Update tenant member role @Tags Tenant - Members @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param memberId path string true "Member ID" @Param request body dto.UpdateTenantMemberRoleRequest true "Role data" @Success 200 {object} dto.TenantMemberResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/members/{memberId} [put] @Security BearerAuth
func (*TenantController) UpdateWorkspaceStatus ¶
func (c *TenantController) UpdateWorkspaceStatus(ctx *gin.Context)
UpdateWorkspaceStatus updates a workspace's status in the current tenant. @Summary Update workspace status @Tags Tenant - Workspaces @Accept json @Produce json @Param X-Tenant-ID header string true "Tenant ID" @Param workspaceId path string true "Workspace ID" @Param request body dto.UpdateWorkspaceStatusRequest true "Status data" @Success 200 {object} dto.WorkspaceResponse @Failure 400 {object} dto.ErrorResponse @Failure 401 {object} dto.ErrorResponse @Failure 403 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/tenant/workspaces/{workspaceId}/status [patch] @Security BearerAuth
type WorkspaceController ¶
type WorkspaceController struct {
// contains filtered or unexported fields
}
WorkspaceController handles workspace-related HTTP requests.
func NewWorkspaceController ¶
func NewWorkspaceController( workspaceUC organizationuc.WorkspaceUseCase, folderUC cataloguc.FolderUseCase, tagUC cataloguc.TagUseCase, memberUC organizationuc.WorkspaceMemberUseCase, workspaceInjectableUC injectableuc.WorkspaceInjectableUseCase, injectableMapper *mapper.InjectableMapper, ) *WorkspaceController
NewWorkspaceController creates a new workspace controller.
func (*WorkspaceController) ActivateInjectable ¶
func (c *WorkspaceController) ActivateInjectable(ctx *gin.Context)
ActivateInjectable activates an injectable. @Summary Activate injectable @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param injectableId path string true "Injectable ID" @Success 200 {object} dto.WorkspaceInjectableResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/injectables/{injectableId}/activate [post]
func (*WorkspaceController) ArchiveWorkspace ¶
func (c *WorkspaceController) ArchiveWorkspace(ctx *gin.Context)
ArchiveWorkspace archives the current workspace. @Summary Archive current workspace @Tags Workspaces @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace [delete]
func (*WorkspaceController) CreateFolder ¶
func (c *WorkspaceController) CreateFolder(ctx *gin.Context)
CreateFolder creates a new folder in the current workspace. @Summary Create folder @Tags Folders @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param request body dto.CreateFolderRequest true "Folder data" @Success 201 {object} dto.FolderResponse @Failure 400 {object} dto.ErrorResponse @Router /api/v1/workspace/folders [post]
func (*WorkspaceController) CreateTag ¶
func (c *WorkspaceController) CreateTag(ctx *gin.Context)
CreateTag creates a new tag in the current workspace. @Summary Create tag @Tags Tags @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param request body dto.CreateTagRequest true "Tag data" @Success 201 {object} dto.TagResponse @Failure 400 {object} dto.ErrorResponse @Router /api/v1/workspace/tags [post]
func (*WorkspaceController) CreateWorkspaceInjectable ¶
func (c *WorkspaceController) CreateWorkspaceInjectable(ctx *gin.Context)
CreateWorkspaceInjectable creates a new injectable in the current workspace. @Summary Create workspace injectable @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param request body dto.CreateWorkspaceInjectableRequest true "Injectable data" @Success 201 {object} dto.WorkspaceInjectableResponse @Failure 400 {object} dto.ErrorResponse @Router /api/v1/workspace/injectables [post]
func (*WorkspaceController) DeactivateInjectable ¶
func (c *WorkspaceController) DeactivateInjectable(ctx *gin.Context)
DeactivateInjectable deactivates an injectable. @Summary Deactivate injectable @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param injectableId path string true "Injectable ID" @Success 200 {object} dto.WorkspaceInjectableResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/injectables/{injectableId}/deactivate [post]
func (*WorkspaceController) DeleteFolder ¶
func (c *WorkspaceController) DeleteFolder(ctx *gin.Context)
DeleteFolder deletes a folder. @Summary Delete folder @Tags Folders @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param folderId path string true "Folder ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/folders/{folderId} [delete]
func (*WorkspaceController) DeleteTag ¶
func (c *WorkspaceController) DeleteTag(ctx *gin.Context)
DeleteTag deletes a tag. @Summary Delete tag @Tags Tags @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param tagId path string true "Tag ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/tags/{tagId} [delete]
func (*WorkspaceController) DeleteWorkspaceInjectable ¶
func (c *WorkspaceController) DeleteWorkspaceInjectable(ctx *gin.Context)
DeleteWorkspaceInjectable soft-deletes an injectable. @Summary Delete workspace injectable @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param injectableId path string true "Injectable ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/injectables/{injectableId} [delete]
func (*WorkspaceController) GetFolder ¶
func (c *WorkspaceController) GetFolder(ctx *gin.Context)
GetFolder retrieves a folder by ID. @Summary Get folder @Tags Folders @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param folderId path string true "Folder ID" @Success 200 {object} dto.FolderResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/folders/{folderId} [get]
func (*WorkspaceController) GetFolderTree ¶
func (c *WorkspaceController) GetFolderTree(ctx *gin.Context)
GetFolderTree gets the folder tree for the current workspace. @Summary Get folder tree @Tags Folders @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Success 200 {array} dto.FolderTreeResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/folders/tree [get]
func (*WorkspaceController) GetMember ¶
func (c *WorkspaceController) GetMember(ctx *gin.Context)
GetMember retrieves a member by ID. @Summary Get member @Tags Members @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param memberId path string true "Member ID" @Success 200 {object} dto.MemberResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/members/{memberId} [get]
func (*WorkspaceController) GetTag ¶
func (c *WorkspaceController) GetTag(ctx *gin.Context)
GetTag retrieves a tag by ID. @Summary Get tag @Tags Tags @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param tagId path string true "Tag ID" @Success 200 {object} dto.TagResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/tags/{tagId} [get]
func (*WorkspaceController) GetWorkspace ¶
func (c *WorkspaceController) GetWorkspace(ctx *gin.Context)
GetWorkspace retrieves the current workspace. @Summary Get current workspace @Tags Workspaces @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Success 200 {object} dto.WorkspaceResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace [get]
func (*WorkspaceController) GetWorkspaceInjectable ¶
func (c *WorkspaceController) GetWorkspaceInjectable(ctx *gin.Context)
GetWorkspaceInjectable retrieves an injectable by ID. @Summary Get workspace injectable @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param injectableId path string true "Injectable ID" @Success 200 {object} dto.WorkspaceInjectableResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/injectables/{injectableId} [get]
func (*WorkspaceController) InviteMember ¶
func (c *WorkspaceController) InviteMember(ctx *gin.Context)
InviteMember invites a user to the current workspace. @Summary Invite member @Tags Members @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param request body dto.InviteMemberRequest true "Member invitation data" @Success 201 {object} dto.MemberResponse @Failure 400 {object} dto.ErrorResponse @Failure 409 {object} dto.ErrorResponse @Router /api/v1/workspace/members [post]
func (*WorkspaceController) ListFolders ¶
func (c *WorkspaceController) ListFolders(ctx *gin.Context)
ListFolders lists all folders in the current workspace. @Summary List folders @Tags Folders @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Success 200 {object} dto.ListResponse[dto.FolderResponse] @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/folders [get]
func (*WorkspaceController) ListMembers ¶
func (c *WorkspaceController) ListMembers(ctx *gin.Context)
ListMembers lists all members of the current workspace. @Summary List workspace members @Tags Members @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Success 200 {object} dto.ListResponse[dto.MemberResponse] @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/members [get]
func (*WorkspaceController) ListTags ¶
func (c *WorkspaceController) ListTags(ctx *gin.Context)
ListTags lists all tags in the current workspace. @Summary List tags @Tags Tags @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Success 200 {object} dto.ListResponse[dto.TagWithCountResponse] @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/tags [get]
func (*WorkspaceController) ListWorkspaceInjectables ¶
func (c *WorkspaceController) ListWorkspaceInjectables(ctx *gin.Context)
ListWorkspaceInjectables lists all injectables owned by the current workspace. @Summary List workspace injectables @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Success 200 {object} dto.ListWorkspaceInjectablesResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/injectables [get]
func (*WorkspaceController) MoveFolder ¶
func (c *WorkspaceController) MoveFolder(ctx *gin.Context)
MoveFolder moves a folder to a new parent. @Summary Move folder @Tags Folders @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param folderId path string true "Folder ID" @Param request body dto.MoveFolderRequest true "Move data" @Success 200 {object} dto.FolderResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/folders/{folderId}/move [patch]
func (*WorkspaceController) RegisterRoutes ¶
func (c *WorkspaceController) RegisterRoutes(rg *gin.RouterGroup, middlewareProvider *middleware.Provider)
RegisterRoutes registers all workspace routes. Note: Workspace listing and creation are now handled by TenantController under /tenant/workspaces. This controller only handles operations within a specific workspace (requiring X-Workspace-ID).
func (*WorkspaceController) RemoveMember ¶
func (c *WorkspaceController) RemoveMember(ctx *gin.Context)
RemoveMember removes a member from the workspace. @Summary Remove member @Tags Members @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param memberId path string true "Member ID" @Success 204 "No Content" @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/members/{memberId} [delete]
func (*WorkspaceController) UpdateFolder ¶
func (c *WorkspaceController) UpdateFolder(ctx *gin.Context)
UpdateFolder updates a folder. @Summary Update folder @Tags Folders @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param folderId path string true "Folder ID" @Param request body dto.UpdateFolderRequest true "Folder data" @Success 200 {object} dto.FolderResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/folders/{folderId} [put]
func (*WorkspaceController) UpdateMemberRole ¶
func (c *WorkspaceController) UpdateMemberRole(ctx *gin.Context)
UpdateMemberRole updates a member's role. @Summary Update member role @Tags Members @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param memberId path string true "Member ID" @Param request body dto.UpdateMemberRoleRequest true "Role update data" @Success 200 {object} dto.MemberResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/members/{memberId} [put]
func (*WorkspaceController) UpdateTag ¶
func (c *WorkspaceController) UpdateTag(ctx *gin.Context)
UpdateTag updates a tag. @Summary Update tag @Tags Tags @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param tagId path string true "Tag ID" @Param request body dto.UpdateTagRequest true "Tag data" @Success 200 {object} dto.TagResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/tags/{tagId} [put]
func (*WorkspaceController) UpdateWorkspace ¶
func (c *WorkspaceController) UpdateWorkspace(ctx *gin.Context)
UpdateWorkspace updates the current workspace. @Summary Update current workspace @Tags Workspaces @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param request body dto.UpdateWorkspaceRequest true "Workspace data" @Success 200 {object} dto.WorkspaceResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace [put]
func (*WorkspaceController) UpdateWorkspaceInjectable ¶
func (c *WorkspaceController) UpdateWorkspaceInjectable(ctx *gin.Context)
UpdateWorkspaceInjectable updates an injectable. @Summary Update workspace injectable @Tags Injectables @Accept json @Produce json @Param X-Workspace-ID header string true "Workspace ID" @Param injectableId path string true "Injectable ID" @Param request body dto.UpdateWorkspaceInjectableRequest true "Injectable data" @Success 200 {object} dto.WorkspaceInjectableResponse @Failure 400 {object} dto.ErrorResponse @Failure 404 {object} dto.ErrorResponse @Router /api/v1/workspace/injectables/{injectableId} [put]