package domain import ( "time" "github.com/google/uuid" ) // User represents a user in the system type User struct { ID uuid.UUID `json:"id" db:"id"` TenantID *uuid.UUID `json:"tenant_id,omitempty" db:"tenant_id"` Email string `json:"email" db:"email"` Password string `json:"-" db:"password_hash"` Name string `json:"name" db:"first_name"` Role string `json:"role" db:"role"` // SUPERADMIN, ADMIN_AGENCIA, CLIENTE AgencyRole string `json:"agency_role" db:"agency_role"` // owner or collaborator (only for ADMIN_AGENCIA) CreatedBy *uuid.UUID `json:"created_by,omitempty" db:"created_by"` // Which owner created this collaborator CollaboratorCreatedAt *time.Time `json:"collaborator_created_at,omitempty" db:"collaborator_created_at"` // When collaborator was added CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` } // CreateUserRequest represents the request to create a new user type CreateUserRequest struct { Email string `json:"email"` Password string `json:"password"` Name string `json:"name"` Role string `json:"role,omitempty"` // Optional, defaults to CLIENTE } // RegisterAgencyRequest represents agency registration (SUPERADMIN only) type RegisterAgencyRequest struct { // Agência AgencyName string `json:"agencyName"` Subdomain string `json:"subdomain"` CNPJ string `json:"cnpj"` RazaoSocial string `json:"razaoSocial"` Description string `json:"description"` Website string `json:"website"` Industry string `json:"industry"` Phone string `json:"phone"` TeamSize string `json:"teamSize"` // Endereço CEP string `json:"cep"` State string `json:"state"` City string `json:"city"` Neighborhood string `json:"neighborhood"` Street string `json:"street"` Number string `json:"number"` Complement string `json:"complement"` // Personalização PrimaryColor string `json:"primaryColor"` SecondaryColor string `json:"secondaryColor"` LogoURL string `json:"logoUrl"` LogoHorizontalURL string `json:"logoHorizontalUrl"` // Admin da Agência AdminEmail string `json:"adminEmail"` AdminPassword string `json:"adminPassword"` AdminName string `json:"adminName"` } // PublicRegisterAgencyRequest represents the public signup payload type PublicRegisterAgencyRequest struct { // User Email string `json:"email"` Password string `json:"password"` FullName string `json:"fullName"` Newsletter bool `json:"newsletter"` // Company CompanyName string `json:"companyName"` CNPJ string `json:"cnpj"` RazaoSocial string `json:"razaoSocial"` Description string `json:"description"` Website string `json:"website"` Industry string `json:"industry"` TeamSize string `json:"teamSize"` // Address CEP string `json:"cep"` State string `json:"state"` City string `json:"city"` Neighborhood string `json:"neighborhood"` Street string `json:"street"` Number string `json:"number"` Complement string `json:"complement"` // Contacts (simplified for now, taking the first one as phone if available) Contacts []struct { ID int `json:"id"` Whatsapp string `json:"whatsapp"` } `json:"contacts"` // Domain Subdomain string `json:"subdomain"` // Branding PrimaryColor string `json:"primaryColor"` SecondaryColor string `json:"secondaryColor"` LogoURL string `json:"logoUrl"` } // RegisterClientRequest represents client registration (ADMIN_AGENCIA only) type RegisterClientRequest struct { Email string `json:"email"` Password string `json:"password"` Name string `json:"name"` } // LoginRequest represents the login request type LoginRequest struct { Email string `json:"email"` Password string `json:"password"` } // LoginResponse represents the login response type LoginResponse struct { Token string `json:"token"` User User `json:"user"` Subdomain *string `json:"subdomain,omitempty"` }