108 lines
3.3 KiB
Go
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"`
|
|
}
|