2020-05-11 18:49:07 +01:00

73 lines
1.6 KiB
Go

package api
import (
"context"
"fmt"
"github.com/TicketsBot/GoPanel/database"
"github.com/TicketsBot/GoPanel/rpc/cache"
"github.com/gin-gonic/gin"
"golang.org/x/sync/errgroup"
"strconv"
)
func GetTickets(ctx *gin.Context) {
guildId := ctx.Keys["guildid"].(uint64)
tickets, err := database.Client.Tickets.GetGuildOpenTickets(guildId)
if err != nil {
ctx.AbortWithStatusJSON(500, gin.H{
"success": false,
"error": err.Error(),
})
return
}
ticketsFormatted := make([]map[string]interface{}, len(tickets))
group, _ := errgroup.WithContext(context.Background())
for i, ticket := range tickets {
i := i
ticket := ticket
group.Go(func() error {
members, err := database.Client.TicketMembers.Get(guildId, ticket.Id)
if err != nil {
return err
}
membersFormatted := make([]map[string]interface{}, 0)
for _, userId := range members {
user, _ := cache.Instance.GetUser(userId)
membersFormatted = append(membersFormatted, map[string]interface{}{
"id": strconv.FormatUint(userId, 10),
"username": user.Username,
"discrim": fmt.Sprintf("%04d", user.Discriminator),
})
}
owner, _ := cache.Instance.GetUser(ticket.UserId)
ticketsFormatted[len(tickets) - 1 - i] = map[string]interface{}{
"ticketId": ticket.Id,
"username": owner.Username,
"discrim": fmt.Sprintf("%04d", owner.Discriminator),
"members": membersFormatted,
}
return nil
})
}
if err := group.Wait(); err != nil {
ctx.AbortWithStatusJSON(500, gin.H{
"success": false,
"error": err.Error(),
})
return
}
ctx.JSON(200, ticketsFormatted)
}