type _Service { sdl: String } 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 create_chat(title: String, members: [Int]!): ChatResult! update_chat(chat: ChatInput!): ChatResult! delete_chat(chat_id: String!): ChatResult! create_message(chat_id: String!, body: String!, reply_to: Int): ChatResult! update_message(message: MessageInput!): ChatResult! delete_message(chat_id: String!, message_id: Int!): ChatResult! mark_as_read(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 load_chats(limit: Int, offset: Int): ChatResult! # your chats load_messages_by(by: MessagesBy!, limit: Int, offset: Int): ChatResult! load_recipients(limit: Int, offset: Int): ChatResult! search_recipients(query: String!, limit: Int, offset: Int): ChatResult! search_messages(by: MessagesBy!, limit: Int, offset: Int): ChatResult! _service: _Service! } 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 }