Add all columns for shows and episodes
This commit is contained in:
parent
276c9caa29
commit
ab02aa3479
@ -12,19 +12,32 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
addShowQuery = `INSERT INTO shows (imdbid, title) VALUES (:imdbid, :title) RETURNING id;`
|
addShowQuery = `
|
||||||
|
INSERT INTO shows (imdbid, title, rating, plot, tvdbid, year, firstaired)
|
||||||
|
VALUES (:imdbid, :title, :rating, :plot, :tvdbid, :year, :firstaired) RETURNING id;`
|
||||||
|
|
||||||
getShowQueryByImdbID = `SELECT * FROM shows WHERE imdbid=$1;`
|
getShowQueryByImdbID = `SELECT * FROM shows WHERE imdbid=$1;`
|
||||||
getShowQueryByID = `SELECT * FROM shows WHERE id=$1;`
|
getShowQueryByID = `SELECT * FROM shows WHERE id=$1;`
|
||||||
deleteShowQuery = `DELETE FROM shows WHERE id=$1;`
|
deleteShowQuery = `DELETE FROM shows WHERE id=$1;`
|
||||||
|
|
||||||
addEpisodeQuery = `INSERT INTO episodes (shows_id, title, season, episode) VALUES ($1,$2,$3,$4);`
|
addEpisodeQuery = `
|
||||||
getEpisodesQuery = `SELECT title, season, episode FROM episodes WHERE shows_id=$1;`
|
INSERT INTO episodes (shows_id, title, season, episode, tvdbid, aired, plot, runtime, rating, imdbid)
|
||||||
|
VALUES (:showid, :title, :season, :episode, :tvdbid, :aired, :plot, :runtime, :rating, :episodeimdbid) RETURNING id;`
|
||||||
|
|
||||||
|
getEpisodesQuery = `
|
||||||
|
SELECT title, season, episode, tvdbid, aired, plot, runtime, rating, imdbid AS episodeimdbid, shows_id AS showid
|
||||||
|
FROM episodes WHERE shows_id=$1;`
|
||||||
|
|
||||||
getShowWithUserQueryByImdbID = `
|
getShowWithUserQueryByImdbID = `
|
||||||
SELECT
|
SELECT
|
||||||
shows.id,
|
shows.id,
|
||||||
shows.title,
|
|
||||||
shows.imdbid,
|
shows.imdbid,
|
||||||
|
shows.title,
|
||||||
|
shows.rating,
|
||||||
|
shows.plot,
|
||||||
|
shows.tvdbid,
|
||||||
|
shows.year,
|
||||||
|
shows.firstaired,
|
||||||
COALESCE(shows_tracked.season,0) AS trackedseason,
|
COALESCE(shows_tracked.season,0) AS trackedseason,
|
||||||
COALESCE(shows_tracked.episode,0) AS trackedepisode
|
COALESCE(shows_tracked.episode,0) AS trackedepisode
|
||||||
FROM shows LEFT JOIN shows_tracked ON shows.id=shows_tracked.shows_id AND shows_tracked.users_id=$2
|
FROM shows LEFT JOIN shows_tracked ON shows.id=shows_tracked.shows_id AND shows_tracked.users_id=$2
|
||||||
@ -33,8 +46,13 @@ const (
|
|||||||
getShowWithUserQueryByID = `
|
getShowWithUserQueryByID = `
|
||||||
SELECT
|
SELECT
|
||||||
shows.id,
|
shows.id,
|
||||||
shows.title,
|
|
||||||
shows.imdbid,
|
shows.imdbid,
|
||||||
|
shows.title,
|
||||||
|
shows.rating,
|
||||||
|
shows.plot,
|
||||||
|
shows.tvdbid,
|
||||||
|
shows.year,
|
||||||
|
shows.firstaired,
|
||||||
COALESCE(shows_tracked.season,0) AS trackedseason,
|
COALESCE(shows_tracked.season,0) AS trackedseason,
|
||||||
COALESCE(shows_tracked.episode,0) AS trackedepisode
|
COALESCE(shows_tracked.episode,0) AS trackedepisode
|
||||||
FROM shows LEFT JOIN shows_tracked ON shows.id=shows_tracked.shows_id AND shows_tracked.users_id=$2
|
FROM shows LEFT JOIN shows_tracked ON shows.id=shows_tracked.shows_id AND shows_tracked.users_id=$2
|
||||||
@ -124,7 +142,10 @@ func (s *Show) GetDetails(db *sqlx.DB, log *logrus.Entry) error {
|
|||||||
s.Episodes = append(s.Episodes, &Episode{ShowEpisode: *pe})
|
s.Episodes = append(s.Episodes, &Episode{ShowEpisode: *pe})
|
||||||
}
|
}
|
||||||
|
|
||||||
s.Add(db)
|
err = s.Add(db)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +165,10 @@ func (s *Show) GetDetailsAsUser(db *sqlx.DB, user *users.User, log *logrus.Entry
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
s.Add(db)
|
err = s.Add(db)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
s.Episodes = []*Episode{}
|
s.Episodes = []*Episode{}
|
||||||
for _, pe := range s.Show.Episodes {
|
for _, pe := range s.Show.Episodes {
|
||||||
s.Episodes = append(s.Episodes, &Episode{ShowEpisode: *pe})
|
s.Episodes = append(s.Episodes, &Episode{ShowEpisode: *pe})
|
||||||
@ -176,7 +200,8 @@ func (s *Show) Add(db *sqlx.DB) error {
|
|||||||
// When add a show to database use polochon episode details
|
// When add a show to database use polochon episode details
|
||||||
// so s.Show.Episodes
|
// so s.Show.Episodes
|
||||||
for _, pEp := range s.Show.Episodes {
|
for _, pEp := range s.Show.Episodes {
|
||||||
err = s.addEpisode(db, pEp)
|
e := &Episode{ShowEpisode: *pEp, ShowID: s.ID}
|
||||||
|
err = e.Add(db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -184,14 +209,6 @@ func (s *Show) Add(db *sqlx.DB) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *Show) addEpisode(db *sqlx.DB, pEpisode *polochon.ShowEpisode) error {
|
|
||||||
_, err := db.Exec(addEpisodeQuery, s.ID, pEpisode.Title, pEpisode.Season, pEpisode.Episode)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Delete show from database
|
// Delete show from database
|
||||||
func (s *Show) Delete(db *sqlx.DB) error {
|
func (s *Show) Delete(db *sqlx.DB) error {
|
||||||
r, err := db.Exec(deleteShowQuery, s.ID)
|
r, err := db.Exec(deleteShowQuery, s.ID)
|
||||||
@ -209,6 +226,7 @@ func (s *Show) Delete(db *sqlx.DB) error {
|
|||||||
func (s *Show) GetEpisodes(db *sqlx.DB) error {
|
func (s *Show) GetEpisodes(db *sqlx.DB) error {
|
||||||
// When retrive episode's info from database populate the s.Episodes member
|
// When retrive episode's info from database populate the s.Episodes member
|
||||||
// and not s.Show.Episodes
|
// and not s.Show.Episodes
|
||||||
|
s.Episodes = []*Episode{}
|
||||||
err := db.Select(&s.Episodes, getEpisodesQuery, s.ID)
|
err := db.Select(&s.Episodes, getEpisodesQuery, s.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -221,4 +239,19 @@ func (s *Show) GetEpisodes(db *sqlx.DB) error {
|
|||||||
type Episode struct {
|
type Episode struct {
|
||||||
sqly.BaseModel
|
sqly.BaseModel
|
||||||
polochon.ShowEpisode
|
polochon.ShowEpisode
|
||||||
|
ShowID string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add episode to the database
|
||||||
|
func (e *Episode) Add(db *sqlx.DB) error {
|
||||||
|
var id string
|
||||||
|
r, err := db.NamedQuery(addEpisodeQuery, e)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
for r.Next() {
|
||||||
|
r.Scan(&id)
|
||||||
|
}
|
||||||
|
e.ID = id
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -48,13 +48,38 @@ func TestIntegrate(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log := logrus.NewEntry(logrus.New())
|
log := logrus.NewEntry(logrus.New())
|
||||||
show.GetDetails(db, log)
|
err := show.GetDetails(db, log)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
if len(show.Episodes) != 50 {
|
if len(show.Episodes) != 50 {
|
||||||
t.Fatalf("Unexpected number of episodes: %d", len(show.Episodes))
|
t.Fatalf("Unexpected number of episodes: %d", len(show.Episodes))
|
||||||
}
|
}
|
||||||
|
|
||||||
err := show.Delete(db)
|
// Get from db
|
||||||
|
show2 := Show{
|
||||||
|
Show: polochon.Show{
|
||||||
|
ShowConfig: polochonConfig,
|
||||||
|
ImdbID: "tt12345",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
err = show2.Get(db)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = show2.GetEpisodes(db)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(show2.Episodes) != 50 {
|
||||||
|
t.Fatalf("Unexpected number of episodes: %d", len(show2.Episodes))
|
||||||
|
}
|
||||||
|
|
||||||
|
err = show.Delete(db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -82,13 +107,17 @@ func TestTrackedShow(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
show.Add(db)
|
err := show.Add(db)
|
||||||
|
|
||||||
u := &users.User{Name: "plop"}
|
|
||||||
err := u.Add(db)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
u := &users.User{Name: "plop"}
|
||||||
|
err = u.Add(db)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
err = show.GetAsUser(db, u)
|
err = show.GetAsUser(db, u)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -33,6 +33,11 @@ CREATE TABLE shows (
|
|||||||
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
id uuid PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||||
imdbid text NOT NULL UNIQUE,
|
imdbid text NOT NULL UNIQUE,
|
||||||
title text NOT NULL,
|
title text NOT NULL,
|
||||||
|
rating real NOT NULL,
|
||||||
|
plot text NOT NULL,
|
||||||
|
tvdbid text NOT NULL,
|
||||||
|
year smallint NOT NULL,
|
||||||
|
firstaired timestamp,
|
||||||
LIKE base INCLUDING DEFAULTS
|
LIKE base INCLUDING DEFAULTS
|
||||||
);
|
);
|
||||||
CREATE INDEX ON shows (imdbid);
|
CREATE INDEX ON shows (imdbid);
|
||||||
@ -44,6 +49,12 @@ CREATE TABLE episodes (
|
|||||||
title text NOT NULL,
|
title text NOT NULL,
|
||||||
season integer NOT NULL,
|
season integer NOT NULL,
|
||||||
episode integer NOT NULL,
|
episode integer NOT NULL,
|
||||||
|
tvdbid text NOT NULL,
|
||||||
|
aired text NOT NULL,
|
||||||
|
plot text NOT NULL,
|
||||||
|
runtime smallint NOT NULL,
|
||||||
|
rating real NOT NULL,
|
||||||
|
imdbid text NOT NULL,
|
||||||
LIKE base INCLUDING DEFAULTS
|
LIKE base INCLUDING DEFAULTS
|
||||||
);
|
);
|
||||||
CREATE INDEX ON episodes (shows_id, season);
|
CREATE INDEX ON episodes (shows_id, season);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user