Files
libredesk/cmd/conversation.go
2024-07-25 02:03:56 +05:30

200 lines
6.2 KiB
Go

package main
import (
"encoding/json"
"net/http"
"strconv"
"github.com/abhinavxd/artemis/internal/envelope"
umodels "github.com/abhinavxd/artemis/internal/user/models"
"github.com/valyala/fasthttp"
"github.com/zerodha/fastglue"
)
func handleGetAllConversations(r *fastglue.Request) error {
var (
app = r.Context.(*App)
order = string(r.RequestCtx.QueryArgs().Peek("order"))
orderBy = string(r.RequestCtx.QueryArgs().Peek("order_by"))
filter = string(r.RequestCtx.QueryArgs().Peek("filter"))
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
)
c, err := app.conversationManager.GetAll(order, orderBy, filter, page, pageSize)
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(c)
}
func handleGetAssignedConversations(r *fastglue.Request) error {
var (
app = r.Context.(*App)
user = r.RequestCtx.UserValue("user").(umodels.User)
order = string(r.RequestCtx.QueryArgs().Peek("order"))
orderBy = string(r.RequestCtx.QueryArgs().Peek("order_by"))
filter = string(r.RequestCtx.QueryArgs().Peek("filter"))
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
)
c, err := app.conversationManager.GetAssigned(user.ID, order, orderBy, filter, page, pageSize)
if err != nil {
return r.SendErrorEnvelope(http.StatusInternalServerError, err.Error(), nil, "")
}
return r.SendEnvelope(c)
}
func handleGetTeamConversations(r *fastglue.Request) error {
var (
app = r.Context.(*App)
user = r.RequestCtx.UserValue("user").(umodels.User)
order = string(r.RequestCtx.QueryArgs().Peek("order"))
orderBy = string(r.RequestCtx.QueryArgs().Peek("order_by"))
filter = string(r.RequestCtx.QueryArgs().Peek("filter"))
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
)
c, err := app.conversationManager.GetTeamConversations(user.ID, order, orderBy, filter, page, pageSize)
if err != nil {
return r.SendErrorEnvelope(http.StatusInternalServerError, err.Error(), nil, "")
}
return r.SendEnvelope(c)
}
func handleGetConversation(r *fastglue.Request) error {
var (
app = r.Context.(*App)
uuid = r.RequestCtx.UserValue("uuid").(string)
)
c, err := app.conversationManager.Get(uuid)
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(c)
}
func handleUpdateAssigneeLastSeen(r *fastglue.Request) error {
var (
app = r.Context.(*App)
uuid = r.RequestCtx.UserValue("uuid").(string)
)
err := app.conversationManager.UpdateAssigneeLastSeen(uuid)
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(true)
}
func handleGetConversationParticipants(r *fastglue.Request) error {
var (
app = r.Context.(*App)
uuid = r.RequestCtx.UserValue("uuid").(string)
)
p, err := app.conversationManager.GetParticipants(uuid)
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(p)
}
func handleUpdateUserAssignee(r *fastglue.Request) error {
var (
app = r.Context.(*App)
uuid = r.RequestCtx.UserValue("uuid").(string)
user = r.RequestCtx.UserValue("user").(umodels.User)
)
assigneeID, err := r.RequestCtx.PostArgs().GetUint("assignee_id")
if err != nil {
return r.SendErrorEnvelope(fasthttp.StatusBadRequest, "Invalid assignee `id`.", nil, envelope.InputError)
}
if err := app.conversationManager.UpdateUserAssignee(uuid, assigneeID, user); err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(true)
}
func handleUpdateTeamAssignee(r *fastglue.Request) error {
var (
app = r.Context.(*App)
uuid = r.RequestCtx.UserValue("uuid").(string)
user = r.RequestCtx.UserValue("user").(umodels.User)
)
assigneeID, err := r.RequestCtx.PostArgs().GetUint("assignee_id")
if err != nil {
return r.SendErrorEnvelope(fasthttp.StatusBadRequest, "Invalid assignee `id`.", nil, envelope.InputError)
}
if err := app.conversationManager.UpdateTeamAssignee(uuid, assigneeID, user); err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(true)
}
func handleUpdatePriority(r *fastglue.Request) error {
var (
app = r.Context.(*App)
p = r.RequestCtx.PostArgs()
priority = p.Peek("priority")
uuid = r.RequestCtx.UserValue("uuid").(string)
user = r.RequestCtx.UserValue("user").(umodels.User)
)
if err := app.conversationManager.UpdatePriority(uuid, priority, user); err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(true)
}
func handleUpdateStatus(r *fastglue.Request) error {
var (
app = r.Context.(*App)
p = r.RequestCtx.PostArgs()
status = p.Peek("status")
uuid = r.RequestCtx.UserValue("uuid").(string)
user = r.RequestCtx.UserValue("user").(umodels.User)
)
if err := app.conversationManager.UpdateStatus(uuid, status, user); err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(true)
}
func handleAddConversationTags(r *fastglue.Request) error {
var (
app = r.Context.(*App)
p = r.RequestCtx.PostArgs()
tagIDs = []int{}
tagJSON = p.Peek("tag_ids")
uuid = r.RequestCtx.UserValue("uuid").(string)
)
err := json.Unmarshal(tagJSON, &tagIDs)
if err != nil {
app.lo.Error("unmarshalling tag ids", "error", err)
return r.SendErrorEnvelope(fasthttp.StatusInternalServerError, "error adding tags", nil, "")
}
if err := app.conversationManager.UpsertTags(uuid, tagIDs); err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(true)
}
func handleUserDashboardCounts(r *fastglue.Request) error {
var (
app = r.Context.(*App)
user = r.RequestCtx.UserValue("user").(umodels.User)
)
stats, err := app.conversationManager.GetAssigneeStats(user.ID)
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(stats)
}
func handleUserDashboardCharts(r *fastglue.Request) error {
var app = r.Context.(*App)
stats, err := app.conversationManager.GetNewConversationsStats()
if err != nil {
return sendErrorEnvelope(r, err)
}
return r.SendEnvelope(stats)
}