enum MessageStatus { NEW UPDATED DELETED } type ChatMember { id: Int! slug: String! name: String! pic: String last_seen: Int! online: Boolean # invitedAt: DateTime # invitedBy: String # user slug # TODO: keep invite databit } input ChatInput { id: String! title: String description: String } input MessageInput { id: String! chat_id: String! body: String seen: Boolean } type ChatResult { error: String chat: Chat chats: [Chat] message: Message messages: [Message] members: [ChatMember] } type Mutation { # inbox createChat(title: String, members: [Int]!): ChatResult! updateChat(chat: ChatInput!): ChatResult! deleteChat(chat_id: String!): ChatResult! createMessage(chat_id: String!, body: String!, reply_to: Int): ChatResult! updateMessage(message: MessageInput!): ChatResult! deleteMessage(chat_id: String!, message_id: Int!): ChatResult! markAsRead(chat_id: String!, message_id: Int!): ChatResult! } input MessagesBy { created_by: String body: String chat: String order: String days: Int stat: String } type Query { # inbox loadChats(limit: Int, offset: Int): ChatResult! # your chats loadMessagesBy(by: MessagesBy!, limit: Int, offset: Int): ChatResult! loadRecipients(limit: Int, offset: Int): ChatResult! searchRecipients(query: String!, limit: Int, offset: Int): ChatResult! searchMessages(by: MessagesBy!, limit: Int, offset: Int): ChatResult! } type Message { id: Int! created_by: Int! created_at: Int! chat_id: String! body: String! updated_at: Int reply_to: Int seen: Boolean } type Chat { id: String! created_by: Int! # member_id created_at: Int! members: [ChatMember] admins: [Int] updated_at: Int title: String description: String messages: [Message] unread: Int }