add transaction tag index

This commit is contained in:
MaysWind
2020-12-13 23:58:20 +08:00
parent d46307de07
commit 45b1cf0176
10 changed files with 271 additions and 19 deletions
+1 -1
View File
@@ -203,7 +203,7 @@ func (a *TransactionTagsApi) TagDeleteHandler(c *core.Context) (interface{}, *er
}
uid := c.GetCurrentUid()
err = a.tags.DeleteTags(uid, []int64{tagDeleteReq.Id})
err = a.tags.DeleteTag(uid, tagDeleteReq.Id)
if err != nil {
log.ErrorfWithRequestId(c, "[transaction_tags.TagDeleteHandler] failed to delete tag \"id:%d\" for user \"uid:%d\", because %s", tagDeleteReq.Id, uid, err.Error())
+60 -8
View File
@@ -8,15 +8,18 @@ import (
"github.com/mayswind/lab/pkg/log"
"github.com/mayswind/lab/pkg/models"
"github.com/mayswind/lab/pkg/services"
"github.com/mayswind/lab/pkg/utils"
)
type TransactionsApi struct {
transactions *services.TransactionService
transactions *services.TransactionService
transactionTags *services.TransactionTagService
}
var (
Transactions = &TransactionsApi{
transactions: services.Transactions,
transactions: services.Transactions,
transactionTags: services.TransactionTags,
}
)
@@ -43,11 +46,25 @@ func (a *TransactionsApi) TransactionListHandler(c *core.Context) (interface{},
finalCount = len(transactions)
}
transactionIds := make([]int64, finalCount)
for i := 0; i < finalCount; i++ {
transactionIds[i] = transactions[i].TransactionId
}
allTransactionTagIds, err := a.transactionTags.GetAllTagIdsOfTransactions(uid, transactionIds)
if err != nil {
log.ErrorfWithRequestId(c, "[transactions.TransactionListHandler] failed to get transactions tag ids for user \"uid:%d\", because %s", uid, err.Error())
return nil, errs.ErrOperationFailed
}
transactionResps := &models.TransactionInfoPageWrapperResponse{}
transactionResps.Items = make(models.TransactionInfoResponseSlice, finalCount)
for i := 0; i < finalCount; i++ {
transactionResps.Items[i] = transactions[i].ToTransactionInfoResponse(nil)
transactionTagIds := allTransactionTagIds[transactions[i].TransactionId]
transactionResps.Items[i] = transactions[i].ToTransactionInfoResponse(transactionTagIds)
}
sort.Sort(transactionResps.Items)
@@ -76,10 +93,24 @@ func (a *TransactionsApi) TransactionMonthListHandler(c *core.Context) (interfac
return nil, errs.ErrOperationFailed
}
transactionIds := make([]int64, len(transactions))
for i := 0; i < len(transactions); i++ {
transactionIds[i] = transactions[i].TransactionId
}
allTransactionTagIds, err := a.transactionTags.GetAllTagIdsOfTransactions(uid, transactionIds)
if err != nil {
log.ErrorfWithRequestId(c, "[transactions.TransactionMonthListHandler] failed to get transactions tag ids for user \"uid:%d\", because %s", uid, err.Error())
return nil, errs.ErrOperationFailed
}
transactionResps := make([]*models.TransactionInfoResponse, len(transactions))
for i := 0; i < len(transactions); i++ {
transactionResps[i] = transactions[i].ToTransactionInfoResponse(nil)
transactionTagIds := allTransactionTagIds[transactions[i].TransactionId]
transactionResps[i] = transactions[i].ToTransactionInfoResponse(transactionTagIds)
}
return transactionResps, nil
@@ -102,7 +133,15 @@ func (a *TransactionsApi) TransactionGetHandler(c *core.Context) (interface{}, *
return nil, errs.ErrOperationFailed
}
transactionResp := transaction.ToTransactionInfoResponse(nil)
allTransactionTagIds, err := a.transactionTags.GetAllTagIdsOfTransactions(uid, []int64{transaction.TransactionId})
if err != nil {
log.ErrorfWithRequestId(c, "[transactions.TransactionGetHandler] failed to get transactions tag ids for user \"uid:%d\", because %s", uid, err.Error())
return nil, errs.ErrOperationFailed
}
transactionTagIds := allTransactionTagIds[transaction.TransactionId]
transactionResp := transaction.ToTransactionInfoResponse(transactionTagIds)
return transactionResp, nil
}
@@ -142,7 +181,7 @@ func (a *TransactionsApi) TransactionCreateHandler(c *core.Context) (interface{}
uid := c.GetCurrentUid()
transaction := a.createNewTransactionModel(uid, &transactionCreateReq)
err = a.transactions.CreateTransaction(transaction)
err = a.transactions.CreateTransaction(transaction, transactionCreateReq.TagIds)
if err != nil {
log.ErrorfWithRequestId(c, "[transactions.TransactionCreateHandler] failed to create transaction \"id:%d\" for user \"uid:%d\", because %s", transaction.TransactionId, uid, err.Error())
@@ -173,6 +212,17 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
return nil, errs.Or(err, errs.ErrOperationFailed)
}
allTransactionTagIds, err := a.transactionTags.GetAllTagIdsOfTransactions(uid, []int64{transaction.TransactionId})
if err != nil {
log.ErrorfWithRequestId(c, "[transactions.TransactionModifyHandler] failed to get transactions tag ids for user \"uid:%d\", because %s", uid, err.Error())
return nil, errs.ErrOperationFailed
}
transactionTagIds := allTransactionTagIds[transaction.TransactionId]
addTransactionTagIds := utils.Int64SliceMinus(transactionModifyReq.TagIds, transactionTagIds)
removeTransactionTagIds := utils.Int64SliceMinus(transactionTagIds, transactionModifyReq.TagIds)
newTransaction := &models.Transaction{
TransactionId: transaction.TransactionId,
Uid: uid,
@@ -191,11 +241,13 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.Context) (interface{}
newTransaction.DestinationAccountId == transaction.DestinationAccountId &&
newTransaction.SourceAmount == transaction.SourceAmount &&
newTransaction.DestinationAmount == transaction.DestinationAmount &&
newTransaction.Comment == transaction.Comment {
newTransaction.Comment == transaction.Comment &&
len(addTransactionTagIds) < 1 &&
len(removeTransactionTagIds) < 1 {
return nil, errs.ErrNothingWillBeUpdated
}
err = a.transactions.ModifyTransaction(newTransaction)
err = a.transactions.ModifyTransaction(newTransaction, addTransactionTagIds, removeTransactionTagIds)
if err != nil {
log.ErrorfWithRequestId(c, "[transactions.TransactionModifyHandler] failed to update transaction \"id:%d\" for user \"uid:%d\", because %s", transactionModifyReq.Id, uid, err.Error())