package user import ( "context" "tercul/internal/domain" ) // UserQueries contains the query handlers for the user aggregate. type UserQueries struct { repo domain.UserRepository profileRepo domain.UserProfileRepository } // NewUserQueries creates a new UserQueries handler. func NewUserQueries(repo domain.UserRepository, profileRepo domain.UserProfileRepository) *UserQueries { return &UserQueries{repo: repo, profileRepo: profileRepo} } // User returns a user by ID. func (q *UserQueries) User(ctx context.Context, id uint) (*domain.User, error) { return q.repo.GetByID(ctx, id) } // UserByUsername returns a user by username. func (q *UserQueries) UserByUsername(ctx context.Context, username string) (*domain.User, error) { return q.repo.FindByUsername(ctx, username) } // UserByEmail returns a user by email. func (q *UserQueries) UserByEmail(ctx context.Context, email string) (*domain.User, error) { return q.repo.FindByEmail(ctx, email) } // UsersByRole returns all users for a role. func (q *UserQueries) UsersByRole(ctx context.Context, role domain.UserRole) ([]domain.User, error) { return q.repo.ListByRole(ctx, role) } // Users returns all users. func (q *UserQueries) Users(ctx context.Context) ([]domain.User, error) { return q.repo.ListAll(ctx) } // UserProfile returns a user profile by user ID. func (q *UserQueries) UserProfile(ctx context.Context, userID uint) (*domain.UserProfile, error) { return q.profileRepo.GetByUserID(ctx, userID) }