Добавлены новые зависимости для работы с эмодзи и улучшена структура базы данных. Реализована модель сообщений и обновлены компоненты для поддержки новых функций мессенджера. Обновлены запросы и мутации для работы с сообщениями и чатом.

This commit is contained in:
Bivekich
2025-07-16 22:07:38 +03:00
parent 823ef9a28c
commit 205c9eae98
33 changed files with 3288 additions and 229 deletions

View File

@ -16,6 +16,12 @@ export const typeDefs = gql`
# Исходящие заявки
outgoingRequests: [CounterpartyRequest!]!
# Сообщения с контрагентом
messages(counterpartyId: ID!, limit: Int, offset: Int): [Message!]!
# Список чатов (последние сообщения с каждым контрагентом)
conversations: [Conversation!]!
}
type Mutation {
@ -48,6 +54,13 @@ export const typeDefs = gql`
respondToCounterpartyRequest(requestId: ID!, accept: Boolean!): CounterpartyRequestResponse!
cancelCounterpartyRequest(requestId: ID!): Boolean!
removeCounterparty(organizationId: ID!): Boolean!
# Работа с сообщениями
sendMessage(receiverOrganizationId: ID!, content: String, type: MessageType = TEXT): MessageResponse!
sendVoiceMessage(receiverOrganizationId: ID!, voiceUrl: String!, voiceDuration: Int!): MessageResponse!
sendImageMessage(receiverOrganizationId: ID!, fileUrl: String!, fileName: String!, fileSize: Int!, fileType: String!): MessageResponse!
sendFileMessage(receiverOrganizationId: ID!, fileUrl: String!, fileName: String!, fileSize: Int!, fileType: String!): MessageResponse!
markMessagesAsRead(conversationId: ID!): Boolean!
}
# Типы данных
@ -55,6 +68,7 @@ export const typeDefs = gql`
id: ID!
phone: String!
avatar: String
managerName: String
organization: Organization
createdAt: String!
updatedAt: String!
@ -92,6 +106,9 @@ export const typeDefs = gql`
users: [User!]!
apiKeys: [ApiKey!]!
isCounterparty: Boolean
isCurrentUser: Boolean
hasOutgoingRequest: Boolean
hasIncomingRequest: Boolean
createdAt: String!
updatedAt: String!
}
@ -224,6 +241,46 @@ export const typeDefs = gql`
request: CounterpartyRequest
}
# Типы для сообщений
type Message {
id: ID!
content: String
type: MessageType
voiceUrl: String
voiceDuration: Int
fileUrl: String
fileName: String
fileSize: Int
fileType: String
senderId: ID!
senderOrganization: Organization!
receiverOrganization: Organization!
isRead: Boolean!
createdAt: String!
updatedAt: String!
}
enum MessageType {
TEXT
VOICE
IMAGE
FILE
}
type Conversation {
id: ID!
counterparty: Organization!
lastMessage: Message
unreadCount: Int!
updatedAt: String!
}
type MessageResponse {
success: Boolean!
message: String!
messageData: Message
}
# JSON скаляр
scalar JSON
`