From 76c78e0c01956176f88179e3ebe17bf9b50eeef7 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 10 Mar 2025 23:58:25 +0800 Subject: [PATCH] :bug: Fix publisher info did not marked used --- pkg/internal/http/api/publishers_api.go | 3 +- pkg/internal/services/publishers.go | 48 ++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/pkg/internal/http/api/publishers_api.go b/pkg/internal/http/api/publishers_api.go index 6765021..0ac4d1f 100644 --- a/pkg/internal/http/api/publishers_api.go +++ b/pkg/internal/http/api/publishers_api.go @@ -191,6 +191,7 @@ func editPublisher(c *fiber.Ctx) error { return err } + og := publisher publisher.Name = data.Name publisher.Nick = data.Nick publisher.Description = data.Description @@ -200,7 +201,7 @@ func editPublisher(c *fiber.Ctx) error { publisher.AccountID = data.AccountID } - if publisher, err = services.EditPublisher(user, publisher); err != nil { + if publisher, err = services.EditPublisher(user, publisher, og); err != nil { return fiber.NewError(fiber.StatusBadRequest, err.Error()) } diff --git a/pkg/internal/services/publishers.go b/pkg/internal/services/publishers.go index dd81a97..58bb375 100644 --- a/pkg/internal/services/publishers.go +++ b/pkg/internal/services/publishers.go @@ -2,8 +2,12 @@ package services import ( "fmt" + "git.solsynth.dev/hypernet/interactive/pkg/internal/database" + "git.solsynth.dev/hypernet/interactive/pkg/internal/gap" "git.solsynth.dev/hypernet/interactive/pkg/internal/models" + "git.solsynth.dev/hypernet/paperclip/pkg/filekit" + "git.solsynth.dev/hypernet/paperclip/pkg/proto" authm "git.solsynth.dev/hypernet/passport/pkg/authkit/models" ) @@ -33,13 +37,23 @@ func CreatePersonalPublisher(user authm.Account, name, nick, desc, avatar, banne Banner: banner, AccountID: &user.ID, } + var attachments []string if user.Avatar != nil && len(publisher.Avatar) == 0 { + attachments = append(attachments, *user.Avatar) publisher.Avatar = *user.Avatar } if user.Banner != nil && len(publisher.Banner) == 0 { + attachments = append(attachments, *user.Banner) publisher.Banner = *user.Banner } + if len(attachments) > 0 { + filekit.CountAttachmentUsage(gap.Nx, &proto.UpdateUsageRequest{ + Rid: attachments, + Delta: 1, + }) + } + if err := database.C.Create(&publisher).Error; err != nil { return publisher, err } @@ -57,26 +71,58 @@ func CreateOrganizationPublisher(user authm.Account, realm authm.Realm, name, ni RealmID: &realm.ID, AccountID: &user.ID, } + var attachments []string if realm.Avatar != nil && len(publisher.Avatar) == 0 { + attachments = append(attachments, *realm.Avatar) publisher.Avatar = *realm.Avatar } if realm.Banner != nil && len(publisher.Banner) == 0 { + attachments = append(attachments, *realm.Banner) publisher.Banner = *realm.Banner } + if len(attachments) > 0 { + filekit.CountAttachmentUsage(gap.Nx, &proto.UpdateUsageRequest{ + Rid: attachments, + Delta: 1, + }) + } + if err := database.C.Create(&publisher).Error; err != nil { return publisher, err } return publisher, nil } -func EditPublisher(user authm.Account, publisher models.Publisher) (models.Publisher, error) { +func EditPublisher(user authm.Account, publisher, og models.Publisher) (models.Publisher, error) { if publisher.Type == models.PublisherTypePersonal { if *publisher.AccountID != user.ID { return publisher, fmt.Errorf("you cannot transfer personal publisher") } } + var minusAttachments, plusAttachments []string + if publisher.Avatar != og.Avatar { + minusAttachments = append(minusAttachments, og.Avatar) + plusAttachments = append(plusAttachments, publisher.Avatar) + } + if publisher.Banner != og.Banner { + minusAttachments = append(minusAttachments, og.Banner) + plusAttachments = append(plusAttachments, publisher.Banner) + } + if len(minusAttachments) > 0 { + filekit.CountAttachmentUsage(gap.Nx, &proto.UpdateUsageRequest{ + Rid: minusAttachments, + Delta: -1, + }) + } + if len(plusAttachments) > 0 { + filekit.CountAttachmentUsage(gap.Nx, &proto.UpdateUsageRequest{ + Rid: plusAttachments, + Delta: 1, + }) + } + err := database.C.Save(&publisher).Error return publisher, err }