diff --git a/database/ticket.go b/database/ticket.go index 02b1f9a..b2d89e9 100644 --- a/database/ticket.go +++ b/database/ticket.go @@ -136,7 +136,7 @@ func toTicketSimpleResponse(key string, ticket *model.Ticket) (*model.TicketSimp }, nil } -func toTicketWithTickets(ticketResponse *model.TicketResponse, tickets []*model.TicketSimpleResponse, logs []*model.LogEntry) *model.TicketWithTickets { +func toTicketWithTickets(ticketResponse *model.TicketResponse, tickets, correlatedTickets []*model.TicketSimpleResponse, logs []*model.LogEntry) *model.TicketWithTickets { return &model.TicketWithTickets{ Artifacts: ticketResponse.Artifacts, Comments: ticketResponse.Comments, @@ -155,8 +155,9 @@ func toTicketWithTickets(ticketResponse *model.TicketResponse, tickets []*model. Type: ticketResponse.Type, Write: ticketResponse.Write, - Logs: logs, - Tickets: tickets, + Logs: logs, + Tickets: tickets, + CorrelatedTickets: correlatedTickets, } } @@ -405,7 +406,6 @@ func (db *Database) ticketGetQuery(ctx context.Context, ticketID int64, query st tickets := outTickets tickets = append(tickets, inTickets...) - tickets = append(tickets, sameArtifactTickets...) sort.Slice(tickets, func(i, j int) bool { return tickets[i].ID < tickets[j].ID }) @@ -420,7 +420,7 @@ func (db *Database) ticketGetQuery(ctx context.Context, ticketID int64, query st return nil, err } - return toTicketWithTickets(ticketResponse, tickets, logs), nil + return toTicketWithTickets(ticketResponse, tickets, sameArtifactTickets, logs), nil } func (db *Database) TicketUpdate(ctx context.Context, ticketID int64, ticket *model.Ticket) (*model.TicketWithTickets, error) { diff --git a/definition/tickets.yaml b/definition/tickets.yaml index 364a2e2..8a99bd1 100644 --- a/definition/tickets.yaml +++ b/definition/tickets.yaml @@ -1059,6 +1059,7 @@ definitions: modified: { type: string, format: "date-time", example: "1985-04-12T23:20:50.52Z" } tickets: { type: array, items: { $ref: "#/definitions/TicketSimpleResponse" } } + correlated_tickets: { type: array, items: { $ref: "#/definitions/TicketSimpleResponse" } } TicketList: type: object diff --git a/generated/catalyst.json b/generated/catalyst.json index 0c4490e..b3a044b 100644 --- a/generated/catalyst.json +++ b/generated/catalyst.json @@ -6964,6 +6964,12 @@ }, "type" : "array" }, + "correlated_tickets" : { + "items" : { + "$ref" : "#/components/schemas/TicketSimpleResponse" + }, + "type" : "array" + }, "created" : { "example" : "1985-04-12T23:20:50.52Z", "format" : "date-time", diff --git a/generated/catalyst.yml b/generated/catalyst.yml index b780504..68b993d 100644 --- a/generated/catalyst.yml +++ b/generated/catalyst.yml @@ -1172,6 +1172,10 @@ definitions: items: $ref: '#/definitions/Comment' type: array + correlated_tickets: + items: + $ref: '#/definitions/TicketSimpleResponse' + type: array created: example: 1985-04-12T23:20:50.52Z format: date-time diff --git a/generated/community.json b/generated/community.json index 47cbeec..ffc3bc5 100644 --- a/generated/community.json +++ b/generated/community.json @@ -6385,6 +6385,12 @@ }, "type" : "array" }, + "correlated_tickets" : { + "items" : { + "$ref" : "#/components/schemas/TicketSimpleResponse" + }, + "type" : "array" + }, "created" : { "example" : "1985-04-12T23:20:50.52Z", "format" : "date-time", diff --git a/generated/community.yml b/generated/community.yml index d929244..622e7b6 100644 --- a/generated/community.yml +++ b/generated/community.yml @@ -1053,6 +1053,10 @@ definitions: items: $ref: '#/definitions/Comment' type: array + correlated_tickets: + items: + $ref: '#/definitions/TicketSimpleResponse' + type: array created: example: 1985-04-12T23:20:50.52Z format: date-time diff --git a/generated/model/model.go b/generated/model/model.go index ac2643e..0b87c02 100755 --- a/generated/model/model.go +++ b/generated/model/model.go @@ -114,7 +114,7 @@ func init() { gojsonschema.NewStringLoader(`{"type":"object","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"name":{"type":"string"}},"required":["name","icon","default_template","default_playbooks"],"$id":"#/definitions/TicketType"}`), gojsonschema.NewStringLoader(`{"type":"object","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["name","icon","default_template","default_playbooks"],"$id":"#/definitions/TicketTypeForm"}`), gojsonschema.NewStringLoader(`{"type":"object","properties":{"default_groups":{"items":{"type":"string"},"type":"array"},"default_playbooks":{"items":{"type":"string"},"type":"array"},"default_template":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","icon","default_template","default_playbooks"],"$id":"#/definitions/TicketTypeResponse"}`), - gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"logs":{"items":{"$ref":"#/definitions/LogEntry"},"type":"array"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/PlaybookResponse"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"tickets":{"items":{"$ref":"#/definitions/TicketSimpleResponse"},"type":"array"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"required":["id","name","type","status","created","modified","schema"],"$id":"#/definitions/TicketWithTickets"}`), + gojsonschema.NewStringLoader(`{"type":"object","properties":{"artifacts":{"items":{"$ref":"#/definitions/Artifact"},"type":"array"},"comments":{"items":{"$ref":"#/definitions/Comment"},"type":"array"},"correlated_tickets":{"items":{"$ref":"#/definitions/TicketSimpleResponse"},"type":"array"},"created":{"format":"date-time","type":"string"},"details":{"type":"object"},"files":{"items":{"$ref":"#/definitions/File"},"type":"array"},"id":{"format":"int64","type":"integer"},"logs":{"items":{"$ref":"#/definitions/LogEntry"},"type":"array"},"modified":{"format":"date-time","type":"string"},"name":{"type":"string"},"owner":{"type":"string"},"playbooks":{"type":"object","additionalProperties":{"$ref":"#/definitions/PlaybookResponse"}},"read":{"items":{"type":"string"},"type":"array"},"references":{"items":{"$ref":"#/definitions/Reference"},"type":"array"},"schema":{"type":"string"},"status":{"type":"string"},"tickets":{"items":{"$ref":"#/definitions/TicketSimpleResponse"},"type":"array"},"type":{"type":"string"},"write":{"items":{"type":"string"},"type":"array"}},"required":["id","name","type","status","created","modified","schema"],"$id":"#/definitions/TicketWithTickets"}`), gojsonschema.NewStringLoader(`{"type":"object","properties":{"color":{"title":"Color","type":"string","enum":["error","info","success","warning"]},"icon":{"title":"Icon (https://materialdesignicons.com)","type":"string"},"id":{"title":"ID","type":"string"},"name":{"title":"Name","type":"string"}},"required":["id","name","icon"],"$id":"#/definitions/Type"}`), gojsonschema.NewStringLoader(`{"type":"object","properties":{"apikey":{"type":"boolean"},"blocked":{"type":"boolean"},"roles":{"items":{"type":"string"},"type":"array"},"sha256":{"type":"string"}},"required":["blocked","apikey","roles"],"$id":"#/definitions/User"}`), gojsonschema.NewStringLoader(`{"type":"object","properties":{"email":{"type":"string"},"image":{"type":"string"},"name":{"type":"string"},"timeformat":{"title":"Time Format (https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens)","type":"string"}},"$id":"#/definitions/UserData"}`), @@ -557,24 +557,25 @@ type TicketTypeResponse struct { } type TicketWithTickets struct { - Artifacts []*Artifact `json:"artifacts,omitempty"` - Comments []*Comment `json:"comments,omitempty"` - Created time.Time `json:"created"` - Details map[string]any `json:"details,omitempty"` - Files []*File `json:"files,omitempty"` - ID int64 `json:"id"` - Logs []*LogEntry `json:"logs,omitempty"` - Modified time.Time `json:"modified"` - Name string `json:"name"` - Owner *string `json:"owner,omitempty"` - Playbooks map[string]*PlaybookResponse `json:"playbooks,omitempty"` - Read []string `json:"read,omitempty"` - References []*Reference `json:"references,omitempty"` - Schema string `json:"schema"` - Status string `json:"status"` - Tickets []*TicketSimpleResponse `json:"tickets,omitempty"` - Type string `json:"type"` - Write []string `json:"write,omitempty"` + Artifacts []*Artifact `json:"artifacts,omitempty"` + Comments []*Comment `json:"comments,omitempty"` + CorrelatedTickets []*TicketSimpleResponse `json:"correlated_tickets,omitempty"` + Created time.Time `json:"created"` + Details map[string]any `json:"details,omitempty"` + Files []*File `json:"files,omitempty"` + ID int64 `json:"id"` + Logs []*LogEntry `json:"logs,omitempty"` + Modified time.Time `json:"modified"` + Name string `json:"name"` + Owner *string `json:"owner,omitempty"` + Playbooks map[string]*PlaybookResponse `json:"playbooks,omitempty"` + Read []string `json:"read,omitempty"` + References []*Reference `json:"references,omitempty"` + Schema string `json:"schema"` + Status string `json:"status"` + Tickets []*TicketSimpleResponse `json:"tickets,omitempty"` + Type string `json:"type"` + Write []string `json:"write,omitempty"` } type Type struct { diff --git a/ui/src/client/api.ts b/ui/src/client/api.ts index 4cb23e1..ac89745 100644 --- a/ui/src/client/api.ts +++ b/ui/src/client/api.ts @@ -2024,6 +2024,12 @@ export interface TicketWithTickets { * @memberof TicketWithTickets */ 'comments'?: Array; + /** + * + * @type {Array} + * @memberof TicketWithTickets + */ + 'correlated_tickets'?: Array; /** * * @type {string} diff --git a/ui/src/components/TicketList.vue b/ui/src/components/TicketList.vue index 324c9d6..4227c54 100644 --- a/ui/src/components/TicketList.vue +++ b/ui/src/components/TicketList.vue @@ -93,7 +93,7 @@