diff --git a/app/http/endpoints/api/transcripts/list.go b/app/http/endpoints/api/transcripts/list.go index c680677..258344d 100644 --- a/app/http/endpoints/api/transcripts/list.go +++ b/app/http/endpoints/api/transcripts/list.go @@ -11,10 +11,11 @@ import ( const pageLimit = 15 type transcript struct { - TicketId int `json:"ticket_id"` - Username string `json:"username"` - CloseReason *string `json:"close_reason"` - Rating *uint8 `json:"rating"` + TicketId int `json:"ticket_id"` + Username string `json:"username"` + CloseReason *string `json:"close_reason"` + Rating *uint8 `json:"rating"` + HasTranscript bool `json:"has_transcript"` } func ListTranscripts(ctx *gin.Context) { @@ -90,8 +91,9 @@ func ListTranscripts(ctx *gin.Context) { transcripts := make([]transcript, len(tickets)) for i, ticket := range tickets { transcript := transcript{ - TicketId: ticket.Id, - Username: usernames[ticket.UserId], + TicketId: ticket.Id, + Username: usernames[ticket.UserId], + HasTranscript: ticket.HasTranscript, } if v, ok := ratings[ticket.Id]; ok { diff --git a/app/http/endpoints/api/transcripts/listself.go b/app/http/endpoints/api/transcripts/listself.go new file mode 100644 index 0000000..2796abd --- /dev/null +++ b/app/http/endpoints/api/transcripts/listself.go @@ -0,0 +1,82 @@ +package api + +import ( + "context" + dbclient "github.com/TicketsBot/GoPanel/database" + "github.com/TicketsBot/GoPanel/rpc/cache" + "github.com/TicketsBot/GoPanel/utils" + "github.com/TicketsBot/database" + "github.com/gin-gonic/gin" + gdlutils "github.com/rxdn/gdl/utils" + "golang.org/x/sync/errgroup" + "strconv" +) + +// ListSelfTranscripts TODO: Give user option to rate ticket +func ListSelfTranscripts(ctx *gin.Context) { + userId := ctx.Keys["userid"].(uint64) + + page, err := strconv.Atoi(ctx.Query("page")) + if err != nil { + ctx.JSON(400, utils.ErrorJson(err)) + return + } + + var offset int + if page > 1 { + offset = pageLimit * (page - 1) + } + + opts := database.TicketQueryOptions{ + UserIds: []uint64{userId}, + Open: gdlutils.BoolPtr(false), + Order: database.OrderTypeDescending, + Limit: pageLimit, + Offset: offset, + } + + tickets, err := dbclient.Client.Tickets.GetByOptions(opts) + if err != nil { + ctx.JSON(500, utils.ErrorJson(err)) + return + } + + type TranscriptData struct { + TicketId int `json:"ticket_id"` + GuildId uint64 `json:"guild_id"` + GuildName string `json:"guild_name"` + } + + // TODO: Not O(n) + data := make([]TranscriptData, len(tickets)) + + group, _ := errgroup.WithContext(context.Background()) + for i, ticket := range tickets { + group.Go(func() error { + var guildName string + { + guild, ok := cache.Instance.GetGuild(ticket.GuildId, false) + if ok { + guildName = guild.Name + } else { + guildName = "Unknown server" + } + } + + data[i] = TranscriptData{ + TicketId: ticket.Id, + GuildId: ticket.GuildId, + GuildName: guildName, + } + + return nil + }) + } + + if err := group.Wait(); err != nil { + ctx.JSON(500, utils.ErrorJson(err)) + return + } + + ctx.JSON(200, data) +} diff --git a/frontend/src/views/Transcripts.svelte b/frontend/src/views/Transcripts.svelte index 370729d..e39be4d 100644 --- a/frontend/src/views/Transcripts.svelte +++ b/frontend/src/views/Transcripts.svelte @@ -71,7 +71,7 @@ {/if} {transcript.close_reason || 'No reason specified'} - {#if settings.store_transcripts} + {#if transcript.has_transcript} diff --git a/go.mod b/go.mod index 0a8f469..0260cec 100644 --- a/go.mod +++ b/go.mod @@ -6,7 +6,7 @@ require ( github.com/BurntSushi/toml v0.3.1 github.com/TicketsBot/archiverclient v0.0.0-20210220155137-a562b2f1bbbb github.com/TicketsBot/common v0.0.0-20210910205523-7ce93fba6fa5 - github.com/TicketsBot/database v0.0.0-20211025101648-1c5a53942cbe + github.com/TicketsBot/database v0.0.0-20211025111926-e4c1ec293983 github.com/TicketsBot/worker v0.0.0-20210910205947-89f7bd5ccf67 github.com/apex/log v1.1.2 github.com/boj/redistore v0.0.0-20180917114910-cd5dcc76aeff // indirect diff --git a/go.sum b/go.sum index c5891b3..bfa8357 100644 --- a/go.sum +++ b/go.sum @@ -18,6 +18,8 @@ github.com/TicketsBot/database v0.0.0-20211024191932-85d9cf1d71a8 h1:TROAdrUeCjx github.com/TicketsBot/database v0.0.0-20211024191932-85d9cf1d71a8/go.mod h1:72oWvH/Gq1iKeXCZhVRZn1JFbNVC5iAgERZWTrEarEo= github.com/TicketsBot/database v0.0.0-20211025101648-1c5a53942cbe h1:SImaEnLPwW18P016eBpE+kyneb1Nw8qjJfuTn05v34A= github.com/TicketsBot/database v0.0.0-20211025101648-1c5a53942cbe/go.mod h1:72oWvH/Gq1iKeXCZhVRZn1JFbNVC5iAgERZWTrEarEo= +github.com/TicketsBot/database v0.0.0-20211025111926-e4c1ec293983 h1:VNP6gNgxQHvHJmVNOk8aQTUtgwDDOLsXgFlQrYc0AgY= +github.com/TicketsBot/database v0.0.0-20211025111926-e4c1ec293983/go.mod h1:72oWvH/Gq1iKeXCZhVRZn1JFbNVC5iAgERZWTrEarEo= github.com/TicketsBot/logarchiver v0.0.0-20200423221245-a3f92edf8c14/go.mod h1:whts8TRxrAF4WuDuEAMllkWA/inKem0NhDEFeyuoOvE= github.com/TicketsBot/ttlcache v1.6.1-0.20200405150101-acc18e37b261 h1:NHD5GB6cjlkpZFjC76Yli2S63/J2nhr8MuE6KlYJpQM= github.com/TicketsBot/ttlcache v1.6.1-0.20200405150101-acc18e37b261/go.mod h1:2zPxDAN2TAPpxUPjxszjs3QFKreKrQh5al/R3cMXmYk=