madipo2611 3fb0d5dacd
All checks were successful
continuous-integration/drone/push Build is passing
v0.0.11 Реализован функционал удаления поста и изображения из S3
2025-07-28 13:13:36 +03:00

147 lines
4.5 KiB
GraphQL

# Тип пользователя
type User {
id: Int! # Уникальный идентификатор
username: String! # Имя пользователя
email: String! # Email (уникальный)
emailConfirmedAt: String # Дата подтверждения email (может быть null)
createdAt: String! # Дата создания
updatedAt: String! # Дата обновления
}
# Пост в блоге
type Post {
id: Int! # Уникальный идентификатор
title: String! # Заголовок поста
content: String! # Содержание поста
author: User! # Автор поста
comments: [Comment!]! # Комментарии к посту
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!
sender: User!
receiver: User!
content: String!
createdAt: String!
status: String!
}
type ChatSession {
user: User!
lastMessage: Message!
unreadCount: Int!
}
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!]! # Получить все посты
user(id: Int!): User! # Получить пользователя по ID
getChatHistory(userId: Int!): [Message!]!
getUserChats: [ChatSession!]!
mySessions: [Session!]!
}
# Мутации (изменение данных)
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!): User!
changePassword(oldPassword: String!, newPassword: String!): Boolean!
sendMessage(receiverId: Int!, content: String!): Message!
markAsRead(messageId: Int!): Boolean!
terminateSession(sessionId: Int!): Boolean!
renameDevice(deviceId: Int!, name: String!): Device!
# Запрос на подтверждение email
requestEmailConfirmation: Boolean!
# Подтверждение email по токену
confirmEmail(token: String!): Boolean!
# Повторная отправка подтверждения email
resendEmailConfirmation: Boolean!
deletePost(id: Int!): Boolean!
}
type Subscription {
messageReceived: Message!
}