# Тип пользователя type User { id: Int! # Уникальный идентификатор username: String! # Имя пользователя avatar: String! # Аватар email: String! # Email (уникальный) emailConfirmedAt: String # Дата подтверждения email (может быть null) createdAt: String! # Дата создания updatedAt: String! # Дата обновления } # Пост в блоге type Post { id: Int! # Уникальный идентификатор title: String! # Заголовок поста content: String! # Содержание поста author: User! # Автор поста commentsCount: Int! likes: [Like!]! # Лайки к посту likesCount: Int! isLiked: Boolean! createdAt: String! # Дата создания updatedAt: String! # Дата обновления } # Комментарий к посту type Comment { id: Int! # Уникальный идентификатор content: String! # Текст комментария post: Post! # Пост, к которому относится author: User! # Автор комментария createdAt: String! # Дата создания updatedAt: String! # Дата обновления } # Лайк к посту type Like { id: Int! # Уникальный идентификатор post: Post! # Пост, который лайкнули user: User! # Пользователь, который поставил лайк createdAt: String! # Дата создания } type Tokens { accessToken: String! refreshToken: String! accessTokenExpires: String! # или DateTime, если такой scalar есть refreshTokenExpires: String! emailConfirmed: Boolean! } # Входные данные для регистрации input RegisterInput { username: String! # Имя пользователя email: String! # Email password: String! # Пароль } # Входные данные для входа input LoginInput { email: String! # Email password: String! # Пароль } type Message { id: Int! chatId: Int! senderId: Int! receiverId: Int! content: String! status: MessageStatus! createdAt: String! } enum MessageStatus { SENT DELIVERED READ } type Chat { id: Int! user1Id: Int! user2Id: Int! createdAt: String! updatedAt: String! lastMessage: Message } type Session { id: Int! device: Device! startedAt: String! lastActiveAt: String! isCurrent: Boolean! } type Device { id: Int! name: String! ipAddress: String! userAgent: String! lastActiveAt: String! } # Запросы (получение данных) type Query { me: User! # Получить текущего пользователя post(id: Int!): Post! # Получить пост по ID posts: [Post!]! # Получить все посты getUserPosts(userId: Int!): [Post!]! user(id: Int!): User! # Получить пользователя по ID users: [User!]! getChat(user1Id: Int!, user2Id: Int!): Chat! getChatMessages(chatId: Int!, limit: Int!, offset: Int!): [Message!]! getUserChats(userId: Int!): [Chat!]! mySessions: [Session!]! comments(postID: Int!): [Comment!]! } # Мутации (изменение данных) type Mutation { # Регистрация нового пользователя register(input: RegisterInput!): User! # Вход в систему login(input: LoginInput!): Tokens! # Обновление токенов refreshTokens(refreshToken: String!): Tokens! # Создание поста createPost(title: String!, content: String!): Post! # Создание комментария createComment(postId: Int!, content: String!): Comment! # Лайк поста likePost(postId: Int!): Like! # Удаление лайка unlikePost(postId: Int!): Boolean! updateProfile(username: String!, email: String!, avatar: String!): User! changePassword(oldPassword: String!, newPassword: String!): Boolean! terminateSession(sessionId: Int!): Boolean! renameDevice(deviceId: Int!, name: String!): Device! # Запрос на подтверждение email requestEmailConfirmation: Boolean! createChat(user1Id: Int!, user2Id: Int!): Chat! sendMessage(chatId: Int!, content: String!): Message! updateMessageStatus(messageId: Int!, status: MessageStatus!): Message! # Подтверждение email по токену confirmEmail(token: String!): Boolean! # Повторная отправка подтверждения email resendEmailConfirmation: Boolean! deletePost(id: Int!): Boolean! } type Subscription { messageStream(userId: Int!): Message! }