mirror of
https://github.com/aclindsa/moneygo.git
synced 2025-07-03 04:38:38 -04:00
Move users and securities to store
This commit is contained in:
@ -2,9 +2,8 @@ package handlers
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/aclindsa/moneygo/internal/models"
|
||||
"github.com/aclindsa/moneygo/internal/store/db"
|
||||
"github.com/aclindsa/moneygo/internal/store"
|
||||
"log"
|
||||
"net/http"
|
||||
)
|
||||
@ -15,41 +14,21 @@ func (ueu UserExistsError) Error() string {
|
||||
return "User exists"
|
||||
}
|
||||
|
||||
func GetUser(tx *db.Tx, userid int64) (*models.User, error) {
|
||||
var u models.User
|
||||
|
||||
err := tx.SelectOne(&u, "SELECT * from users where UserId=?", userid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &u, nil
|
||||
}
|
||||
|
||||
func GetUserByUsername(tx *db.Tx, username string) (*models.User, error) {
|
||||
var u models.User
|
||||
|
||||
err := tx.SelectOne(&u, "SELECT * from users where Username=?", username)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &u, nil
|
||||
}
|
||||
|
||||
func InsertUser(tx *db.Tx, u *models.User) error {
|
||||
func InsertUser(tx store.Tx, u *models.User) error {
|
||||
security_template := FindCurrencyTemplate(u.DefaultCurrency)
|
||||
if security_template == nil {
|
||||
return errors.New("Invalid ISO4217 Default Currency")
|
||||
}
|
||||
|
||||
existing, err := tx.SelectInt("SELECT count(*) from users where Username=?", u.Username)
|
||||
exists, err := tx.UsernameExists(u.Username)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if existing > 0 {
|
||||
if exists {
|
||||
return UserExistsError{}
|
||||
}
|
||||
|
||||
err = tx.Insert(u)
|
||||
err = tx.InsertUser(u)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -59,33 +38,31 @@ func InsertUser(tx *db.Tx, u *models.User) error {
|
||||
security = *security_template
|
||||
security.UserId = u.UserId
|
||||
|
||||
err = InsertSecurity(tx, &security)
|
||||
err = tx.InsertSecurity(&security)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Update the user's DefaultCurrency to our new SecurityId
|
||||
u.DefaultCurrency = security.SecurityId
|
||||
count, err := tx.Update(u)
|
||||
err = tx.UpdateUser(u)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if count != 1 {
|
||||
return errors.New("Would have updated more than one user")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func GetUserFromSession(tx *db.Tx, r *http.Request) (*models.User, error) {
|
||||
func GetUserFromSession(tx store.Tx, r *http.Request) (*models.User, error) {
|
||||
s, err := GetSession(tx, r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return GetUser(tx, s.UserId)
|
||||
return tx.GetUser(s.UserId)
|
||||
}
|
||||
|
||||
func UpdateUser(tx *db.Tx, u *models.User) error {
|
||||
security, err := GetSecurity(tx, u.DefaultCurrency, u.UserId)
|
||||
func UpdateUser(tx store.Tx, u *models.User) error {
|
||||
security, err := tx.GetSecurity(u.DefaultCurrency, u.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if security.UserId != u.UserId || security.SecurityId != u.DefaultCurrency {
|
||||
@ -94,49 +71,7 @@ func UpdateUser(tx *db.Tx, u *models.User) error {
|
||||
return errors.New("New DefaultCurrency security is not a currency")
|
||||
}
|
||||
|
||||
count, err := tx.Update(u)
|
||||
if err != nil {
|
||||
return err
|
||||
} else if count != 1 {
|
||||
return errors.New("Would have updated more than one user")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteUser(tx *db.Tx, u *models.User) error {
|
||||
count, err := tx.Delete(u)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if count != 1 {
|
||||
return fmt.Errorf("No user to delete")
|
||||
}
|
||||
_, err = tx.Exec("DELETE FROM prices WHERE prices.SecurityId IN (SELECT securities.SecurityId FROM securities WHERE securities.UserId=?)", u.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = tx.Exec("DELETE FROM splits WHERE splits.TransactionId IN (SELECT transactions.TransactionId FROM transactions WHERE transactions.UserId=?)", u.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = tx.Exec("DELETE FROM transactions WHERE transactions.UserId=?", u.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = tx.Exec("DELETE FROM securities WHERE securities.UserId=?", u.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = tx.Exec("DELETE FROM accounts WHERE accounts.UserId=?", u.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = tx.Exec("DELETE FROM reports WHERE reports.UserId=?", u.UserId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
_, err = tx.Exec("DELETE FROM sessions WHERE sessions.UserId=?", u.UserId)
|
||||
err = tx.UpdateUser(u)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@ -205,7 +140,7 @@ func UserHandler(r *http.Request, context *Context) ResponseWriterWriter {
|
||||
|
||||
return user
|
||||
} else if r.Method == "DELETE" {
|
||||
err := DeleteUser(context.Tx, user)
|
||||
err := context.StoreTx.DeleteUser(user)
|
||||
if err != nil {
|
||||
log.Print(err)
|
||||
return NewError(999 /*Internal Error*/)
|
||||
|
Reference in New Issue
Block a user