From b872122a31cca80ec6f8504295f21c8d87c9f280 Mon Sep 17 00:00:00 2001 From: rxdn <29165304+rxdn@users.noreply.github.com> Date: Tue, 26 Jul 2022 17:09:16 +0100 Subject: [PATCH] Optimise ticket list loading --- app/http/endpoints/api/ticket/gettickets.go | 77 ++++++++++++--------- frontend/src/views/Tickets.svelte | 32 +-------- go.sum | 4 -- 3 files changed, 48 insertions(+), 65 deletions(-) diff --git a/app/http/endpoints/api/ticket/gettickets.go b/app/http/endpoints/api/ticket/gettickets.go index b866169..ea0562b 100644 --- a/app/http/endpoints/api/ticket/gettickets.go +++ b/app/http/endpoints/api/ticket/gettickets.go @@ -1,21 +1,20 @@ package api import ( - "context" "github.com/TicketsBot/GoPanel/database" "github.com/TicketsBot/GoPanel/rpc/cache" "github.com/TicketsBot/GoPanel/utils" "github.com/gin-gonic/gin" "github.com/rxdn/gdl/objects/user" - "golang.org/x/sync/errgroup" ) -func GetTickets(ctx *gin.Context) { - type WithUser struct { - TicketId int `json:"id"` - User *user.User `json:"user,omitempty"` - } +type ticketResponse struct { + TicketId int `json:"id"` + PanelTitle string `json:"panel_title"` + User *user.User `json:"user,omitempty"` +} +func GetTickets(ctx *gin.Context) { guildId := ctx.Keys["guildid"].(uint64) tickets, err := database.Client.Tickets.GetGuildOpenTickets(guildId) @@ -24,33 +23,49 @@ func GetTickets(ctx *gin.Context) { return } - data := make([]WithUser, len(tickets)) - - group, _ := errgroup.WithContext(context.Background()) - - for i, ticket := range tickets { - i := i - ticket := ticket - - group.Go(func() error { - user, ok := cache.Instance.GetUser(ticket.UserId) - - data[i] = WithUser{ - TicketId: ticket.Id, - } - - if ok { - data[i].User = &user - } - - return nil - }) - } - - if err := group.Wait(); err != nil { + panels, err := database.Client.Panel.GetByGuild(guildId) + if err != nil { ctx.JSON(500, utils.ErrorJson(err)) return } + panelTitles := make(map[int]string) + for _, panel := range panels { + panelTitles[panel.PanelId] = panel.Title + } + + // Get user objects + userIds := make([]uint64, len(tickets)) + for i, ticket := range tickets { + userIds[i] = ticket.UserId + } + + users, err := cache.Instance.GetUsers(userIds) + if err != nil { + ctx.JSON(500, utils.ErrorJson(err)) + return + } + + data := make([]ticketResponse, len(tickets)) + for i, ticket := range tickets { + var user *user.User + if tmp, ok := users[ticket.UserId]; ok { + user = &tmp + } + + panelTitle := "Unknown" + if ticket.PanelId != nil { + if tmp, ok := panelTitles[*ticket.PanelId]; ok { + panelTitle = tmp + } + } + + data[i] = ticketResponse{ + TicketId: ticket.Id, + PanelTitle: panelTitle, + User: user, + } + } + ctx.JSON(200, data) } diff --git a/frontend/src/views/Tickets.svelte b/frontend/src/views/Tickets.svelte index 84e4da6..9e68da5 100644 --- a/frontend/src/views/Tickets.svelte +++ b/frontend/src/views/Tickets.svelte @@ -7,6 +7,7 @@ ID + Panel User View @@ -15,6 +16,7 @@ {#each tickets as ticket} {ticket.id} + {ticket.panel_title} {#if ticket.user !== undefined} {ticket.user.username}#{ticket.user.discriminator} {:else} @@ -81,40 +83,10 @@ margin-top: 30px; } - .main-col { - display: flex; - flex-direction: column; - width: 64%; - height: 100%; - } - - .right-col { - display: flex; - flex-direction: column; - width: 34%; - height: 100%; - } - .body-wrapper { display: flex; flex-direction: column; width: 100%; height: 100%; } - - .row { - display: flex; - flex-direction: row; - width: 100%; - height: 100%; - margin-bottom: 2%; - } - - .col { - display: flex; - flex-direction: column; - width: 100%; - height: 100%; - margin-bottom: 2%; - } diff --git a/go.sum b/go.sum index f1732a0..0e932e9 100644 --- a/go.sum +++ b/go.sum @@ -5,8 +5,6 @@ github.com/TicketsBot/archiverclient v0.0.0-20220326163414-558fd52746dc h1:n15W8 github.com/TicketsBot/archiverclient v0.0.0-20220326163414-558fd52746dc/go.mod h1:2KcfHS0JnSsgcxZBs3NyWMXNQzEo67mBSGOyzHPWOCc= github.com/TicketsBot/common v0.0.0-20220703211704-f792aa9f0c42 h1:3/qnbrEfL8gqSbjJ4o7WKkdoPngmhjAGEXFwteEjpqs= github.com/TicketsBot/common v0.0.0-20220703211704-f792aa9f0c42/go.mod h1:WxHh6bY7KhIqdayeOp5f0Zj2NNi/7QqCQfMEqHnpdAM= -github.com/TicketsBot/database v0.0.0-20220725214217-fe953c05126d h1:Xjlg6CHM+rXl5kWJevZspK5SxcGtaY3xE1q64/MDkx8= -github.com/TicketsBot/database v0.0.0-20220725214217-fe953c05126d/go.mod h1:F57cywrZsnper1cy56Bx0c/HEsxQBLHz3Pl98WXblWw= github.com/TicketsBot/database v0.0.0-20220726141552-4560095e37f7 h1:fdGleu/242MMcdFyyVlhfBXbOWoKREjEXdRS62O42Ao= github.com/TicketsBot/database v0.0.0-20220726141552-4560095e37f7/go.mod h1:F57cywrZsnper1cy56Bx0c/HEsxQBLHz3Pl98WXblWw= github.com/TicketsBot/logarchiver v0.0.0-20220326162808-cdf0310f5e1c h1:OqGjFH6mbE6gd+NqI2ARJdtH3UUvhiAkD0r0fhGJK2s= @@ -276,8 +274,6 @@ github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6po github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= -github.com/rxdn/gdl v0.0.0-20220702190021-560b2ab99d25 h1:9G1HcBG9hLFT7+FKiiVECF+Z2Y0yt3BrSNnuDXcRb7A= -github.com/rxdn/gdl v0.0.0-20220702190021-560b2ab99d25/go.mod h1:HtxfLp4OaoPoDJHQ4JOx/QeLH2d40VgT3wNOf7ETsRE= github.com/rxdn/gdl v0.0.0-20220726141522-788c9ce67ad0 h1:i2WqGZFCpow9d9ZfdVbEExeCkAnw969CIMyOtebqGVY= github.com/rxdn/gdl v0.0.0-20220726141522-788c9ce67ad0/go.mod h1:HtxfLp4OaoPoDJHQ4JOx/QeLH2d40VgT3wNOf7ETsRE= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=