canape/backend/models/polochons.go
Grégoire Delattre 09eb97b235
All checks were successful
continuous-integration/drone/push Build is passing
Remove unused stuff and check more errors
All the things fixed where reported by golangci-lint.
2020-03-01 16:20:06 +01:00

124 lines
3.1 KiB
Go

package models
import (
"database/sql"
"errors"
"fmt"
"git.quimbo.fr/odwrtw/canape/backend/sqly"
"github.com/jmoiron/sqlx"
"github.com/odwrtw/papi"
)
const (
addPolochonQuery = `INSERT INTO
polochons (name, url, token, admin_id)
VALUES ($1, $2, $3, $4)
RETURNING id;`
getPolochonByIDQuery = `SELECT * FROM polochons WHERE id=$1;`
getPolochonsByUserIDQuery = `SELECT * FROM polochons WHERE admin_id=$1 ORDER BY created_at DESC;`
updatePolochonQuery = `UPDATE polochons SET
name=:name, url=:url, token=:token, auth_token=:auth_token,
admin_id=:admin_id
WHERE id=:id
RETURNING *;`
deletePolochonQuery = `DELETE FROM polochons WHERE id=:id;`
getAllPolochonsQuery = `SELECT * FROM polochons ORDER BY created_at DESC;`
)
// ErrUnknownPolochon returned when a polochon doesn't exist
var ErrUnknownPolochon = fmt.Errorf("polochons: polochon does'nt exist")
// Polochon represents a polochon
type Polochon struct {
sqly.BaseModel
Name string `db:"name" json:"name"`
URL string `db:"url" json:"url"`
Token string `db:"token" json:"token"`
AuthToken string `db:"auth_token" json:"auth_token"`
AdminID string `db:"admin_id" json:"admin_id"`
Admin *User `json:"admin"`
Users []*User `json:"users"`
}
// GetPolochonByID returns polochon using its id
func GetPolochonByID(q sqlx.Queryer, id string) (*Polochon, error) {
p := &Polochon{}
err := q.QueryRowx(getPolochonByIDQuery, id).StructScan(p)
if err != nil {
if err == sql.ErrNoRows {
return nil, ErrUnknownPolochon
}
return nil, err
}
return p, nil
}
// GetAllPolochons returns all the polochons
func GetAllPolochons(db *sqlx.DB) ([]*Polochon, error) {
polochons := []*Polochon{}
err := db.Select(&polochons, getAllPolochonsQuery)
if err != nil {
return nil, err
}
return polochons, nil
}
// GetAllPolochonsByUser returns all the polochons owned by the user
func GetAllPolochonsByUser(db *sqlx.DB, id string) ([]*Polochon, error) {
polochons := []*Polochon{}
err := db.Select(&polochons, getPolochonsByUserIDQuery, id)
if err != nil {
return nil, err
}
return polochons, nil
}
// Add polochon to database or raises an error
func (p *Polochon) Add(q sqlx.Queryer) error {
var id string
err := q.QueryRowx(addPolochonQuery, p.Name, p.URL, p.Token, p.AdminID).Scan(&id)
if err != nil {
return err
}
p.ID = id
return nil
}
// Update polochon on database or raise an error
func (p *Polochon) Update(ex *sqlx.DB) error {
rows, err := ex.NamedQuery(updatePolochonQuery, p)
if err != nil {
return err
}
for rows.Next() {
if err := rows.StructScan(p); err != nil {
return err
}
}
return nil
}
// Delete polochon from database or raise an error
func (p *Polochon) Delete(ex *sqlx.DB) error {
_, err := ex.NamedExec(deletePolochonQuery, p)
if err != nil {
return err
}
return nil
}
// NewPapiClient creates a new papi client for the given polochon
func (p *Polochon) NewPapiClient() (*papi.Client, error) {
client, err := papi.New(p.URL)
if err != nil {
return nil, errors.New("error getting papi client")
}
if p.Token != "" {
client.SetToken(p.Token)
}
return client, nil
}