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:
Abhinav Raut
2026-01-05 15:12:35 +05:30
committed by GitHub
3 changed files with 31 additions and 10 deletions
+20 -7
View File
@@ -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)
}
+9 -3
View File
@@ -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)
+2
View File
@@ -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