Files
apocapoc-api/internal/domain/repositories/habit_repository.go
T
david 935f742ac9 Add filtering support to GET /api/v1/habits endpoint
Implemented comprehensive filtering capabilities for the habits list endpoint:
- Filter by type (BOOLEAN, COUNTER, VALUE)
- Filter by frequency (DAILY, WEEKLY, MONTHLY)
- Filter by archived status
- Text search in habit name and description
- All filters can be combined
- Filters work with pagination

Technical changes:
- Added FilterParams to GetUserHabitsQuery
- Created HabitFilter struct in repository interface
- Implemented dynamic SQL query building in SQLite repository
- Updated HTTP handler to parse filter query parameters
- Added comprehensive tests for repository and handler filtering
- Updated all test mocks with new filter methods
2025-12-02 01:02:39 +01:00

30 lines
1.2 KiB
Go

package repositories
import (
"context"
"apocapoc-api/internal/domain/entities"
"apocapoc-api/internal/domain/value_objects"
"apocapoc-api/internal/shared/pagination"
)
type HabitFilter struct {
Type *value_objects.HabitType
Frequency *value_objects.Frequency
IncludeArchived bool
Search string
}
type HabitRepository interface {
Create(ctx context.Context, habit *entities.Habit) error
FindByID(ctx context.Context, id string) (*entities.Habit, error)
FindByUserID(ctx context.Context, userID string) ([]*entities.Habit, error)
FindActiveByUserID(ctx context.Context, userID string) ([]*entities.Habit, error)
FindActiveByUserIDWithPagination(ctx context.Context, userID string, params pagination.Params) ([]*entities.Habit, error)
FindByUserIDFiltered(ctx context.Context, userID string, filter HabitFilter, paginationParams *pagination.Params) ([]*entities.Habit, error)
CountActiveByUserID(ctx context.Context, userID string) (int, error)
CountByUserIDFiltered(ctx context.Context, userID string, filter HabitFilter) (int, error)
Update(ctx context.Context, habit *entities.Habit) error
Delete(ctx context.Context, id string) error
}