Prepara versao dev 1.0
This commit is contained in:
91
backend/internal/service/tenant_service.go
Normal file
91
backend/internal/service/tenant_service.go
Normal file
@@ -0,0 +1,91 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"errors"
|
||||
|
||||
"aggios-app/backend/internal/domain"
|
||||
"aggios-app/backend/internal/repository"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
var (
|
||||
ErrTenantNotFound = errors.New("tenant not found")
|
||||
)
|
||||
|
||||
// TenantService handles tenant business logic
|
||||
type TenantService struct {
|
||||
tenantRepo *repository.TenantRepository
|
||||
}
|
||||
|
||||
// NewTenantService creates a new tenant service
|
||||
func NewTenantService(tenantRepo *repository.TenantRepository) *TenantService {
|
||||
return &TenantService{
|
||||
tenantRepo: tenantRepo,
|
||||
}
|
||||
}
|
||||
|
||||
// Create creates a new tenant
|
||||
func (s *TenantService) Create(req domain.CreateTenantRequest) (*domain.Tenant, error) {
|
||||
// Check if subdomain already exists
|
||||
exists, err := s.tenantRepo.SubdomainExists(req.Subdomain)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if exists {
|
||||
return nil, ErrSubdomainTaken
|
||||
}
|
||||
|
||||
tenant := &domain.Tenant{
|
||||
Name: req.Name,
|
||||
Domain: req.Domain,
|
||||
Subdomain: req.Subdomain,
|
||||
}
|
||||
|
||||
if err := s.tenantRepo.Create(tenant); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return tenant, nil
|
||||
}
|
||||
|
||||
// GetByID retrieves a tenant by ID
|
||||
func (s *TenantService) GetByID(id uuid.UUID) (*domain.Tenant, error) {
|
||||
tenant, err := s.tenantRepo.FindByID(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if tenant == nil {
|
||||
return nil, ErrTenantNotFound
|
||||
}
|
||||
return tenant, nil
|
||||
}
|
||||
|
||||
// GetBySubdomain retrieves a tenant by subdomain
|
||||
func (s *TenantService) GetBySubdomain(subdomain string) (*domain.Tenant, error) {
|
||||
tenant, err := s.tenantRepo.FindBySubdomain(subdomain)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if tenant == nil {
|
||||
return nil, ErrTenantNotFound
|
||||
}
|
||||
return tenant, nil
|
||||
}
|
||||
|
||||
// ListAll retrieves all tenants
|
||||
func (s *TenantService) ListAll() ([]*domain.Tenant, error) {
|
||||
return s.tenantRepo.FindAll()
|
||||
}
|
||||
|
||||
// Delete removes a tenant by ID
|
||||
func (s *TenantService) Delete(id uuid.UUID) error {
|
||||
if err := s.tenantRepo.Delete(id); err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return ErrTenantNotFound
|
||||
}
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user