This commit is contained in:
lbenedar
2026-03-18 18:16:31 +03:00
parent 95d46644e0
commit 5cc1196085
4 changed files with 41 additions and 12 deletions

View File

@@ -135,9 +135,9 @@ func (m MovieModel) Delete(id int64) error {
return nil
}
func (m MovieModel) GetAll(title string, genres []string, filter Filters) ([]*Movie, error) {
func (m MovieModel) GetAll(title string, genres []string, filter Filters) ([]*Movie, Metadata, error) {
query := fmt.Sprintf(`
SELECT id, created_at, title, year, runtime, genres, version
SELECT count(*) over(), id, created_at, title, year, runtime, genres, version
FROM movies
WHERE (to_tsvector('simple', title) @@ plainto_tsquery('simple', $1) OR $1 = '')
AND (genres @> $2 OR $2 = '{}')
@@ -147,18 +147,22 @@ func (m MovieModel) GetAll(title string, genres []string, filter Filters) ([]*Mo
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
rows, err := m.DB.QueryContext(ctx, query, title, pq.Array(genres), filter.limit(), filter.offset())
args := []any{title, pq.Array(genres), filter.limit(), filter.offset()}
rows, err := m.DB.QueryContext(ctx, query, args...)
if err != nil {
return nil, err
return nil, Metadata{}, err
}
defer rows.Close()
totalRecords := 0
movies := []*Movie{}
for rows.Next() {
var movie Movie
err := rows.Scan(
&totalRecords,
&movie.ID,
&movie.CreatedAt,
&movie.Title,
@@ -168,16 +172,18 @@ func (m MovieModel) GetAll(title string, genres []string, filter Filters) ([]*Mo
&movie.Version,
)
if err != nil {
return nil, err
return nil, Metadata{}, err
}
movies = append(movies, &movie)
}
if err = rows.Err(); err != nil {
return nil, err
return nil, Metadata{}, err
}
return movies, nil
metadata := calculateMetadata(totalRecords, filter.Page, filter.PageSize)
return movies, metadata, nil
}
type MockMovieModel struct{}
@@ -198,8 +204,8 @@ func (m MockMovieModel) Delete(id int64) error {
return nil
}
func (m MockMovieModel) GetAll(title string, genres []string, filter Filters) ([]*Movie, error) {
return nil, nil
func (m MockMovieModel) GetAll(title string, genres []string, filter Filters) ([]*Movie, Metadata, error) {
return nil, Metadata{}, nil
}
func ValidateMovie(v *validator.Validator, movie *Movie) {