support transaction pictures

This commit is contained in:
MaysWind
2024-08-31 23:57:28 +08:00
parent ae46cd2332
commit 7fbfa71434
15 changed files with 595 additions and 10 deletions
+21
View File
@@ -144,6 +144,27 @@ func (a *TransactionPicturesApi) TransactionPictureGetHandler(c *core.WebContext
return pictureData, contentType, nil
}
// TransactionPictureRemoveUnusedHandler removes unused transaction picture by request parameters for current user
func (a *TransactionPicturesApi) TransactionPictureRemoveUnusedHandler(c *core.WebContext) (any, *errs.Error) {
var pictureDeleteReq models.TransactionPictureUnusedDeleteRequest
err := c.ShouldBindJSON(&pictureDeleteReq)
if err != nil {
log.Warnf(c, "[transaction_pictures.TransactionPictureRemoveUnusedHandler] parse request failed, because %s", err.Error())
return nil, errs.NewIncompleteOrIncorrectSubmissionError(err)
}
uid := c.GetCurrentUid()
err = a.pictures.RemoveUnusedTransactionPicture(c, uid, pictureDeleteReq.Id)
if err != nil {
log.Errorf(c, "[transaction_pictures.TransactionPictureRemoveUnusedHandler] failed to remove unused transaction picture for user \"uid:%d\", because %s", uid, err.Error())
return nil, errs.Or(err, errs.ErrOperationFailed)
}
return true, nil
}
func (a *TransactionPicturesApi) createNewPictureInfoModel(uid int64, fileExtension string, clientIp string) *models.TransactionPictureInfo {
return &models.TransactionPictureInfo{
Uid: uid,
+12 -4
View File
@@ -589,7 +589,7 @@ func (a *TransactionsApi) TransactionGetHandler(c *core.WebContext) (any, *errs.
}
}
if transactionGetReq.WithPictures {
if transactionGetReq.WithPictures && a.CurrentConfig().EnableTransactionPictures {
pictureInfos, err = a.transactionPictures.GetPictureInfosByTransactionId(c, uid, transaction.TransactionId)
if err != nil {
@@ -622,7 +622,7 @@ func (a *TransactionsApi) TransactionGetHandler(c *core.WebContext) (any, *errs.
transactionResp.Tags = a.getTransactionTagInfoResponses(transactionTagIds, tagMap)
}
if transactionGetReq.WithPictures {
if transactionGetReq.WithPictures && a.CurrentConfig().EnableTransactionPictures {
transactionResp.Pictures = a.GetTransactionPictureInfoResponseList(pictureInfos)
}
@@ -653,6 +653,10 @@ func (a *TransactionsApi) TransactionCreateHandler(c *core.WebContext) (any, *er
return nil, errs.ErrTransactionPictureIdInvalid
}
if len(pictureIds) > 10 {
return nil, errs.ErrTransactionPictureTooMuch
}
if transactionCreateReq.Type < models.TRANSACTION_TYPE_MODIFY_BALANCE || transactionCreateReq.Type > models.TRANSACTION_TYPE_TRANSFER {
log.Warnf(c, "[transactions.TransactionCreateHandler] transaction type is invalid")
return nil, errs.ErrTransactionTypeInvalid
@@ -775,6 +779,10 @@ func (a *TransactionsApi) TransactionModifyHandler(c *core.WebContext) (any, *er
return nil, errs.ErrTransactionPictureIdInvalid
}
if len(pictureIds) > 10 {
return nil, errs.ErrTransactionPictureTooMuch
}
uid := c.GetCurrentUid()
user, err := a.users.GetUserById(c, uid)
@@ -1214,7 +1222,7 @@ func (a *TransactionsApi) getTransactionResponseListResult(c *core.WebContext, u
}
}
if withPictures {
if withPictures && a.CurrentConfig().EnableTransactionPictures {
pictureInfoMap, err = a.transactionPictures.GetPictureInfosByTransactionIds(c, uid, utils.ToUniqueInt64Slice(a.transactions.GetTransactionIds(transactions)))
if err != nil {
@@ -1256,7 +1264,7 @@ func (a *TransactionsApi) getTransactionResponseListResult(c *core.WebContext, u
result[i].Tags = a.getTransactionTagInfoResponses(transactionTagIds, tagMap)
}
if withPictures {
if withPictures && a.CurrentConfig().EnableTransactionPictures {
pictureInfos, exists := pictureInfoMap[transaction.TransactionId]
if exists {
+1
View File
@@ -10,4 +10,5 @@ var (
ErrTransactionPictureIsEmpty = NewNormalError(NormalSubcategoryPicture, 3, http.StatusBadRequest, "transaction picture is empty")
ErrTransactionPictureNoExists = NewNormalError(NormalSubcategoryPicture, 4, http.StatusNotFound, "transaction picture not exists")
ErrTransactionPictureExtensionInvalid = NewNormalError(NormalSubcategoryPicture, 5, http.StatusNotFound, "transaction picture file extension invalid")
ErrTransactionPictureTooMuch = NewNormalError(NormalSubcategoryPicture, 6, http.StatusBadRequest, "transaction pictures too much")
)
+5
View File
@@ -15,6 +15,11 @@ type TransactionPictureInfo struct {
DeletedUnixTime int64
}
// TransactionPictureUnusedDeleteRequest represents all parameters of unused transaction picture deleting request
type TransactionPictureUnusedDeleteRequest struct {
Id int64 `json:"id,string" binding:"required,min=1"`
}
// TransactionPictureInfoBasicResponse represents a view-object of transaction picture basic info
type TransactionPictureInfoBasicResponse struct {
PictureId int64 `json:"pictureId,string"`
+30
View File
@@ -211,6 +211,36 @@ func (s *TransactionPictureService) UploadPicture(c core.Context, pictureInfo *m
})
}
// RemoveUnusedTransactionPicture removes the unused transaction picture of specified user
func (s *TransactionPictureService) RemoveUnusedTransactionPicture(c core.Context, uid int64, pictureId int64) error {
if uid <= 0 {
return errs.ErrUserIdInvalid
}
if pictureId <= 0 {
return errs.ErrTransactionPictureIdInvalid
}
now := time.Now().Unix()
updateModel := &models.TransactionPictureInfo{
Deleted: true,
DeletedUnixTime: now,
}
return s.UserDB().DoTransaction(c, func(sess *xorm.Session) error {
deletedRows, err := sess.ID(pictureId).Cols("deleted", "deleted_unix_time").Where("uid=? AND deleted=? AND transaction_id=?", uid, false, models.TransactionPictureNewPictureTransactionId).Update(updateModel)
if err != nil {
return err
} else if deletedRows < 1 {
return errs.ErrTransactionPictureNotFound
}
return err
})
}
// GetPictureInfoMapByList returns a transaction picture info list map by a list
func (s *TransactionPictureService) GetPictureInfoMapByList(pictureInfos []*models.TransactionPictureInfo) map[int64]*models.TransactionPictureInfo {
pictureInfoMap := make(map[int64]*models.TransactionPictureInfo)