package payload import ( "RenewCMS/internal/domain/role" "RenewCMS/internal/infrastructure/useCases" "time" ) type RoleRef struct { ID uint32 `json:"id"` Name string `json:"name"` BuiltIn bool `json:"built_in"` Locked bool `json:"locked"` } type RoleAssigner struct { ID uint32 `json:"id"` Name string `json:"name"` } type RoleEditor struct { ID uint32 `json:"id"` Name string `json:"name"` } type RoleView struct { role.Role Members int `json:"members"` UpdatedAt *time.Time `json:"updated_at"` UpdatedBy *RoleEditor `json:"updated_by"` } type OwnershipSuccessor struct { ID uint32 `json:"id"` Name string `json:"name"` } type OwnershipPredecessor struct { ID uint32 `json:"id"` Name string `json:"name"` Role RoleRef `json:"role"` } type OwnershipTransfer struct { Owner OwnershipSuccessor `json:"owner"` FormerOwner OwnershipPredecessor `json:"former_owner"` } func RoleRefOf(ref useCases.RoleRef) RoleRef { return RoleRef(ref) } func RoleRefPtrOf(ref *useCases.RoleRef) *RoleRef { if ref == nil { return nil } converted := RoleRefOf(*ref) return &converted } func RoleAssignerPtrOf(assigner *useCases.RoleAssigner) *RoleAssigner { if assigner == nil { return nil } converted := RoleAssigner(*assigner) return &converted } func RoleViewOf(view useCases.RoleView) RoleView { converted := RoleView{Role: view.Role, Members: view.Members, UpdatedAt: view.UpdatedAt} if view.UpdatedBy != nil { editor := RoleEditor(*view.UpdatedBy) converted.UpdatedBy = &editor } return converted } func RoleViewsOf(views []useCases.RoleView) []RoleView { converted := make([]RoleView, 0, len(views)) for _, view := range views { converted = append(converted, RoleViewOf(view)) } return converted } func OwnershipTransferOf(transfer useCases.OwnershipTransfer) OwnershipTransfer { return OwnershipTransfer{ Owner: OwnershipSuccessor(transfer.Owner), FormerOwner: OwnershipPredecessor{ID: transfer.FormerOwner.ID, Name: transfer.FormerOwner.Name, Role: RoleRefOf(transfer.FormerOwner.Role)}, } }