228 lines
8.1 KiB
Go
228 lines
8.1 KiB
Go
package response
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
// ========================================================================
|
|
// RESPONSE STRUCTS - Updated for Multi-Client Hierarchy Support (camelCase)
|
|
// ========================================================================
|
|
|
|
// PublicClientsResponse for public consumption without sensitive data
|
|
type PublicClientsResponse struct {
|
|
Name string `json:"name"`
|
|
Slug string `json:"slug"`
|
|
Description *string `json:"description"`
|
|
ClientType string `json:"clientType"`
|
|
|
|
// Additional tenant information fields
|
|
LogoUrl *string `json:"logoUrl"` // Logo tenant URL
|
|
Address *string `json:"address"` // Alamat
|
|
PhoneNumber *string `json:"phoneNumber"` // Nomor telepon
|
|
Website *string `json:"website"` // Website resmi
|
|
|
|
IsActive *bool `json:"isActive"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
// ClientResponse for single client with hierarchy info
|
|
type ClientsResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
Slug string `json:"slug"`
|
|
Description *string `json:"description"`
|
|
ClientType string `json:"clientType"`
|
|
ParentClientId *uuid.UUID `json:"parentClientId"`
|
|
|
|
// Additional tenant information fields
|
|
LogoUrl *string `json:"logoUrl"` // Logo tenant URL
|
|
LogoImagePath *string `json:"logoImagePath"` // Logo image path in MinIO
|
|
Address *string `json:"address"` // Alamat
|
|
PhoneNumber *string `json:"phoneNumber"` // Nomor telepon
|
|
Website *string `json:"website"` // Website resmi
|
|
|
|
// Parent info (if sub_client)
|
|
ParentClient *ParentClientInfo `json:"parentClient,omitempty"`
|
|
|
|
// Children info (if parent_client)
|
|
SubClients []SubClientInfo `json:"subClients,omitempty"`
|
|
SubClientCount int `json:"subClientCount"`
|
|
|
|
// Resource limits & usage
|
|
MaxUsers *int `json:"maxUsers"`
|
|
MaxStorage *int64 `json:"maxStorage"`
|
|
CurrentUsers int `json:"currentUsers"` // Count of active users
|
|
CurrentStorage *int64 `json:"currentStorage"` // Current storage usage (if tracked)
|
|
|
|
// Settings
|
|
Settings *string `json:"settings"`
|
|
|
|
// Metadata
|
|
CreatedById *uint `json:"createdById"`
|
|
CreatedBy *UserInfo `json:"createdBy,omitempty"`
|
|
IsActive *bool `json:"isActive"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
// ClientWithUserResponse for creating client and admin user response
|
|
type ClientWithUserResponse struct {
|
|
Client ClientsResponse `json:"client"`
|
|
AdminUser AdminUserResponse `json:"adminUser"`
|
|
Message string `json:"message"`
|
|
}
|
|
|
|
// AdminUserResponse for admin user info
|
|
type AdminUserResponse struct {
|
|
ID uint `json:"id"`
|
|
Username string `json:"username"`
|
|
Email string `json:"email"`
|
|
Fullname string `json:"fullname"`
|
|
UserLevelId uint `json:"userLevelId"`
|
|
UserRoleId uint `json:"userRoleId"`
|
|
PhoneNumber *string `json:"phoneNumber"`
|
|
Address *string `json:"address"`
|
|
WorkType *string `json:"workType"`
|
|
GenderType *string `json:"genderType"`
|
|
IdentityType *string `json:"identityType"`
|
|
IdentityGroup *string `json:"identityGroup"`
|
|
IdentityGroupNumber *string `json:"identityGroupNumber"`
|
|
IdentityNumber *string `json:"identityNumber"`
|
|
DateOfBirth *string `json:"dateOfBirth"`
|
|
LastEducation *string `json:"lastEducation"`
|
|
KeycloakId *string `json:"keycloakId"`
|
|
ClientId uuid.UUID `json:"clientId"`
|
|
IsActive bool `json:"isActive"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
UpdatedAt time.Time `json:"updatedAt"`
|
|
}
|
|
|
|
// ParentClientInfo minimal parent info
|
|
type ParentClientInfo struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
ClientType string `json:"clientType"`
|
|
}
|
|
|
|
// SubClientInfo minimal child info
|
|
type SubClientInfo struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
ClientType string `json:"clientType"`
|
|
CurrentUsers int `json:"currentUsers"`
|
|
IsActive *bool `json:"isActive"`
|
|
}
|
|
|
|
// UserInfo minimal user info
|
|
type UserInfo struct {
|
|
ID uint `json:"id"`
|
|
Username string `json:"username"`
|
|
Fullname string `json:"fullname"`
|
|
}
|
|
|
|
// ClientHierarchyResponse full tree structure
|
|
type ClientHierarchyResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
Slug string `json:"slug"`
|
|
Description *string `json:"description"`
|
|
ClientType string `json:"clientType"`
|
|
Level int `json:"level"` // Depth in tree (0 = root)
|
|
Path []string `json:"path"` // Breadcrumb path
|
|
ParentClientId *uuid.UUID `json:"parentClientId"`
|
|
|
|
// Additional tenant information fields
|
|
LogoUrl *string `json:"logoUrl"` // Logo tenant URL
|
|
LogoImagePath *string `json:"logoImagePath"` // Logo image path in MinIO
|
|
Address *string `json:"address"` // Alamat
|
|
PhoneNumber *string `json:"phoneNumber"` // Nomor telepon
|
|
Website *string `json:"website"` // Website resmi
|
|
|
|
SubClients []ClientHierarchyResponse `json:"subClients,omitempty"`
|
|
CurrentUsers int `json:"currentUsers"`
|
|
IsActive *bool `json:"isActive"`
|
|
}
|
|
|
|
// ClientStatsResponse statistics for a client
|
|
type ClientStatsResponse struct {
|
|
ClientId uuid.UUID `json:"clientId"`
|
|
ClientName string `json:"clientName"`
|
|
|
|
// User stats
|
|
TotalUsers int `json:"totalUsers"`
|
|
ActiveUsers int `json:"activeUsers"`
|
|
InactiveUsers int `json:"inactiveUsers"`
|
|
|
|
// Content stats
|
|
TotalArticles int `json:"totalArticles"`
|
|
PublishedArticles int `json:"publishedArticles"`
|
|
DraftArticles int `json:"draftArticles"`
|
|
|
|
// Storage stats
|
|
StorageUsed *int64 `json:"storageUsed"`
|
|
StorageLimit *int64 `json:"storageLimit"`
|
|
StoragePercent *float64 `json:"storagePercent"`
|
|
|
|
// Hierarchy stats
|
|
IsParent bool `json:"isParent"`
|
|
SubClientCount int `json:"subClientCount"`
|
|
TotalDescendants int `json:"totalDescendants"` // All nested sub-clients
|
|
}
|
|
|
|
// ClientListResponse for list endpoint
|
|
type ClientListResponse struct {
|
|
ID uuid.UUID `json:"id"`
|
|
Name string `json:"name"`
|
|
ClientType string `json:"clientType"`
|
|
ParentClientId *uuid.UUID `json:"parentClientId"`
|
|
ParentName *string `json:"parentName,omitempty"`
|
|
SubClientCount int `json:"subClientCount"`
|
|
CurrentUsers int `json:"currentUsers"`
|
|
IsActive *bool `json:"isActive"`
|
|
CreatedAt time.Time `json:"createdAt"`
|
|
}
|
|
|
|
// ClientAccessResponse for user's accessible clients
|
|
type ClientAccessResponse struct {
|
|
// User info
|
|
UserId uint `json:"userId"`
|
|
Username string `json:"username"`
|
|
|
|
// Access summary
|
|
IsSuperAdmin bool `json:"isSuperAdmin"`
|
|
PrimaryClientId *uuid.UUID `json:"primaryClientId"`
|
|
TotalAccessible int `json:"totalAccessibleClients"`
|
|
|
|
// Accessible clients
|
|
Clients []AccessibleClientInfo `json:"clients"`
|
|
}
|
|
|
|
type AccessibleClientInfo struct {
|
|
ClientId uuid.UUID `json:"clientId"`
|
|
ClientName string `json:"clientName"`
|
|
ClientType string `json:"clientType"`
|
|
AccessType string `json:"accessType"` // read, write, admin, owner
|
|
CanManage bool `json:"canManage"`
|
|
CanDelegate bool `json:"canDelegate"`
|
|
IncludeSubClients bool `json:"includeSubClients"`
|
|
IsPrimaryClient bool `json:"isPrimaryClient"`
|
|
}
|
|
|
|
// BulkOperationResponse for bulk operations
|
|
type BulkOperationResponse struct {
|
|
TotalRequested int `json:"totalRequested"`
|
|
Successful int `json:"successful"`
|
|
Failed int `json:"failed"`
|
|
Results []BulkOperationResult `json:"results"`
|
|
}
|
|
|
|
type BulkOperationResult struct {
|
|
Index int `json:"index"`
|
|
ClientId *uuid.UUID `json:"clientId,omitempty"`
|
|
Name string `json:"name"`
|
|
Success bool `json:"success"`
|
|
Error *string `json:"error,omitempty"`
|
|
}
|