147 lines
4.6 KiB
GraphQL
147 lines
4.6 KiB
GraphQL
# Тип пользователя
|
|
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!
|
|
} |