Add shows_tracked table
This commit is contained in:
parent
51c3ab87d9
commit
6234231e71
26
shows.go
26
shows.go
@ -39,8 +39,17 @@ var Schema = sqly.Schema{
|
|||||||
created timestamp DEFAULT current_timestamp
|
created timestamp DEFAULT current_timestamp
|
||||||
);
|
);
|
||||||
`},
|
`},
|
||||||
|
sqly.SchemaTable{
|
||||||
|
Name: "shows_tracked",
|
||||||
|
Sql: `
|
||||||
|
CREATE TABLE shows_tracked (
|
||||||
|
shows_id integer NOT NULL REFERENCES shows (id) ON DELETE CASCADE,
|
||||||
|
users_id integer NOT NULL REFERENCES users (id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
`},
|
||||||
},
|
},
|
||||||
Drop: `
|
Drop: `
|
||||||
|
DROP TABLE shows_tracked;
|
||||||
DROP TABLE episodes;
|
DROP TABLE episodes;
|
||||||
DROP TABLE shows;
|
DROP TABLE shows;
|
||||||
`,
|
`,
|
||||||
@ -53,12 +62,19 @@ const (
|
|||||||
|
|
||||||
addEpisodeQuery = `INSERT INTO episodes (shows_id, title, season, episode) VALUES ($1,$2,$3,$4);`
|
addEpisodeQuery = `INSERT INTO episodes (shows_id, title, season, episode) VALUES ($1,$2,$3,$4);`
|
||||||
getEpisodesQuery = `SELECT title, season, episode FROM episodes WHERE shows_id=$1;`
|
getEpisodesQuery = `SELECT title, season, episode FROM episodes WHERE shows_id=$1;`
|
||||||
|
|
||||||
|
getShowWithUserQuery = `
|
||||||
|
SELECT id, imdbid, title,
|
||||||
|
EXISTS (SELECT 1 FROM shows_tracked WHERE shows_id=shows.id AND users_id=$2) AS tracked
|
||||||
|
FROM shows WHERE imdbid=$1;
|
||||||
|
`
|
||||||
)
|
)
|
||||||
|
|
||||||
type Show struct {
|
type Show struct {
|
||||||
sqly.BaseTable
|
sqly.BaseTable
|
||||||
polochon.Show
|
polochon.Show
|
||||||
Episodes []*Episode
|
Episodes []*Episode
|
||||||
|
Tracked bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func Get(db *sqlx.DB, imdbID string) (*Show, error) {
|
func Get(db *sqlx.DB, imdbID string) (*Show, error) {
|
||||||
@ -70,6 +86,16 @@ func Get(db *sqlx.DB, imdbID string) (*Show, error) {
|
|||||||
return s, nil
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetAsUser returns a show with user info like tracked
|
||||||
|
func GetAsUser(db *sqlx.DB, user *users.User, imdbID string) (*Show, error) {
|
||||||
|
s := &Show{}
|
||||||
|
err := db.QueryRowx(getShowWithUserQuery, imdbID, user.ID).StructScan(s)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return s, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Show) Add(db *sqlx.DB) error {
|
func (s *Show) Add(db *sqlx.DB) error {
|
||||||
var id int
|
var id int
|
||||||
r, err := db.NamedQuery(addShowQuery, s)
|
r, err := db.NamedQuery(addShowQuery, s)
|
||||||
|
@ -8,6 +8,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"gitlab.quimbo.fr/odwrtw/canape-sql/sqly"
|
"gitlab.quimbo.fr/odwrtw/canape-sql/sqly"
|
||||||
|
"gitlab.quimbo.fr/odwrtw/canape-sql/users"
|
||||||
|
|
||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
@ -141,3 +142,39 @@ func TestAddRemoveShow(t *testing.T) {
|
|||||||
})
|
})
|
||||||
|
|
||||||
}
|
}
|
||||||
|
func TestTrackedShow(t *testing.T) {
|
||||||
|
sqly.RunWithSchema(db, Schema, t, func(db *sqlx.DB, t *testing.T) {
|
||||||
|
nfo := strings.NewReader(showNFO1)
|
||||||
|
s := &polochon.Show{}
|
||||||
|
polochon.ReadNFO(nfo, s)
|
||||||
|
show := Show{Show: *s}
|
||||||
|
show.Add(db)
|
||||||
|
|
||||||
|
u := &users.User{Name: "plop"}
|
||||||
|
err := u.Add(db)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
show1, err := GetAsUser(db, u, "tt2357547")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if show1.Tracked {
|
||||||
|
t.Fatal("Tracked must be false here")
|
||||||
|
}
|
||||||
|
|
||||||
|
q := `INSERT INTO shows_tracked (shows_id, users_id) VALUES ($1, $2);`
|
||||||
|
_, err = db.Exec(q, show1.ID, u.ID)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
show2, err := GetAsUser(db, u, "tt2357547")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !show2.Tracked {
|
||||||
|
t.Fatal("Tracked must be true here")
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
@ -71,16 +71,16 @@ func (s Schema) Create(db *sqlx.DB) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s Schema) Delete(db *sqlx.DB) error {
|
func (s Schema) Delete(db *sqlx.DB) error {
|
||||||
|
err := MultiExec(db, s.Drop)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
for _, sch := range s.Require {
|
for _, sch := range s.Require {
|
||||||
err := sch.Delete(db)
|
err := sch.Delete(db)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err := MultiExec(db, s.Drop)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user