home to your local SPACEGIRL 馃挮 arimelody.space
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at dev 135 lines 3.6 kB view raw
1package controller 2 3import ( 4 "arimelody-web/model" 5 "strings" 6 7 "github.com/jmoiron/sqlx" 8) 9 10func GetAllAccounts(db *sqlx.DB) ([]model.Account, error) { 11 var accounts = []model.Account{} 12 13 err := db.Select(&accounts, "SELECT * FROM account ORDER BY created_at ASC") 14 if err != nil { 15 return nil, err 16 } 17 18 return accounts, nil 19} 20 21func GetAccountByID(db *sqlx.DB, id string) (*model.Account, error) { 22 var account = model.Account{} 23 24 err := db.Get(&account, "SELECT * FROM account WHERE id=$1", id) 25 if err != nil { 26 if strings.Contains(err.Error(), "no rows") { 27 return nil, nil 28 } 29 return nil, err 30 } 31 32 return &account, nil 33} 34 35func GetAccountByUsername(db *sqlx.DB, username string) (*model.Account, error) { 36 var account = model.Account{} 37 38 err := db.Get(&account, "SELECT * FROM account WHERE username=$1", username) 39 if err != nil { 40 if strings.Contains(err.Error(), "no rows") { 41 return nil, nil 42 } 43 return nil, err 44 } 45 46 return &account, nil 47} 48 49func GetAccountByEmail(db *sqlx.DB, email string) (*model.Account, error) { 50 var account = model.Account{} 51 52 err := db.Get(&account, "SELECT * FROM account WHERE email=$1", email) 53 if err != nil { 54 if strings.Contains(err.Error(), "no rows") { 55 return nil, nil 56 } 57 return nil, err 58 } 59 60 return &account, nil 61} 62 63func GetAccountBySession(db *sqlx.DB, sessionToken string) (*model.Account, error) { 64 if sessionToken == "" { return nil, nil } 65 66 account := model.Account{} 67 68 err := db.Get(&account, "SELECT account.* FROM account JOIN token ON id=account WHERE token=$1", sessionToken) 69 if err != nil { 70 if strings.Contains(err.Error(), "no rows") { 71 return nil, nil 72 } 73 return nil, err 74 } 75 76 return &account, nil 77} 78 79func CreateAccount(db *sqlx.DB, account *model.Account) error { 80 err := db.Get( 81 &account.ID, 82 "INSERT INTO account (username, password, email, avatar_url) " + 83 "VALUES ($1, $2, $3, $4) " + 84 "RETURNING id", 85 account.Username, 86 account.Password, 87 account.Email, 88 account.AvatarURL, 89 ) 90 91 return err 92} 93 94func UpdateAccount(db *sqlx.DB, account *model.Account) error { 95 _, err := db.Exec( 96 "UPDATE account " + 97 "SET username=$2,password=$3,email=$4,avatar_url=$5 " + 98 "WHERE id=$1", 99 account.ID, 100 account.Username, 101 account.Password, 102 account.Email, 103 account.AvatarURL, 104 ) 105 106 return err 107} 108 109func DeleteAccount(db *sqlx.DB, accountID string) error { 110 _, err := db.Exec("DELETE FROM account WHERE id=$1", accountID) 111 return err 112} 113 114func IncrementAccountFails(db *sqlx.DB, accountID string) (bool, error) { 115 failAttempts := 0 116 err := db.Get(&failAttempts, "UPDATE account SET fail_attempts = fail_attempts + 1 WHERE id=$1 RETURNING fail_attempts", accountID) 117 if err != nil { return false, err } 118 locked := false 119 if failAttempts >= model.MAX_LOGIN_FAIL_ATTEMPTS { 120 err = LockAccount(db, accountID) 121 if err != nil { return false, err } 122 locked = true 123 } 124 return locked, err 125} 126 127func LockAccount(db *sqlx.DB, accountID string) error { 128 _, err := db.Exec("UPDATE account SET locked = true WHERE id=$1", accountID) 129 return err 130} 131 132func UnlockAccount(db *sqlx.DB, accountID string) error { 133 _, err := db.Exec("UPDATE account SET locked = false, fail_attempts = 0 WHERE id=$1", accountID) 134 return err 135}