package bd import ( "context" "fmt" "strconv" "git.ukamnya.ru/stulyaganov/RestApiv2/internal/bd/model" ) type Filmsrepo struct { db Bd } func (f *Filmsrepo) Create(m *model.Films) (*model.Films, error) { if err := f.db.db.QueryRow(context.Background(), "INSERT INTO films (id, ru_title, orig_title) VALUES($1, $2, $3) RETURNING id", m.Id, m.Ru_title, m.Orig_title).Scan(&m.Id); err != nil { return nil, err } return m, nil } func FindDyId(id int) (*model.Films, error) { return nil, nil } func (f *Filmsrepo) FindByAll() (*[]model.Films, error) { var buffs []model.Films rows, err := f.db.db.Query(context.Background(), "SELECT Id, Ru_title, Orig_title, Imdb_id, Kinopoisk_id, PosterUrl, PosterUrlPreview, Countries, Genres, Year, Description, RatingKinopoisk, RatingImdb, Iframe_src, RatingImdbVoteCount, RatingKinopoiskVoteCount, Created, content_type, ratingagelimits FROM films") if err != nil { return nil, err } defer rows.Close() for rows.Next() { var buff model.Films err = rows.Scan( &buff.Id, &buff.Ru_title, &buff.Orig_title, &buff.Imdb_id, &buff.Kinopoisk_id, &buff.PosterUrl, &buff.PosterUrlPreview, &buff.Countries, &buff.Genres, &buff.Year, &buff.Description, &buff.RatingKinopoisk, &buff.RatingImdb, &buff.Iframe_src, &buff.RatingImdbVoteCount, &buff.RatingKinopoiskVoteCount, &buff.Created, &buff.Contenttype, &buff.Ratingagelimits) if err != nil { return nil, err } buffs = append(buffs, buff) } err = rows.Err() if err != nil { return nil, err } return &buffs, nil } func (f *Filmsrepo) GetCountFilms() (*int, error) { rows, err := f.db.db.Query(context.Background(), "SELECT count(*) FROM films") var count int if err != nil { return nil, err } defer rows.Close() for rows.Next() { rows.Scan(&count) } return &count, nil } func (f *Filmsrepo) FindById(id string) (*model.Films, error) { query := fmt.Sprintf("SELECT * FROM films WHERE Id = %s;", id) var buff model.Films rows, err := f.db.db.Query(context.Background(), query) if err != nil { return nil, err } defer rows.Close() for rows.Next() { rows.Scan(&buff.Id, &buff.Ru_title, &buff.Orig_title, &buff.Imdb_id, &buff.Kinopoisk_id, &buff.PosterUrl, &buff.PosterUrlPreview, &buff.Countries, &buff.Genres, &buff.Year, &buff.Description, &buff.RatingKinopoisk, &buff.RatingImdb, &buff.Iframe_src, &buff.RatingImdbVoteCount, &buff.RatingKinopoiskVoteCount, &buff.Created, &buff.Contenttype, &buff.Ratingagelimits, &buff.Media) } if rows.Err() != nil { return nil, rows.Err() } return &buff, nil } func (s *Filmsrepo) FindByIdArray(id []int) (*[]model.Siries, error) { var buffs []model.Siries var stringId []string for _, i := range id { stringId = append(stringId, strconv.Itoa(i)) } query := fmt.Sprint("SELECT id, Ru_title, PosterUrlPreview, Countries, Genres, Year FROM films WHERE Id = ANY($1)") rows, err := s.db.db.Query(context.Background(), query, stringId) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var buff model.Siries err = rows.Scan(&buff.Id, &buff.Ru_title, &buff.PosterUrlPreview, &buff.Countries, &buff.Genres, &buff.Year) if err != nil { return nil, err } buffs = append(buffs, buff) } return &buffs, nil } func (f *Filmsrepo) FindByName(name string) (*[]model.Films, error) { var films []model.Films rows, err := f.db.db.Query(context.Background(), "SELECT id, Ru_title, year, posterurl, content_type FROM films WHERE ru_title LIKE $1;", "%"+name+"%") if err != nil { return nil, err } defer rows.Close() for rows.Next() { var film model.Films err = rows.Scan(&film.Id, &film.Ru_title, &film.Year, &film.PosterUrl, &film.Contenttype) if err != nil { return nil, err } films = append(films, film) } return &films, nil } func (f *Filmsrepo) SortByGanres(name string) (*[]model.Films, error) { var films []model.Films rows, err := f.db.db.Query(context.Background(), "SELECT id, ru_title, posterurl FROM films WHERE genres::TEXT LIKE '%"+name+"%'") if err != nil { return nil, err } defer rows.Close() for rows.Next() { var film model.Films rows.Scan(&film.Id, &film.Ru_title, &film.PosterUrl) if rows.Err() != nil { return nil, rows.Err() } films = append(films, film) } return &films, nil } func (f *Filmsrepo) Pagination(page string) (*[]model.Films, error) { var buffs []model.Films pages, _ := strconv.Atoi(page) limit := 32 offcet := limit * (pages - 1) rows, err := f.db.db.Query(context.Background(), "SELECT Id, Ru_title, Orig_title, Imdb_id, Kinopoisk_id, PosterUrl, PosterUrlPreview, Countries, Genres, Year, Description, RatingKinopoisk, RatingImdb, Iframe_src, RatingImdbVoteCount, RatingKinopoiskVoteCount, Created FROM films ORDER BY year desc, created DESC LIMIT 32 OFFSET $1", offcet) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var buff model.Films err = rows.Scan( &buff.Id, &buff.Ru_title, &buff.Orig_title, &buff.Imdb_id, &buff.Kinopoisk_id, &buff.PosterUrl, &buff.PosterUrlPreview, &buff.Countries, &buff.Genres, &buff.Year, &buff.Description, &buff.RatingKinopoisk, &buff.RatingImdb, &buff.Iframe_src, &buff.RatingImdbVoteCount, &buff.RatingKinopoiskVoteCount, &buff.Created) if err != nil { return nil, err } buffs = append(buffs, buff) } err = rows.Err() if err != nil { return nil, err } return &buffs, nil } func (f *Filmsrepo) LastItem() (*[]model.Films, error) { var buffs []model.Films rows, err := f.db.db.Query(context.Background(), "SELECT id, ru_title, orig_title, posterurl, posterurlpreview, countries, genres, year, created FROM films ORDER BY year desc, created DESC LIMIT 8") if err != nil { return nil, err } defer rows.Close() for rows.Next() { var buff model.Films err = rows.Scan( &buff.Id, &buff.Ru_title, &buff.Orig_title, &buff.PosterUrl, &buff.PosterUrlPreview, &buff.Countries, &buff.Genres, &buff.Year, &buff.Created) if err != nil { return nil, err } buffs = append(buffs, buff) } err = rows.Err() if err != nil { return nil, err } return &buffs, nil }