129 lines
2.7 KiB
Go
129 lines
2.7 KiB
Go
package models
|
|
|
|
import (
|
|
"database/sql"
|
|
"errors"
|
|
"time"
|
|
|
|
"git.trj.tw/golang/utils/dbtool"
|
|
)
|
|
|
|
// Album model
|
|
type Album struct {
|
|
ID string `sql:"id" cc:"id"`
|
|
UID string `sql:"uid" cc:"uid"`
|
|
Name string `sql:"name" cc:"name"`
|
|
Public bool `sql:"public" cc:"public"`
|
|
Ctime time.Time `sql:"ctime" cc:"ctime"`
|
|
Mtime time.Time `sql:"mtime" cc:"mtime"`
|
|
}
|
|
|
|
// GetAllAlbums -
|
|
func GetAllAlbums(arg ...bool) (album []Album, err error) {
|
|
var rows *sql.Rows
|
|
if len(arg) > 0 {
|
|
rows, err = x.Query(`select "id", "uid", "name", "public", "ctime", "mtime" from "storage"."album" where "public" = $1`, arg[0])
|
|
} else {
|
|
rows, err = x.Query(`select "id", "uid", "name", "public", "ctime", "mtime" from "storage"."album"`)
|
|
}
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
err = dbtool.ScanToStructAll(rows, &album)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// GetUserAlbums -
|
|
func GetUserAlbums(uid string) (album []Album, err error) {
|
|
if len(uid) == 0 {
|
|
return nil, errors.New("user id empty")
|
|
}
|
|
rows, err := x.Query(`select "id", "uid", "name", "public", "ctime", "mtime" from "storage"."album" where "uid" = $1`, uid)
|
|
|
|
err = dbtool.ScanToStructAll(rows, &album)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
// GetAlbum -
|
|
func GetAlbum(id, uid string) (album *Album, err error) {
|
|
rows, err := x.Query(`select "id", "uid", "name", "public", "ctime", "mtime" from "storage"."album" where "id" = $1 and "uid" = $2 limit 1`, id, uid)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer rows.Close()
|
|
album = &Album{}
|
|
ok, err := dbtool.ScanToStruct(rows, album)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !ok {
|
|
return nil, nil
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Get -
|
|
func (a *Album) Get() (err error) {
|
|
rows, err := x.Query(`select "id", "uid", "name", "public", "ctime", "mtime" from "storage"."album" where "id" = $1`, a.ID)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
ok, err := dbtool.ScanToStruct(rows, a)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if !ok {
|
|
return errors.New("album data not found")
|
|
}
|
|
return
|
|
}
|
|
|
|
// Create -
|
|
func (a *Album) Create() (err error) {
|
|
if len(a.UID) == 0 || len(a.Name) == 0 {
|
|
return errors.New("album data empty")
|
|
}
|
|
|
|
rows, err := x.Query(`insert into "storage"."album" ("uid", "name", "public") values ($1, $2, $3) returning *`, a.UID, a.Name, a.Public)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer rows.Close()
|
|
|
|
_, err = dbtool.ScanToStruct(rows, a)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// Update -
|
|
func (a *Album) Update() (err error) {
|
|
_, err = x.Exec(`update "storage"."album" set
|
|
"name" = $1,
|
|
"public" = $2
|
|
where
|
|
"id" = $3`, a.Name, a.Public, a.ID)
|
|
|
|
return
|
|
}
|
|
|
|
// Delete -
|
|
func (a *Album) Delete() (err error) {
|
|
_, err = x.Exec(`delete from "storage"."album" where "id" = $1`, a.ID)
|
|
return
|
|
}
|