mirror of
https://github.com/aclindsa/moneygo.git
synced 2024-12-26 15:42:27 -05:00
Transaction.Balanced: Return and handle errors
This commit is contained in:
parent
bcbc4df67f
commit
841df05022
@ -98,17 +98,17 @@ func (t *Transaction) Valid() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *Transaction) Balanced() bool {
|
func (t *Transaction) Balanced() (bool, error) {
|
||||||
var zero big.Rat
|
var zero big.Rat
|
||||||
sums := make(map[int64]big.Rat)
|
sums := make(map[int64]big.Rat)
|
||||||
|
|
||||||
if !t.Valid() {
|
if !t.Valid() {
|
||||||
return false // TODO Open question: should we report an error here instead?
|
return false, errors.New("Transaction invalid")
|
||||||
}
|
}
|
||||||
for i := range t.Splits {
|
for i := range t.Splits {
|
||||||
account, err := GetAccount(t.Splits[i].AccountId, t.UserId)
|
account, err := GetAccount(t.Splits[i].AccountId, t.UserId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false
|
return false, err
|
||||||
}
|
}
|
||||||
amount, _ := t.Splits[i].GetAmount()
|
amount, _ := t.Splits[i].GetAmount()
|
||||||
sum := sums[account.SecurityId]
|
sum := sums[account.SecurityId]
|
||||||
@ -117,10 +117,10 @@ func (t *Transaction) Balanced() bool {
|
|||||||
}
|
}
|
||||||
for _, security_sum := range sums {
|
for _, security_sum := range sums {
|
||||||
if security_sum.Cmp(&zero) != 0 {
|
if security_sum.Cmp(&zero) != 0 {
|
||||||
return false
|
return false, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetTransaction(transactionid int64, userid int64) (*Transaction, error) {
|
func GetTransaction(transactionid int64, userid int64) (*Transaction, error) {
|
||||||
@ -418,7 +418,13 @@ func TransactionHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
transaction.TransactionId = -1
|
transaction.TransactionId = -1
|
||||||
transaction.UserId = user.UserId
|
transaction.UserId = user.UserId
|
||||||
|
|
||||||
if !transaction.Valid() || !transaction.Balanced() {
|
balanced, err := transaction.Balanced()
|
||||||
|
if err != nil {
|
||||||
|
WriteError(w, 999 /*Internal Error*/)
|
||||||
|
log.Print(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !transaction.Valid() || !balanced {
|
||||||
WriteError(w, 3 /*Invalid Request*/)
|
WriteError(w, 3 /*Invalid Request*/)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -498,7 +504,13 @@ func TransactionHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
transaction.UserId = user.UserId
|
transaction.UserId = user.UserId
|
||||||
|
|
||||||
if !transaction.Valid() || !transaction.Balanced() {
|
balanced, err := transaction.Balanced()
|
||||||
|
if err != nil {
|
||||||
|
WriteError(w, 999 /*Internal Error*/)
|
||||||
|
log.Print(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !transaction.Valid() || !balanced {
|
||||||
WriteError(w, 3 /*Invalid Request*/)
|
WriteError(w, 3 /*Invalid Request*/)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user