mtfosbot/model/account.go

62 lines
1.4 KiB
Go

package model
import (
"database/sql"
"errors"
"time"
)
// Account - table
type Account struct {
ID string `db:"id" cc:"id"`
Account string `db:"account" cc:"account"`
Password string `db:"password" cc:"-"`
Ctime time.Time `db:"ctime" cc:"ctime"`
Mtime time.Time `db:"mtime" cc:"ctime"`
}
// GetAllAccount -
func GetAllAccount() (accs []*Account, err error) {
err = x.Select(&accs, "select * from public.account order by ctime asc")
if err != nil {
return nil, err
}
return
}
// GetAccount -
func GetAccount(account string) (acc *Account, err error) {
acc = &Account{}
err = x.Get(acc, `select * from "public"."account" where "account" = $1`, account)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return
}
// CreateAccount -
func CreateAccount(account, password string) (acc *Account, err error) {
acc = &Account{}
err = x.Get(acc, `insert into "public"."account" ("account", "password", "ctime", "mtime") values ($1, $2, now(), now()) returning *`, account, password)
if err == sql.ErrNoRows {
return nil, nil
}
if err != nil {
return nil, err
}
return
}
// ChangePassword -
func (p *Account) ChangePassword(password string) (err error) {
if len(password) == 0 {
return errors.New("password is empty")
}
_, err = x.Exec(`update "public"."account" set "password" = $1, "mtime" = now() where "id" = $2`, password, p.ID)
p.Password = password
return
}