skeleton/internal/database/email.xo.go
2019-08-22 00:48:27 +02:00

232 lines
4.5 KiB
Go

// Package database contains the types for schema 'public'.
package database
// Code generated by xo. DO NOT EDIT.
import (
"errors"
"time"
)
// Email represents a row from '"public"."email"'.
type Email struct {
Address string `db:"address"` // address
UserID int64 `db:"user_id"` // user_id
CreatedAt time.Time `db:"created_at"` // created_at
// xo fields
_exists, _deleted bool
}
// Exists determines if the Email exists in the database.
func (e *Email) Exists() bool {
return e._exists
}
// Deleted provides information if the Email has been deleted from the database.
func (e *Email) Deleted() bool {
return e._deleted
}
// Insert inserts the Email to the database.
func (e *Email) Insert(db XODB) error {
var err error
// if already exist, bail
if e._exists {
return errors.New("insert failed: already exists")
}
// sql insert query, primary key must be provided
const sqlstr = `INSERT INTO "public"."email" (` +
`"address", "user_id", "created_at"` +
`) VALUES (` +
`$1, $2, $3` +
`)`
// run query
XOLog(sqlstr, e.Address, e.UserID, e.CreatedAt)
_, err = db.Exec(sqlstr, e.Address, e.UserID, e.CreatedAt)
if err != nil {
return err
}
// set existence
e._exists = true
return nil
}
// Update updates the Email in the database.
func (e *Email) Update(db XODB) error {
var err error
// if doesn't exist, bail
if !e._exists {
return errors.New("update failed: does not exist")
}
// if deleted, bail
if e._deleted {
return errors.New("update failed: marked for deletion")
}
// sql query
const sqlstr = `UPDATE "public"."email" SET (` +
`"user_id", "created_at"` +
`) = ( ` +
`$1, $2` +
`) WHERE "address" = $3`
// run query
XOLog(sqlstr, e.UserID, e.CreatedAt, e.Address)
_, err = db.Exec(sqlstr, e.UserID, e.CreatedAt, e.Address)
return err
}
// Save saves the Email to the database.
func (e *Email) Save(db XODB) error {
if e.Exists() {
return e.Update(db)
}
return e.Insert(db)
}
// Upsert performs an upsert for Email.
//
// NOTE: PostgreSQL 9.5+ only
func (e *Email) Upsert(db XODB) error {
var err error
// if already exist, bail
if e._exists {
return errors.New("insert failed: already exists")
}
// sql query
const sqlstr = `INSERT INTO "public"."email" (` +
`"address", "user_id", "created_at"` +
`) VALUES (` +
`$1, $2, $3` +
`) ON CONFLICT ("address") DO UPDATE SET (` +
`"address", "user_id", "created_at"` +
`) = (` +
`EXCLUDED."address", EXCLUDED."user_id", EXCLUDED."created_at"` +
`)`
// run query
XOLog(sqlstr, e.Address, e.UserID, e.CreatedAt)
_, err = db.Exec(sqlstr, e.Address, e.UserID, e.CreatedAt)
if err != nil {
return err
}
// set existence
e._exists = true
return nil
}
// Delete deletes the Email from the database.
func (e *Email) Delete(db XODB) error {
var err error
// if doesn't exist, bail
if !e._exists {
return nil
}
// if deleted, bail
if e._deleted {
return nil
}
// sql query
const sqlstr = `DELETE FROM "public"."email" WHERE "address" = $1`
// run query
XOLog(sqlstr, e.Address)
_, err = db.Exec(sqlstr, e.Address)
if err != nil {
return err
}
// set deleted
e._deleted = true
return nil
}
// User returns the User associated with the Email's UserID (user_id).
//
// Generated from foreign key 'email_user_id_fkey'.
func (e *Email) User(db XODB) (*User, error) {
return UserByID(db, e.UserID)
}
// EmailByAddress retrieves a row from '"public"."email"' as a Email.
//
// Generated from index 'email_pkey'.
func EmailByAddress(db XODB, address string) (*Email, error) {
var err error
// sql query
const sqlstr = `SELECT ` +
`"address", "user_id", "created_at" ` +
`FROM "public"."email" ` +
`WHERE "address" = $1`
// run query
XOLog(sqlstr, address)
e := Email{
_exists: true,
}
err = db.QueryRow(sqlstr, address).Scan(&e.Address, &e.UserID, &e.CreatedAt)
if err != nil {
return nil, err
}
return &e, nil
}
// EmailsByUserID retrieves a row from '"public"."email"' as a Email.
//
// Generated from index 'email_user_id_idx'.
func EmailsByUserID(db XODB, userID int64) ([]*Email, error) {
var err error
// sql query
const sqlstr = `SELECT ` +
`"address", "user_id", "created_at" ` +
`FROM "public"."email" ` +
`WHERE "user_id" = $1`
// run query
XOLog(sqlstr, userID)
q, err := db.Query(sqlstr, userID)
if err != nil {
return nil, err
}
defer q.Close()
// load results
res := []*Email{}
for q.Next() {
e := Email{
_exists: true,
}
// scan
err = q.Scan(&e.Address, &e.UserID, &e.CreatedAt)
if err != nil {
return nil, err
}
res = append(res, &e)
}
return res, nil
}