api: export mention event ticket references
Currently the JSON export does not set the `from_ticket` field for events of type TICKET_MENTIONED. This commit implements writing out the data as described in the legacy API docs: https://man.sr.ht/todo.sr.ht/api.md#event-resource Note that currently these events are not imported anyways (never have been).
This commit is contained in:
parent
7e6b9628a4
commit
8ad96d48ce
|
@ -330,7 +330,34 @@ func exportTicketEvents(ctx context.Context, tx *sql.Tx, ticketID int) ([]Event,
|
|||
}
|
||||
evDump.ByUser = exportParticipant(byUser)
|
||||
}
|
||||
// TODO: populate FromTicket
|
||||
if ev.EventType&model.EVENT_TICKET_MENTIONED != 0 {
|
||||
var (
|
||||
fromTicket *model.Ticket
|
||||
fromTicketTracker *model.Tracker
|
||||
fromTicketTrackerOwner *model.User
|
||||
err error
|
||||
)
|
||||
// TODO write a custom loader, maybe?
|
||||
fromTicket, err = loaders.ForContext(ctx).TicketsByID.Load(*ev.FromTicketID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if fromTicket != nil {
|
||||
fromTicketTracker, err = loaders.ForContext(ctx).TrackersByID.Load(fromTicket.TrackerID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if fromTicketTracker != nil {
|
||||
fromTicketTrackerOwner, err = loaders.ForContext(ctx).UsersByID.Load(fromTicketTracker.OwnerID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if fromTicketTrackerOwner != nil {
|
||||
evDump.FromTicket = exportTicketRef(fromTicket, fromTicketTracker, fromTicketTrackerOwner)
|
||||
}
|
||||
}
|
||||
|
||||
l = append(l, evDump)
|
||||
}
|
||||
|
@ -424,6 +451,23 @@ func exportParticipant(e model.Entity) *Participant {
|
|||
panic(fmt.Errorf("unknown entity type %T", e))
|
||||
}
|
||||
|
||||
func exportTicketRef(ticket *model.Ticket, tracker *model.Tracker, owner *model.User) *TicketRef {
|
||||
return &TicketRef{
|
||||
ID: ticket.ID,
|
||||
Ref: ticket.Ref(),
|
||||
Tracker: TrackerRef{
|
||||
Owner: User{
|
||||
ID: owner.ID,
|
||||
CanonicalName: owner.CanonicalName(),
|
||||
Name: owner.Username,
|
||||
},
|
||||
Created: tracker.Created,
|
||||
Updated: tracker.Updated,
|
||||
Name: tracker.Name,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func convertNullString(ns *string) string {
|
||||
if ns == nil {
|
||||
return ""
|
||||
|
|
|
@ -54,6 +54,19 @@ type Ticket struct {
|
|||
Events []Event `json:"events,omitempty"`
|
||||
}
|
||||
|
||||
type TrackerRef struct {
|
||||
Owner User `json:"owner"`
|
||||
Created time.Time `json:"created"`
|
||||
Updated time.Time `json:"updated"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type TicketRef struct {
|
||||
ID int `json:"id"`
|
||||
Ref string `json:"ref"`
|
||||
Tracker TrackerRef `json:"tracker"`
|
||||
}
|
||||
|
||||
type Event struct {
|
||||
ID int `json:"id"`
|
||||
Created time.Time `json:"created"`
|
||||
|
@ -66,7 +79,7 @@ type Event struct {
|
|||
Comment *Comment `json:"comment,omitempty"`
|
||||
Label *string `json:"label,omitempty"`
|
||||
ByUser *Participant `json:"by_user,omitempty"`
|
||||
FromTicket *Ticket `json:"from_ticket,omitempty"`
|
||||
FromTicket *TicketRef `json:"from_ticket,omitempty"`
|
||||
Upstream string `json:"upstream"`
|
||||
Signature string `json:"X-Payload-Signature,omitempty"`
|
||||
Nonce string `json:"X-Payload-Nonce,omitempty"`
|
||||
|
|
Loading…
Reference in New Issue