935f742ac9
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
30 lines
1.2 KiB
Go
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
|
|
}
|