# Тип пользователя type User { id: ID! # Уникальный идентификатор username: String! # Имя пользователя email: String! # Email (уникальный) emailConfirmedAt: String # Дата подтверждения email (может быть null) createdAt: String! # Дата создания updatedAt: String! # Дата обновления } # Пост в блоге type Post { id: ID! # Уникальный идентификатор title: String! # Заголовок поста content: String! # Содержание поста author: User! # Автор поста comments: [Comment!]! # Комментарии к посту likes: [Like!]! # Лайки к посту likesCount: Int! isLiked: Boolean! createdAt: String! # Дата создания updatedAt: String! # Дата обновления } # Комментарий к посту type Comment { id: ID! # Уникальный идентификатор content: String! # Текст комментария post: Post! # Пост, к которому относится author: User! # Автор комментария createdAt: String! # Дата создания updatedAt: String! # Дата обновления } # Лайк к посту type Like { id: ID! # Уникальный идентификатор post: Post! # Пост, который лайкнули user: User! # Пользователь, который поставил лайк createdAt: String! # Дата создания } # Токены для аутентификации type Tokens { accessToken: String! # Access токен (короткоживущий) refreshToken: String! # Refresh токен (долгоживущий) emailConfirmed: Boolean! # Флаг подтверждения email } # Входные данные для регистрации input RegisterInput { username: String! # Имя пользователя email: String! # Email password: String! # Пароль } # Входные данные для входа input LoginInput { email: String! # Email password: String! # Пароль } type Message { id: ID! sender: User! receiver: User! content: String! createdAt: String! status: String! } type ChatSession { user: User! lastMessage: Message! unreadCount: Int! } type Session { id: ID! device: Device! startedAt: String! lastActiveAt: String! isCurrent: Boolean! } type Device { id: ID! name: String! type: String! ipAddress: String! location: String! lastActiveAt: String! } # Запросы (получение данных) type Query { me: User! # Получить текущего пользователя post(id: ID!): Post! # Получить пост по ID posts: [Post!]! # Получить все посты user(id: ID!): User! # Получить пользователя по ID getChatHistory(userId: ID!): [Message!]! getUserChats: [ChatSession!]! mySessions: [Session!]! activeSessions: [Session!]! } # Мутации (изменение данных) type Mutation { # Регистрация нового пользователя register(input: RegisterInput!): User! # Вход в систему login(input: LoginInput!): Tokens! # Обновление токенов refreshTokens(refreshToken: String!): Tokens! # Создание поста createPost(title: String!, content: String!): Post! # Создание комментария createComment(postId: ID!, content: String!): Comment! # Лайк поста likePost(postId: ID!): Like! # Удаление лайка unlikePost(postId: ID!): Boolean! updateProfile(username: String!, email: String!): User! changePassword(oldPassword: String!, newPassword: String!): Boolean! sendMessage(receiverId: ID!, content: String!): Message! markAsRead(messageId: ID!): Boolean! terminateSession(sessionId: ID!): Boolean! renameDevice(deviceId: ID!, name: String!): Device! # Запрос на подтверждение email requestEmailConfirmation: Boolean! # Подтверждение email по токену confirmEmail(token: String!): Boolean! # Повторная отправка подтверждения email resendEmailConfirmation: Boolean! } type Subscription { messageReceived: Message! }