tercul-backend/internal/data/sql/author_repository.go
Damir Mukimov d50722dad5
Some checks failed
Test / Integration Tests (push) Successful in 4s
Build / Build Binary (push) Failing after 2m9s
Docker Build / Build Docker Image (push) Failing after 2m32s
Test / Unit Tests (push) Failing after 3m12s
Lint / Go Lint (push) Failing after 1m0s
Refactor ID handling to use UUIDs across the application
- Updated database models and repositories to replace uint IDs with UUIDs.
- Modified test fixtures to generate and use UUIDs for authors, translations, users, and works.
- Adjusted mock implementations to align with the new UUID structure.
- Ensured all relevant functions and methods are updated to handle UUIDs correctly.
- Added necessary imports for UUID handling in various files.
2025-12-27 00:33:34 +01:00

70 lines
2.1 KiB
Go

package sql
import (
"context"
"errors"
"tercul/internal/domain"
"tercul/internal/platform/config"
"github.com/google/uuid"
"gorm.io/gorm"
)
type authorRepository struct {
*BaseRepositoryImpl[domain.Author]
db *gorm.DB
}
// NewAuthorRepository creates a new AuthorRepository.
func NewAuthorRepository(db *gorm.DB, cfg *config.Config) domain.AuthorRepository {
baseRepo := NewBaseRepositoryImpl[domain.Author](db, cfg)
return &authorRepository{
BaseRepositoryImpl: baseRepo,
db: db,
}
}
func (r *authorRepository) FindByName(ctx context.Context, name string) (*domain.Author, error) {
var author domain.Author
err := r.db.WithContext(ctx).Where("name = ?", name).First(&author).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, domain.ErrEntityNotFound
}
return nil, err
}
return &author, nil
}
func (r *authorRepository) ListByWorkID(ctx context.Context, workID uuid.UUID) ([]domain.Author, error) {
var authors []domain.Author
err := r.db.WithContext(ctx).Joins("JOIN work_authors ON work_authors.author_id = authors.id").
Where("work_authors.work_id = ?", workID).Find(&authors).Error
return authors, err
}
func (r *authorRepository) ListByBookID(ctx context.Context, bookID uuid.UUID) ([]domain.Author, error) {
var authors []domain.Author
err := r.db.WithContext(ctx).Joins("JOIN book_authors ON book_authors.author_id = authors.id").
Where("book_authors.book_id = ?", bookID).Find(&authors).Error
return authors, err
}
func (r *authorRepository) ListByCountryID(ctx context.Context, countryID uuid.UUID) ([]domain.Author, error) {
var authors []domain.Author
err := r.db.WithContext(ctx).Where("country_id = ?", countryID).Find(&authors).Error
return authors, err
}
func (r *authorRepository) GetWithTranslations(ctx context.Context, id uuid.UUID) (*domain.Author, error) {
var author domain.Author
err := r.db.WithContext(ctx).Preload("Translations").First(&author, id).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, domain.ErrEntityNotFound
}
return nil, err
}
return &author, nil
}