api: fully apply builder pattern to event builder

It seems to have been designed this way initially, but many functions
did not adhere.
This commit is contained in:
Conrad Hoffmann 2024-01-26 13:23:04 +01:00 committed by Drew DeVault
parent fb651a7997
commit 9096cc0af5
2 changed files with 45 additions and 47 deletions

View File

@ -155,7 +155,7 @@ func (builder *EventBuilder) WithTicket(
}
// Adds mentions to this event builder
func (builder *EventBuilder) AddMentions(mentions *Mentions) {
func (builder *EventBuilder) AddMentions(mentions *Mentions) *EventBuilder {
builder.mentions = mentions
for user, _ := range mentions.Users {
part, err := loaders.ForContext(builder.ctx).ParticipantsByUsername.Load(user)
@ -177,10 +177,11 @@ func (builder *EventBuilder) AddMentions(mentions *Mentions) {
}
builder.mentionedParticipants = append(builder.mentionedParticipants, part.ID)
}
return builder
}
// Creates subscriptions for all affected users
func (builder *EventBuilder) InsertSubscriptions() {
func (builder *EventBuilder) InsertSubscriptions() *EventBuilder {
_, err := builder.tx.ExecContext(builder.ctx, `
INSERT INTO ticket_subscription (
created, updated, ticket_id, participant_id
@ -197,11 +198,12 @@ func (builder *EventBuilder) InsertSubscriptions() {
if err != nil {
panic(err)
}
return builder
}
// Adds event_notification records for all affected users and inserts
// ancillary events (such as mentions) and their notifications.
func (builder *EventBuilder) InsertNotifications(eventID int, commentID *int) {
func (builder *EventBuilder) InsertNotifications(eventID int, commentID *int) *EventBuilder {
_, err := builder.tx.ExecContext(builder.ctx, `
INSERT INTO event_notification (created, event_id, user_id)
SELECT
@ -216,7 +218,7 @@ func (builder *EventBuilder) InsertNotifications(eventID int, commentID *int) {
}
if builder.mentions == nil {
return
return builder
}
for _, id := range builder.mentionedParticipants {
@ -271,11 +273,13 @@ func (builder *EventBuilder) InsertNotifications(eventID int, commentID *int) {
panic(err)
}
}
return builder
}
// Sets the given message ID to be added to In-Reply-To/References headers
func (builder *EventBuilder) InReplyTo(messageId *string) {
func (builder *EventBuilder) InReplyTo(messageId *string) *EventBuilder {
builder.inReplyTo = messageId
return builder
}
func sendEmail(ctx context.Context, address, message string) error {

View File

@ -830,22 +830,6 @@ func (r *mutationResolver) SubmitTicket(ctx context.Context, trackerID int, inpu
return err
}
ticket.OwnerName = owner.Username
ticket.TrackerName = tracker.Name
conf := config.ForContext(ctx)
origin := config.GetOrigin(conf, "todo.sr.ht", true)
builder := NewEventBuilder(ctx, tx, participant.ID, model.EVENT_CREATED).
WithTicket(tracker, &ticket)
if ticket.Body != nil {
mentions := ScanMentions(ctx, tracker, &ticket, *ticket.Body)
builder.AddMentions(&mentions)
}
builder.InsertSubscriptions()
var eventID int
row = tx.QueryRowContext(ctx, `
INSERT INTO event (
@ -859,7 +843,21 @@ func (r *mutationResolver) SubmitTicket(ctx context.Context, trackerID int, inpu
panic(err)
}
builder.InsertNotifications(eventID, nil)
ticket.OwnerName = owner.Username
ticket.TrackerName = tracker.Name
conf := config.ForContext(ctx)
origin := config.GetOrigin(conf, "todo.sr.ht", true)
builder := NewEventBuilder(ctx, tx, participant.ID, model.EVENT_CREATED).
WithTicket(tracker, &ticket).
InsertSubscriptions().
InsertNotifications(eventID, nil)
if ticket.Body != nil {
mentions := ScanMentions(ctx, tracker, &ticket, *ticket.Body)
builder.AddMentions(&mentions)
}
details := NewTicketDetails{
Body: ticket.Body,
@ -979,22 +977,6 @@ func (r *mutationResolver) SubmitTicketEmail(ctx context.Context, trackerID int,
return err
}
ticket.OwnerName = owner.Username
ticket.TrackerName = tracker.Name
conf := config.ForContext(ctx)
origin := config.GetOrigin(conf, "todo.sr.ht", true)
builder := NewEventBuilder(ctx, tx, input.SenderID, model.EVENT_CREATED).
WithTicket(tracker, &ticket)
if ticket.Body != nil {
mentions := ScanMentions(ctx, tracker, &ticket, *ticket.Body)
builder.AddMentions(&mentions)
}
builder.InsertSubscriptions()
var eventID int
row = tx.QueryRowContext(ctx, `
INSERT INTO event (
@ -1008,9 +990,22 @@ func (r *mutationResolver) SubmitTicketEmail(ctx context.Context, trackerID int,
panic(err)
}
builder.InsertNotifications(eventID, nil)
ticket.OwnerName = owner.Username
ticket.TrackerName = tracker.Name
builder.InReplyTo(&input.MessageID)
conf := config.ForContext(ctx)
origin := config.GetOrigin(conf, "todo.sr.ht", true)
builder := NewEventBuilder(ctx, tx, input.SenderID, model.EVENT_CREATED).
WithTicket(tracker, &ticket).
InsertSubscriptions().
InsertNotifications(eventID, nil).
InReplyTo(&input.MessageID)
if ticket.Body != nil {
mentions := ScanMentions(ctx, tracker, &ticket, *ticket.Body)
builder.AddMentions(&mentions)
}
details := NewTicketDetails{
Body: ticket.Body,
@ -1225,12 +1220,7 @@ func (r *mutationResolver) SubmitCommentEmail(ctx context.Context, trackerID int
}
}
builder := NewEventBuilder(ctx, tx, input.SenderID, eventType).
WithTicket(tracker, ticket)
mentions := ScanMentions(ctx, tracker, ticket, input.Text)
builder.AddMentions(&mentions)
builder.InsertSubscriptions()
eventRow := insertEvent.Values(sq.Expr("now() at time zone 'utc'"),
eventType, ticket.PKID, input.SenderID, commentID,
@ -1241,9 +1231,13 @@ func (r *mutationResolver) SubmitCommentEmail(ctx context.Context, trackerID int
if err := eventRow.Scan(database.Scan(ctx, &event)...); err != nil {
return err
}
builder.InsertNotifications(event.ID, &commentID)
builder.InReplyTo(&input.MessageID)
builder := NewEventBuilder(ctx, tx, input.SenderID, eventType).
WithTicket(tracker, ticket).
AddMentions(&mentions).
InsertSubscriptions().
InsertNotifications(event.ID, &commentID).
InReplyTo(&input.MessageID)
conf := config.ForContext(ctx)
origin := config.GetOrigin(conf, "todo.sr.ht", true)