126 lines
4.1 KiB
Go
126 lines
4.1 KiB
Go
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"`
|
|
}
|