113 lines
2.7 KiB
Go
113 lines
2.7 KiB
Go
package controller
|
|
|
|
import (
|
|
"arimelody-web/model"
|
|
"strings"
|
|
|
|
"github.com/jmoiron/sqlx"
|
|
)
|
|
|
|
func GetAllAccounts(db *sqlx.DB) ([]model.Account, error) {
|
|
var accounts = []model.Account{}
|
|
|
|
err := db.Select(&accounts, "SELECT * FROM account ORDER BY created_at ASC")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return accounts, nil
|
|
}
|
|
|
|
func GetAccountByID(db *sqlx.DB, id string) (*model.Account, error) {
|
|
var account = model.Account{}
|
|
|
|
err := db.Get(&account, "SELECT * FROM account WHERE id=$1", id)
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "no rows") {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &account, nil
|
|
}
|
|
|
|
func GetAccountByUsername(db *sqlx.DB, username string) (*model.Account, error) {
|
|
var account = model.Account{}
|
|
|
|
err := db.Get(&account, "SELECT * FROM account WHERE username=$1", username)
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "no rows") {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &account, nil
|
|
}
|
|
|
|
func GetAccountByEmail(db *sqlx.DB, email string) (*model.Account, error) {
|
|
var account = model.Account{}
|
|
|
|
err := db.Get(&account, "SELECT * FROM account WHERE email=$1", email)
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "no rows") {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &account, nil
|
|
}
|
|
|
|
func GetAccountBySession(db *sqlx.DB, sessionToken string) (*model.Account, error) {
|
|
if sessionToken == "" { return nil, nil }
|
|
|
|
account := model.Account{}
|
|
|
|
err := db.Get(&account, "SELECT account.* FROM account JOIN token ON id=account WHERE token=$1", sessionToken)
|
|
if err != nil {
|
|
if strings.Contains(err.Error(), "no rows") {
|
|
return nil, nil
|
|
}
|
|
return nil, err
|
|
}
|
|
|
|
return &account, nil
|
|
}
|
|
|
|
func CreateAccount(db *sqlx.DB, account *model.Account) error {
|
|
err := db.Get(
|
|
&account.ID,
|
|
"INSERT INTO account (username, password, email, avatar_url) " +
|
|
"VALUES ($1, $2, $3, $4) " +
|
|
"RETURNING id",
|
|
account.Username,
|
|
account.Password,
|
|
account.Email,
|
|
account.AvatarURL,
|
|
)
|
|
|
|
return err
|
|
}
|
|
|
|
func UpdateAccount(db *sqlx.DB, account *model.Account) error {
|
|
_, err := db.Exec(
|
|
"UPDATE account " +
|
|
"SET username=$2,password=$3,email=$4,avatar_url=$5 " +
|
|
"WHERE id=$1",
|
|
account.ID,
|
|
account.Username,
|
|
account.Password,
|
|
account.Email,
|
|
account.AvatarURL,
|
|
)
|
|
|
|
return err
|
|
}
|
|
|
|
func DeleteAccount(db *sqlx.DB, accountID string) error {
|
|
_, err := db.Exec("DELETE FROM account WHERE id=$1", accountID)
|
|
return err
|
|
}
|