Development SDK of Paperclip

 Support update usage by random id
This commit is contained in:
2025-03-10 23:11:12 +08:00
parent 38aa06cc00
commit 1d866f317f
5 changed files with 109 additions and 51 deletions

View File

@ -93,10 +93,18 @@ func (v *Server) UpdateVisibility(ctx context.Context, request *proto.UpdateVisi
}
func (v *Server) UpdateUsage(ctx context.Context, request *proto.UpdateUsageRequest) (*proto.UpdateUsageResponse, error) {
id := lo.Map(request.GetId(), func(item uint64, _ int) uint {
return uint(item)
})
if rows, err := services.CountAttachmentUsage(id, int(request.GetDelta())); err != nil {
tx := database.C
if len(request.Id) == 0 && len(request.Rid) == 0 {
return nil, status.Error(codes.InvalidArgument, "you must provide at least one id or random id")
}
if len(request.Id) > 0 {
tx = tx.Where("id IN ?", request.Id)
}
if len(request.Rid) > 0 {
tx = tx.Where("rid IN ?", request.Rid)
}
if rows, err := services.CountAttachmentUsage(tx, int(request.GetDelta())); err != nil {
return nil, status.Error(codes.Internal, err.Error())
} else {
return &proto.UpdateUsageResponse{

View File

@ -318,9 +318,8 @@ func DeleteAttachmentInBatch(items []models.Attachment, txs ...*gorm.DB) error {
return nil
}
func CountAttachmentUsage(id []uint, delta int) (int64, error) {
if tx := database.C.Model(&models.Attachment{}).
Where("id IN ?", id).
func CountAttachmentUsage(tx *gorm.DB, delta int) (int64, error) {
if tx := tx.Model(&models.Attachment{}).
Update("used_count", gorm.Expr("used_count + ?", delta)); tx.Error != nil {
return tx.RowsAffected, tx.Error
} else {