fix: pagination, adds total pages count and total rows count to results.

This commit is contained in:
Abhinav Raut
2024-11-03 01:35:16 +05:30
parent ed314eb1a5
commit 4f4d79409c
10 changed files with 119 additions and 84 deletions
+37 -7
View File
@@ -11,7 +11,7 @@ import (
"github.com/zerodha/fastglue"
)
// handleGetAllConversations retrieves all conversations with pagination, sorting, and filtering.
// handleGetAllConversations retrieves all conversations.
func handleGetAllConversations(r *fastglue.Request) error {
var (
app = r.Context.(*App)
@@ -20,12 +20,22 @@ func handleGetAllConversations(r *fastglue.Request) error {
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
filters = string(r.RequestCtx.QueryArgs().Peek("filters"))
total = 0
)
c, err := app.conversation.GetAllConversationsList(order, orderBy, filters, page, pageSize)
conversations, pageSize, err := app.conversation.GetAllConversationsList(order, orderBy, filters, page, pageSize)
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(c)
if len(conversations) > 0 {
total = conversations[0].Total
}
return r.SendEnvelope(envelope.PageResults{
Results: conversations,
Total: total,
PerPage: pageSize,
TotalPages: total / pageSize,
Page: page,
})
}
// handleGetAssignedConversations retrieves conversations assigned to the current user.
@@ -38,12 +48,22 @@ func handleGetAssignedConversations(r *fastglue.Request) error {
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
filters = string(r.RequestCtx.QueryArgs().Peek("filters"))
total = 0
)
c, err := app.conversation.GetAssignedConversationsList(user.ID, order, orderBy, filters, page, pageSize)
conversations, pageSize, err := app.conversation.GetAssignedConversationsList(user.ID, order, orderBy, filters, page, pageSize)
if err != nil {
return r.SendErrorEnvelope(fasthttp.StatusInternalServerError, err.Error(), nil, "")
}
return r.SendEnvelope(c)
if len(conversations) > 0 {
total = conversations[0].Total
}
return r.SendEnvelope(envelope.PageResults{
Results: conversations,
Total: total,
PerPage: pageSize,
TotalPages: total / pageSize,
Page: page,
})
}
// handleGetUnassignedConversations retrieves unassigned conversations.
@@ -56,12 +76,22 @@ func handleGetUnassignedConversations(r *fastglue.Request) error {
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
filters = string(r.RequestCtx.QueryArgs().Peek("filters"))
total = 0
)
c, err := app.conversation.GetUnassignedConversationsList(user.ID, order, orderBy, filters, page, pageSize)
conversations, pageSize, err := app.conversation.GetUnassignedConversationsList(user.ID, order, orderBy, filters, page, pageSize)
if err != nil {
return r.SendErrorEnvelope(fasthttp.StatusInternalServerError, err.Error(), nil, "")
}
return r.SendEnvelope(c)
if len(conversations) > 0 {
total = conversations[0].Total
}
return r.SendEnvelope(envelope.PageResults{
Results: conversations,
Total: total,
PerPage: pageSize,
TotalPages: total / pageSize,
Page: page,
})
}
// handleGetConversation retrieves a single conversation by UUID with permission checks.
+11 -2
View File
@@ -5,6 +5,7 @@ import (
"github.com/abhinavxd/artemis/internal/conversation"
cmodels "github.com/abhinavxd/artemis/internal/conversation/models"
"github.com/abhinavxd/artemis/internal/envelope"
medModels "github.com/abhinavxd/artemis/internal/media/models"
umodels "github.com/abhinavxd/artemis/internal/user/models"
"github.com/valyala/fasthttp"
@@ -24,6 +25,7 @@ func handleGetMessages(r *fastglue.Request) error {
user = r.RequestCtx.UserValue("user").(umodels.User)
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
total = 0
)
// Check permission
@@ -32,17 +34,24 @@ func handleGetMessages(r *fastglue.Request) error {
return sendErrorEnvelope(r, err)
}
messages, err := app.conversation.GetConversationMessages(uuid, page, pageSize)
messages, pageSize, err := app.conversation.GetConversationMessages(uuid, page, pageSize)
if err != nil {
return sendErrorEnvelope(r, err)
}
for i := range messages {
total = messages[i].Total
for j := range messages[i].Attachments {
messages[i].Attachments[j].URL = app.media.GetURL(messages[i].Attachments[j].UUID)
}
}
return r.SendEnvelope(messages)
return r.SendEnvelope(envelope.PageResults{
Total: total,
Results: messages,
Page: page,
PerPage: pageSize,
TotalPages: total / pageSize,
})
}
func handleGetMessage(r *fastglue.Request) error {