dukcapil/internal/contract/rbac_contract.go
2025-08-19 21:29:37 +07:00

108 lines
3.3 KiB
Go

package contract
import (
"time"
"github.com/google/uuid"
)
type PermissionResponse struct {
ID uuid.UUID `json:"id"`
Code string `json:"code"`
Action string `json:"action,omitempty"`
Description *string `json:"description,omitempty"`
}
type CreatePermissionRequest struct {
Code string `json:"code"` // unique
Description *string `json:"description,omitempty"`
}
type UpdatePermissionRequest struct {
Code *string `json:"code,omitempty"`
Description *string `json:"description,omitempty"`
}
type ListPermissionsResponse struct {
Permissions []PermissionResponse `json:"permissions"`
}
type RoleWithPermissionsResponse struct {
ID uuid.UUID `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
Description *string `json:"description,omitempty"`
Permissions []PermissionResponse `json:"permissions"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}
type CreateRoleRequest struct {
Name string `json:"name"`
Code string `json:"code"`
Description *string `json:"description,omitempty"`
PermissionCodes []string `json:"permission_codes,omitempty"`
}
type UpdateRoleRequest struct {
Name *string `json:"name,omitempty"`
Code *string `json:"code,omitempty"`
Description *string `json:"description,omitempty"`
PermissionCodes *[]string `json:"permission_codes,omitempty"`
}
type ListRolesResponse struct {
Roles []RoleWithPermissionsResponse `json:"roles"`
}
// Module contracts
type ModuleResponse struct {
ID uuid.UUID `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
}
type ModuleWithPermissionsResponse struct {
Module ModuleResponse `json:"module"`
Permissions []PermissionResponse `json:"permissions"`
}
type PermissionsGroupedResponse struct {
Data []ModuleWithPermissionsResponse `json:"data"`
}
// New Role contracts for the required API
type ModulePermissionInput struct {
Module string `json:"module" binding:"required"`
Actions []string `json:"actions" binding:"required"`
}
type CreateOrUpdateRoleRequest struct {
Name string `json:"name" binding:"required"`
Code string `json:"code" binding:"required"`
Description string `json:"description,omitempty"`
Permissions []ModulePermissionInput `json:"permissions" binding:"required"`
}
type RoleDetailResponse struct {
ID uuid.UUID `json:"id"`
Name string `json:"name"`
Code string `json:"code"`
Description string `json:"description,omitempty"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
Permissions []RolePermissionModuleResponse `json:"permissions"`
}
type RolePermissionModuleResponse struct {
Module ModuleResponse `json:"module"`
Actions []PermissionActionResponse `json:"actions"`
}
type PermissionActionResponse struct {
ID uuid.UUID `json:"id"`
Action string `json:"action"`
Code string `json:"code"`
Description string `json:"description,omitempty"`
}