231 lines
4.4 KiB
GraphQL
231 lines
4.4 KiB
GraphQL
|
|
# ----------------------------------------------------------
|
|
# LIST ALL (admin/debug)
|
|
# ----------------------------------------------------------
|
|
query listUserConversations(
|
|
$offset: Int
|
|
$limit: Int
|
|
) @auth(level: USER) {
|
|
userConversations(offset: $offset, limit: $limit) {
|
|
id
|
|
conversationId
|
|
userId
|
|
unreadCount
|
|
lastReadAt
|
|
createdAt
|
|
|
|
conversation {
|
|
id
|
|
subject
|
|
status
|
|
conversationType
|
|
isGroup
|
|
groupName
|
|
lastMessage
|
|
lastMessageAt
|
|
createdAt
|
|
}
|
|
|
|
user {
|
|
id
|
|
fullName
|
|
photoUrl
|
|
}
|
|
}
|
|
}
|
|
|
|
# ----------------------------------------------------------
|
|
# GET BY KEY (conversationId + userId)
|
|
# ----------------------------------------------------------
|
|
query getUserConversationByKey(
|
|
$conversationId: UUID!
|
|
$userId: String!
|
|
) @auth(level: USER) {
|
|
userConversation(key: { conversationId: $conversationId, userId: $userId }) {
|
|
id
|
|
conversationId
|
|
userId
|
|
unreadCount
|
|
lastReadAt
|
|
createdAt
|
|
|
|
conversation {
|
|
id
|
|
subject
|
|
status
|
|
conversationType
|
|
isGroup
|
|
groupName
|
|
lastMessage
|
|
lastMessageAt
|
|
createdAt
|
|
}
|
|
|
|
user {
|
|
id
|
|
fullName
|
|
photoUrl
|
|
}
|
|
}
|
|
}
|
|
|
|
# ----------------------------------------------------------
|
|
# LIST BY USER (My inbox) ✅
|
|
# Order by most recent activity (Conversation.lastMessageAt)
|
|
# NOTE: If your DC version doesn't allow orderBy on nested fields,
|
|
# just orderBy createdAt/updatedAt on user_conversations.
|
|
# ----------------------------------------------------------
|
|
query listUserConversationsByUserId(
|
|
$userId: String!
|
|
$offset: Int
|
|
$limit: Int
|
|
) @auth(level: USER) {
|
|
userConversations(
|
|
where: { userId: { eq: $userId } }
|
|
offset: $offset
|
|
limit: $limit
|
|
# If supported:
|
|
# orderBy: { conversation: { lastMessageAt: DESC } }
|
|
orderBy: { updatedAt: DESC }
|
|
) {
|
|
id
|
|
conversationId
|
|
userId
|
|
unreadCount
|
|
lastReadAt
|
|
createdAt
|
|
updatedAt
|
|
createdBy
|
|
|
|
conversation {
|
|
id
|
|
subject
|
|
status
|
|
conversationType
|
|
isGroup
|
|
groupName
|
|
lastMessage
|
|
lastMessageAt
|
|
createdAt
|
|
}
|
|
|
|
user {
|
|
id
|
|
fullName
|
|
photoUrl
|
|
}
|
|
}
|
|
}
|
|
|
|
# ----------------------------------------------------------
|
|
# LIST UNREAD BY USER (badge, notifications)
|
|
# ----------------------------------------------------------
|
|
query listUnreadUserConversationsByUserId(
|
|
$userId: String!
|
|
$offset: Int
|
|
$limit: Int
|
|
) @auth(level: USER) {
|
|
userConversations(
|
|
where: {
|
|
userId: { eq: $userId }
|
|
unreadCount: { gt: 0 }
|
|
}
|
|
offset: $offset
|
|
limit: $limit
|
|
orderBy: { updatedAt: DESC }
|
|
) {
|
|
id
|
|
conversationId
|
|
userId
|
|
unreadCount
|
|
lastReadAt
|
|
createdAt
|
|
|
|
conversation {
|
|
id
|
|
subject
|
|
status
|
|
conversationType
|
|
isGroup
|
|
groupName
|
|
lastMessage
|
|
lastMessageAt
|
|
}
|
|
}
|
|
}
|
|
|
|
# ----------------------------------------------------------
|
|
# LIST BY CONVERSATION (participants view)
|
|
# ----------------------------------------------------------
|
|
query listUserConversationsByConversationId(
|
|
$conversationId: UUID!
|
|
$offset: Int
|
|
$limit: Int
|
|
) @auth(level: USER) {
|
|
userConversations(
|
|
where: { conversationId: { eq: $conversationId } }
|
|
offset: $offset
|
|
limit: $limit
|
|
orderBy: { createdAt: ASC }
|
|
) {
|
|
id
|
|
conversationId
|
|
userId
|
|
unreadCount
|
|
lastReadAt
|
|
createdAt
|
|
|
|
user {
|
|
id
|
|
fullName
|
|
photoUrl
|
|
}
|
|
}
|
|
}
|
|
|
|
# ----------------------------------------------------------
|
|
# FILTER (dashboard/debug)
|
|
# ----------------------------------------------------------
|
|
query filterUserConversations(
|
|
$userId: String
|
|
$conversationId: UUID
|
|
$unreadMin: Int
|
|
$unreadMax: Int
|
|
$lastReadAfter: Timestamp
|
|
$lastReadBefore: Timestamp
|
|
$offset: Int
|
|
$limit: Int
|
|
) @auth(level: USER) {
|
|
userConversations(
|
|
where: {
|
|
userId: { eq: $userId }
|
|
conversationId: { eq: $conversationId }
|
|
unreadCount: { ge: $unreadMin, le: $unreadMax }
|
|
lastReadAt: { ge: $lastReadAfter, le: $lastReadBefore }
|
|
}
|
|
offset: $offset
|
|
limit: $limit
|
|
orderBy: { updatedAt: DESC }
|
|
) {
|
|
id
|
|
conversationId
|
|
userId
|
|
unreadCount
|
|
lastReadAt
|
|
createdAt
|
|
|
|
conversation {
|
|
id
|
|
subject
|
|
status
|
|
conversationType
|
|
isGroup
|
|
groupName
|
|
lastMessage
|
|
lastMessageAt
|
|
createdAt
|
|
}
|
|
user { id fullName photoUrl }
|
|
}
|
|
}
|