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:
parent
fb651a7997
commit
9096cc0af5
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue