type EnvVariable { key: String! value: String! description: String type: String! isSecret: Boolean } type EnvSection { name: String! description: String variables: [EnvVariable!]! } input EnvVariableInput { key: String! value: String! type: String! } # Типы для управления пользователями type AdminUserInfo { id: Int! email: String name: String slug: String roles: [String!] created_at: Int last_seen: Int } input AdminUserUpdateInput { id: Int! email: String name: String slug: String roles: [String!] community: Int } type Role { id: String! name: String! description: String } # Тип для пагинированного ответа пользователей type AdminUserListResponse { authors: [AdminUserInfo!]! total: Int! page: Int! perPage: Int! totalPages: Int! } # Общий ответ на операцию с данными об успехе и ошибке type OperationResult { success: Boolean! error: String } # Типы для управления публикациями (Shout) type AdminShoutInfo { id: Int! title: String! slug: String! body: String! lead: String subtitle: String layout: String! lang: String! cover: String cover_caption: String media: [MediaItem] seo: String created_at: Int! updated_at: Int published_at: Int featured_at: Int deleted_at: Int created_by: Author! updated_by: Author deleted_by: Author community: Community! authors: [Author] topics: [Topic] version_of: Int draft: Int stat: Stat } # Тип для пагинированного ответа публикаций type AdminShoutListResponse { shouts: [AdminShoutInfo!]! total: Int! page: Int! perPage: Int! totalPages: Int! } input AdminShoutUpdateInput { id: Int! title: String body: String lead: String subtitle: String cover: String cover_caption: String media: [MediaItemInput] seo: String published_at: Int featured_at: Int deleted_at: Int } # Тип для отображения приглашения в админ-панели type AdminInviteInfo { inviter_id: Int! author_id: Int! shout_id: Int! status: InviteStatus! inviter: Author! author: Author! shout: AdminShoutInfo! created_at: Int } # Тип для пагинированного ответа приглашений type AdminInviteListResponse { invites: [AdminInviteInfo!]! total: Int! page: Int! perPage: Int! totalPages: Int! } input AdminInviteUpdateInput { inviter_id: Int! author_id: Int! shout_id: Int! status: InviteStatus! } # Входной тип для идентификации приглашения при пакетном удалении input AdminInviteIdInput { inviter_id: Int! author_id: Int! shout_id: Int! } # Типы для управления ролями в сообществах type CommunityMember { id: Int! name: String email: String slug: String roles: [String!]! } type CommunityMembersResponse { members: [CommunityMember!]! total: Int! community_id: Int! } # Роли пользователя в сообществе type UserCommunityRoles { author_id: Int! community_id: Int! roles: [String!]! } type RoleOperationResult { success: Boolean! error: String author_id: Int role_id: String community_id: Int roles: [String!] removed: Boolean } # Результат обновления ролей пользователя в сообществе type CommunityRoleUpdateResult { success: Boolean! error: String author_id: Int! community_id: Int! roles: [String!]! } type CommunityRoleSettings { community_id: Int! default_roles: [String!]! available_roles: [String!]! error: String } type CommunityRoleSettingsUpdateResult { success: Boolean! error: String community_id: Int! default_roles: [String!] available_roles: [String!] } # Ввод для создания произвольной роли input CustomRoleInput { id: String! name: String! description: String icon: String community_id: Int! } # Результат создания роли type CustomRoleResult { success: Boolean! error: String role: Role } # Результат операций с топиками type AdminTopicResult { success: Boolean! error: String topic: Topic } extend type Query { getEnvVariables: [EnvSection!]! # Запросы для управления пользователями adminGetUsers(limit: Int, offset: Int, search: String): AdminUserListResponse! adminGetRoles(community: Int): [Role!] # Запросы для управления ролями в сообществах adminGetUserCommunityRoles(author_id: Int!, community_id: Int!): UserCommunityRoles! adminGetCommunityMembers(community_id: Int!, limit: Int, offset: Int): CommunityMembersResponse! adminGetCommunityRoleSettings(community_id: Int!): CommunityRoleSettings! # Запросы для управления публикациями adminGetShouts( limit: Int offset: Int search: String status: String community: Int ): AdminShoutListResponse! # Запросы для управления приглашениями adminGetInvites( limit: Int offset: Int search: String status: String ): AdminInviteListResponse! # Запросы для управления топиками adminGetTopics(community_id: Int!): [Topic!]! } extend type Mutation { # Admin mutations для управления переменными окружения updateEnvVariable(variable: EnvVariableInput!): OperationResult! updateEnvVariables(variables: [EnvVariableInput!]!): OperationResult! # Admin mutations для управления пользователями adminUpdateUser(user: AdminUserUpdateInput!): OperationResult! adminDeleteUser(id: Int!): OperationResult! # Mutations для управления ролями в сообществах adminUpdateUserCommunityRoles( author_id: Int!, community_id: Int!, roles: [String!]! ): CommunityRoleUpdateResult! # Admin mutations для управления публикациями adminUpdateShout(shout: AdminShoutUpdateInput!): OperationResult! adminDeleteShout(id: Int!): OperationResult! adminRestoreShout(id: Int!): OperationResult! # Admin mutations для управления приглашениями adminUpdateInvite(invite: AdminInviteUpdateInput!): OperationResult! adminDeleteInvite( inviter_id: Int! author_id: Int! shout_id: Int! ): OperationResult! adminDeleteInvitesBatch(invites: [AdminInviteIdInput!]!): OperationResult! # Управление ролями пользователей в сообществах adminSetUserCommunityRoles(author_id: Int!, community_id: Int!, roles: [String!]!): RoleOperationResult! adminAddUserToRole(author_id: Int!, role_id: String!, community_id: Int!): RoleOperationResult! adminRemoveUserFromRole(author_id: Int!, role_id: String!, community_id: Int!): RoleOperationResult! # Управление настройками ролей сообщества adminUpdateCommunityRoleSettings(community_id: Int!, default_roles: [String!]!, available_roles: [String!]!): CommunityRoleSettingsUpdateResult! # Создание и удаление произвольных ролей adminCreateCustomRole(role: CustomRoleInput!): CustomRoleResult! adminDeleteCustomRole(role_id: String!, community_id: Int!): OperationResult! # Admin mutations для управления топиками adminUpdateTopic(topic: AdminTopicInput!): AdminTopicResult! adminCreateTopic(topic: AdminTopicInput!): AdminTopicResult! adminMergeTopics(merge_input: TopicMergeInput!): AdminTopicResult! }