package sql import ( "context" "tercul/internal/domain" "gorm.io/gorm" ) type authorRepository struct { domain.BaseRepository[domain.Author] db *gorm.DB } // NewAuthorRepository creates a new AuthorRepository. func NewAuthorRepository(db *gorm.DB) domain.AuthorRepository { return &authorRepository{ BaseRepository: NewBaseRepositoryImpl[domain.Author](db), db: db, } } // ListByWorkID finds authors by work ID func (r *authorRepository) ListByWorkID(ctx context.Context, workID uint) ([]domain.Author, error) { var authors []domain.Author if 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; err != nil { return nil, err } return authors, nil } // GetByIDs finds authors by a list of IDs func (r *authorRepository) GetByIDs(ctx context.Context, ids []uint) ([]domain.Author, error) { var authors []domain.Author if err := r.db.WithContext(ctx).Where("id IN (?)", ids).Find(&authors).Error; err != nil { return nil, err } return authors, nil } // ListByBookID finds authors by book ID func (r *authorRepository) ListByBookID(ctx context.Context, bookID uint) ([]domain.Author, error) { var authors []domain.Author if 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; err != nil { return nil, err } return authors, nil } // ListByCountryID finds authors by country ID func (r *authorRepository) ListByCountryID(ctx context.Context, countryID uint) ([]domain.Author, error) { var authors []domain.Author if err := r.db.WithContext(ctx).Where("country_id = ?", countryID).Find(&authors).Error; err != nil { return nil, err } return authors, nil }