emdb/cmd/api-service/moviestore/review.go

68 lines
1.4 KiB
Go

package moviestore
const (
ReviewSourceIMDB = "imdb"
)
type ReviewSource string
type Review struct {
ID string
MovieID string
Source ReviewSource
URL string
Review string
}
type ReviewRepository struct {
db *SQLite
}
func NewReviewRepository(db *SQLite) *ReviewRepository {
return &ReviewRepository{
db: db,
}
}
func (rr *ReviewRepository) Store(r Review) error {
if _, err := rr.db.Exec(`REPLACE INTO review (id, movie_id, source, url, review) VALUES (?, ?, ?, ?, ?)`,
r.ID, r.MovieID, r.Source, r.URL, r.Review); err != nil {
return err
}
return nil
}
func (rr *ReviewRepository) FindOne(id string) (Review, error) {
row := rr.db.QueryRow(`SELECT id, movie_id, source, url, review FROM review WHERE id=?`, id)
if row.Err() != nil {
return Review{}, row.Err()
}
review := Review{}
if err := row.Scan(&review.ID, &review.MovieID, &review.Source, &review.URL, &review.Review); err != nil {
return Review{}, err
}
return review, nil
}
func (rr *ReviewRepository) FindByMovieID(movieID string) ([]Review, error) {
rows, err := rr.db.Query(`SELECT id, movie_id, source, url, review FROM review WHERE movie_id=?`, movieID)
if err != nil {
return nil, err
}
reviews := make([]Review, 0)
for rows.Next() {
r := Review{}
if err := rows.Scan(&r.ID, &r.MovieID, &r.Source, &r.URL, &r.Review); err != nil {
return nil, err
}
reviews = append(reviews, r)
}
rows.Close()
return reviews, nil
}