controller

package
v1.0.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 5, 2026 License: MIT Imports: 17 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func HandleError

func HandleError(ctx *gin.Context, err error)

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]

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL