Optimise ticket list loading
This commit is contained in:
parent
a8b8be92b0
commit
b872122a31
@ -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 {
|
||||
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)
|
||||
}
|
||||
|
@ -7,6 +7,7 @@
|
||||
<thead>
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Panel</th>
|
||||
<th>User</th>
|
||||
<th>View</th>
|
||||
</tr>
|
||||
@ -15,6 +16,7 @@
|
||||
{#each tickets as ticket}
|
||||
<tr>
|
||||
<td>{ticket.id}</td>
|
||||
<td>{ticket.panel_title}</td>
|
||||
{#if ticket.user !== undefined}
|
||||
<td>{ticket.user.username}#{ticket.user.discriminator}</td>
|
||||
{: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%;
|
||||
}
|
||||
</style>
|
||||
|
4
go.sum
4
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=
|
||||
|
Loading…
x
Reference in New Issue
Block a user