madipo2611 900e0e8b48
All checks were successful
continuous-integration/drone/push Build is passing
v0.0.18.1 Текущий почти рабочий вариант messages
2025-08-13 23:59:26 +03:00

162 lines
4.9 KiB
GraphQL

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