From 6c60e250e1cf0e3aa12a76bb6e072297ce9f5be1 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 18 Nov 2024 22:56:10 +0800 Subject: [PATCH] :card_file_box: Add relations between quoted event and original event --- pkg/internal/http/api/events_message_api.go | 15 ++++++++------- pkg/internal/models/events.go | 20 +++++++++++--------- pkg/internal/services/messages.go | 19 ++++++++++--------- 3 files changed, 29 insertions(+), 25 deletions(-) diff --git a/pkg/internal/http/api/events_message_api.go b/pkg/internal/http/api/events_message_api.go index 68ba748..c2002e1 100644 --- a/pkg/internal/http/api/events_message_api.go +++ b/pkg/internal/http/api/events_message_api.go @@ -57,13 +57,14 @@ func newMessageEvent(c *fiber.Ctx) error { _ = jsoniter.Unmarshal(raw, &parsed) event := models.Event{ - Uuid: data.Uuid, - Body: parsed, - Type: data.Type, - Sender: member, - Channel: channel, - ChannelID: channel.ID, - SenderID: member.ID, + Uuid: data.Uuid, + Body: parsed, + Type: data.Type, + Sender: member, + Channel: channel, + QuoteEventID: data.Body.QuoteEventID, + ChannelID: channel.ID, + SenderID: member.ID, } if event, err = services.NewEvent(event); err != nil { diff --git a/pkg/internal/models/events.go b/pkg/internal/models/events.go index 186ad2e..3f6d303 100644 --- a/pkg/internal/models/events.go +++ b/pkg/internal/models/events.go @@ -15,13 +15,15 @@ const ( type Event struct { cruda.BaseModel - Uuid string `json:"uuid"` - Body datatypes.JSONMap `json:"body"` - Type string `json:"type"` - Channel Channel `json:"channel"` - Sender ChannelMember `json:"sender"` - ChannelID uint `json:"channel_id"` - SenderID uint `json:"sender_id"` + Uuid string `json:"uuid"` + Body datatypes.JSONMap `json:"body"` + Type string `json:"type"` + Channel Channel `json:"channel"` + Sender ChannelMember `json:"sender"` + QuoteEventID *uint `json:"quote_event_id,omitempty"` + QuoteEvent *Event `json:"quote_event,omitempty" gorm:"foreignKey:QuoteEventID"` + ChannelID uint `json:"channel_id"` + SenderID uint `json:"sender_id"` } // Event Payloads @@ -30,7 +32,7 @@ type EventMessageBody struct { Text string `json:"text,omitempty"` Algorithm string `json:"algorithm,omitempty"` Attachments []string `json:"attachments,omitempty"` - QuoteEvent uint `json:"quote_event,omitempty"` - RelatedEvent uint `json:"related_event,omitempty"` + QuoteEventID *uint `json:"quote_event,omitempty"` + RelatedEvent *uint `json:"related_event,omitempty"` RelatedUsers []uint `json:"related_users,omitempty"` } diff --git a/pkg/internal/services/messages.go b/pkg/internal/services/messages.go index 3cd4489..2a1d651 100644 --- a/pkg/internal/services/messages.go +++ b/pkg/internal/services/messages.go @@ -19,15 +19,16 @@ func EditMessage(event models.Event, body models.EventMessageBody) (models.Event if err != nil { return event, err } - body.RelatedEvent = event.ID + body.RelatedEvent = &event.ID _, err = NewEvent(models.Event{ - Uuid: uuid.NewString(), - Body: EncodeMessageBody(body), - Type: models.EventMessageEdit, - Channel: event.Channel, - Sender: event.Sender, - ChannelID: event.ChannelID, - SenderID: event.SenderID, + Uuid: uuid.NewString(), + Body: EncodeMessageBody(body), + Type: models.EventMessageEdit, + Channel: event.Channel, + Sender: event.Sender, + QuoteEventID: body.QuoteEventID, + ChannelID: event.ChannelID, + SenderID: event.SenderID, }) if err != nil { return event, err @@ -44,7 +45,7 @@ func DeleteMessage(event models.Event) (models.Event, error) { _, err = NewEvent(models.Event{ Uuid: uuid.NewString(), Body: EncodeMessageBody(models.EventMessageBody{ - RelatedEvent: event.ID, + RelatedEvent: &event.ID, }), Type: models.EventMessageDelete, Channel: event.Channel,