refactor: migrate from raw pgx to GORM, unify ErrNoRows, cleanup auth
This commit is contained in:
+34
-18
@@ -5,6 +5,8 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"gitea.d3m0k1d.ru/HellreigN/Control-plane/internal/db"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -13,10 +15,10 @@ var (
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
repo *Repository
|
||||
repo OrgRepository
|
||||
}
|
||||
|
||||
func NewService(repo *Repository) *Service {
|
||||
func NewService(repo OrgRepository) *Service {
|
||||
return &Service{repo: repo}
|
||||
}
|
||||
|
||||
@@ -41,7 +43,7 @@ func (s *Service) Create(ctx context.Context, req CreateOrgRequest) (*Organizati
|
||||
func (s *Service) GetByID(ctx context.Context, id string) (*Organization, error) {
|
||||
org, err := s.repo.FindByID(ctx, id)
|
||||
if err != nil {
|
||||
if errors.Is(err, ErrNoRows) {
|
||||
if errors.Is(err, db.ErrNoRows) {
|
||||
return nil, ErrNotFound
|
||||
}
|
||||
return nil, fmt.Errorf("failed to find organization: %w", err)
|
||||
@@ -49,8 +51,20 @@ func (s *Service) GetByID(ctx context.Context, id string) (*Organization, error)
|
||||
return org, nil
|
||||
}
|
||||
|
||||
func (s *Service) List(ctx context.Context) (*OrgListResponse, error) {
|
||||
orgs, err := s.repo.FindAll(ctx)
|
||||
func (s *Service) List(ctx context.Context, limit, offset int) (*OrgListResponse, error) {
|
||||
if limit <= 0 {
|
||||
limit = 20
|
||||
}
|
||||
if offset < 0 {
|
||||
offset = 0
|
||||
}
|
||||
|
||||
total, err := s.repo.Count(ctx)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to count organizations: %w", err)
|
||||
}
|
||||
|
||||
orgs, err := s.repo.FindAll(ctx, limit, offset)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to list organizations: %w", err)
|
||||
}
|
||||
@@ -59,14 +73,20 @@ func (s *Service) List(ctx context.Context) (*OrgListResponse, error) {
|
||||
}
|
||||
return &OrgListResponse{
|
||||
Organizations: orgs,
|
||||
Total: len(orgs),
|
||||
Total: total,
|
||||
Limit: limit,
|
||||
Offset: offset,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *Service) Update(ctx context.Context, id string, req UpdateOrgRequest) (*Organization, error) {
|
||||
func (s *Service) Update(
|
||||
ctx context.Context,
|
||||
id string,
|
||||
req UpdateOrgRequest,
|
||||
) (*Organization, error) {
|
||||
org, err := s.repo.FindByID(ctx, id)
|
||||
if err != nil {
|
||||
if errors.Is(err, ErrNoRows) {
|
||||
if errors.Is(err, db.ErrNoRows) {
|
||||
return nil, ErrNotFound
|
||||
}
|
||||
return nil, fmt.Errorf("failed to find organization: %w", err)
|
||||
@@ -82,21 +102,17 @@ func (s *Service) Update(ctx context.Context, id string, req UpdateOrgRequest) (
|
||||
}
|
||||
|
||||
func (s *Service) Delete(ctx context.Context, id string) error {
|
||||
org, err := s.repo.FindByID(ctx, id)
|
||||
found, err := s.repo.Delete(ctx, id)
|
||||
if err != nil {
|
||||
if errors.Is(err, ErrNoRows) {
|
||||
return ErrNotFound
|
||||
}
|
||||
return fmt.Errorf("failed to find organization: %w", err)
|
||||
}
|
||||
|
||||
if err := s.repo.Delete(ctx, org.ID); err != nil {
|
||||
return fmt.Errorf("failed to delete organization: %w", err)
|
||||
}
|
||||
|
||||
if !found {
|
||||
return ErrNotFound
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func isUniqueViolation(err error) bool {
|
||||
return err != nil && (strings.Contains(err.Error(), "unique") || strings.Contains(err.Error(), "23505"))
|
||||
return err != nil &&
|
||||
(strings.Contains(err.Error(), "unique") || strings.Contains(err.Error(), "23505"))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user