package author import ( "context" "errors" "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, } } // GetAuthorByID retrieves an author by ID. func (q *AuthorQueries) GetAuthorByID(ctx context.Context, id uint) (*domain.Author, error) { if id == 0 { return nil, errors.New("invalid author ID") } return q.repo.GetByID(ctx, id) } // ListAuthors returns a paginated list of authors. func (q *AuthorQueries) ListAuthors(ctx context.Context, page, pageSize int) (*domain.PaginatedResult[domain.Author], error) { return q.repo.List(ctx, page, pageSize) } // ListAuthorsByCountryID returns a list of authors by country ID. func (q *AuthorQueries) ListAuthorsByCountryID(ctx context.Context, countryID uint) ([]domain.Author, error) { if countryID == 0 { return nil, errors.New("invalid country ID") } return q.repo.ListByCountryID(ctx, countryID) } // GetAuthorsByIDs retrieves authors by a list of IDs. func (q *AuthorQueries) GetAuthorsByIDs(ctx context.Context, ids []uint) ([]domain.Author, error) { return q.repo.GetByIDs(ctx, ids) }