madipo2611 0d4b8b203e v0.0.2
2025-05-01 12:17:42 +03:00

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!
}