87 lines
2.2 KiB
Go
87 lines
2.2 KiB
Go
package model
|
|
|
|
import (
|
|
"database/sql"
|
|
"time"
|
|
)
|
|
|
|
// YoutubeGroup -
|
|
type YoutubeGroup struct {
|
|
*LineGroup
|
|
Tmpl string `db:"tmpl"`
|
|
}
|
|
|
|
// YoutubeChannel -
|
|
type YoutubeChannel struct {
|
|
ID string `db:"id" cc:"id"`
|
|
Name string `db:"name" cc:"name"`
|
|
LastVideo string `db:"lastvideo" cc:"lastvideo"`
|
|
Expire int64 `db:"expire" cc:"expire"`
|
|
Ctime time.Time `db:"ctime" cc:"ctime"`
|
|
Mtime time.Time `db:"mtime" cc:"mtime"`
|
|
Groups []*YoutubeGroup `db:"-"`
|
|
}
|
|
|
|
// GetAllYoutubeChannels -
|
|
func GetAllYoutubeChannels() (yt []*YoutubeChannel, err error) {
|
|
err = x.Select(&yt, `select * from "public"."youtube_channel"`)
|
|
return
|
|
}
|
|
|
|
// GetYoutubeChannelsWithExpire -
|
|
func GetYoutubeChannelsWithExpire(e int64) (yt []*YoutubeChannel, err error) {
|
|
err = x.Select(&yt, `select * from "public"."youtube_channel" where "expire" = -1 or "expire" < $1`, e)
|
|
return
|
|
}
|
|
|
|
// GetYoutubeChannelWithID -
|
|
func GetYoutubeChannelWithID(id string) (yt *YoutubeChannel, err error) {
|
|
yt = &YoutubeChannel{}
|
|
err = x.Get(yt, `select * from "public"."youtube_channel" where "id" = $1`, id)
|
|
if err == sql.ErrNoRows {
|
|
return nil, nil
|
|
}
|
|
return
|
|
}
|
|
|
|
// Add -
|
|
func (p *YoutubeChannel) Add() (err error) {
|
|
stmt, err := x.PrepareNamed(`insert into "public"."youtube_channel" ("id", "name") values (:id, :name) returning *`)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
err = stmt.Get(p, p)
|
|
return
|
|
}
|
|
|
|
// UpdateLastVideo -
|
|
func (p *YoutubeChannel) UpdateLastVideo(vid string) (err error) {
|
|
p.LastVideo = vid
|
|
_, err = x.NamedExec(`update "public"."youtube_channel" set "lastvideo" = :lastvideo, "mtime" = now() where "id" = :id`, p)
|
|
return
|
|
}
|
|
|
|
// UpdateExpire -
|
|
func (p *YoutubeChannel) UpdateExpire(t int64) (err error) {
|
|
p.Expire = t
|
|
_, err = x.NamedExec(`update "public"."youtube_channel" set "expire" = :expire, "mtime" = now() where "id" = :id`, p)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetGroups -
|
|
func (p *YoutubeChannel) GetGroups() (err error) {
|
|
query := `select g.*, rt.tmpl as tmpl from "public"."youtube_channel" yt
|
|
left join "public"."line_youtube_rt" rt
|
|
on rt.youtube = yt.id
|
|
left join "public"."line_group" g
|
|
on g.id = rt.line
|
|
where
|
|
yt.id = $1
|
|
and rt.youtube is not null`
|
|
err = x.Select(&p.Groups, query, p.ID)
|
|
return
|
|
}
|