package author import ( "context" "tercul/internal/domain" ) // AuthorQueries contains the query handlers for the author aggregate. type AuthorQueries struct { repo domain.AuthorRepository } // NewAuthorQueries creates a new AuthorQueries handler. func NewAuthorQueries(repo domain.AuthorRepository) *AuthorQueries { return &AuthorQueries{repo: repo} } // Author returns an author by ID. func (q *AuthorQueries) Author(ctx context.Context, id uint) (*domain.Author, error) { return q.repo.GetByID(ctx, id) } // Authors returns all authors, with optional filtering by country. func (q *AuthorQueries) Authors(ctx context.Context, countryID *uint) ([]*domain.Author, error) { var authors []domain.Author var err error if countryID != nil { authors, err = q.repo.ListByCountryID(ctx, *countryID) } else { authors, err = q.repo.ListAll(ctx) } if err != nil { return nil, err } authorPtrs := make([]*domain.Author, len(authors)) for i := range authors { authorPtrs[i] = &authors[i] } return authorPtrs, nil } // AuthorWithTranslations returns an author by ID with its translations. func (q *AuthorQueries) AuthorWithTranslations(ctx context.Context, id uint) (*domain.Author, error) { return q.repo.GetWithTranslations(ctx, id) }