mirror of
https://github.com/abhinavxd/libredesk.git
synced 2026-09-22 18:43:33 +00:00
Merge pull request #216 from abhinavxd/patch-api-2
feat: Add `type` and `private` message filters to GET messages api.
This commit is contained in:
+20
-7
@@ -28,14 +28,27 @@ type messageReq struct {
|
||||
// handleGetMessages returns messages for a conversation.
|
||||
func handleGetMessages(r *fastglue.Request) error {
|
||||
var (
|
||||
app = r.Context.(*App)
|
||||
uuid = r.RequestCtx.UserValue("uuid").(string)
|
||||
auser = r.RequestCtx.UserValue("user").(amodels.User)
|
||||
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
|
||||
pageSize, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page_size")))
|
||||
total = 0
|
||||
app = r.Context.(*App)
|
||||
uuid = r.RequestCtx.UserValue("uuid").(string)
|
||||
auser = r.RequestCtx.UserValue("user").(amodels.User)
|
||||
page, _ = strconv.Atoi(string(r.RequestCtx.QueryArgs().Peek("page")))
|
||||
pageSize = r.RequestCtx.QueryArgs().GetUintOrZero("page_size")
|
||||
total = 0
|
||||
private *bool
|
||||
)
|
||||
|
||||
// Parse optional private filter (null = no filter)
|
||||
if r.RequestCtx.QueryArgs().Has("private") {
|
||||
p := r.RequestCtx.QueryArgs().GetBool("private")
|
||||
private = &p
|
||||
}
|
||||
|
||||
// Parse repeated type params: ?type=incoming&type=outgoing
|
||||
var msgTypes []string
|
||||
for _, v := range r.RequestCtx.QueryArgs().PeekMulti("type") {
|
||||
msgTypes = append(msgTypes, string(v))
|
||||
}
|
||||
|
||||
user, err := app.user.GetAgent(auser.ID, "")
|
||||
if err != nil {
|
||||
return sendErrorEnvelope(r, err)
|
||||
@@ -47,7 +60,7 @@ func handleGetMessages(r *fastglue.Request) error {
|
||||
return sendErrorEnvelope(r, err)
|
||||
}
|
||||
|
||||
messages, pageSize, err := app.conversation.GetConversationMessages(uuid, page, pageSize)
|
||||
messages, pageSize, err := app.conversation.GetConversationMessages(uuid, page, pageSize, private, msgTypes)
|
||||
if err != nil {
|
||||
return sendErrorEnvelope(r, err)
|
||||
}
|
||||
|
||||
@@ -286,13 +286,19 @@ func (m *Manager) RenderMessageInTemplate(channel string, message *models.Messag
|
||||
}
|
||||
|
||||
// GetConversationMessages retrieves messages for a specific conversation.
|
||||
func (m *Manager) GetConversationMessages(conversationUUID string, page, pageSize int) ([]models.Message, int, error) {
|
||||
func (m *Manager) GetConversationMessages(conversationUUID string, page, pageSize int, private *bool, msgTypes []string) ([]models.Message, int, error) {
|
||||
var (
|
||||
messages = make([]models.Message, 0)
|
||||
qArgs []interface{}
|
||||
qArgs []any
|
||||
)
|
||||
|
||||
qArgs = append(qArgs, conversationUUID)
|
||||
// Convert msgTypes slice to pq.StringArray for PostgreSQL
|
||||
var typesArg any
|
||||
if len(msgTypes) > 0 {
|
||||
typesArg = pq.StringArray(msgTypes)
|
||||
}
|
||||
|
||||
qArgs = append(qArgs, conversationUUID, private, typesArg)
|
||||
query, pageSize, qArgs, err := m.generateMessagesQuery(m.q.GetMessages, qArgs, page, pageSize)
|
||||
if err != nil {
|
||||
m.lo.Error("error generating messages query", "error", err)
|
||||
|
||||
@@ -547,6 +547,8 @@ JOIN users u ON m.sender_id = u.id
|
||||
WHERE m.conversation_id = (
|
||||
SELECT id FROM conversations WHERE uuid = $1 LIMIT 1
|
||||
)
|
||||
AND ($2::boolean IS NULL OR m.private = $2)
|
||||
AND ($3::text[] IS NULL OR m.type::text = ANY($3))
|
||||
ORDER BY m.created_at DESC %s
|
||||
|
||||
-- name: insert-message
|
||||
|
||||
Reference in New Issue
Block a user