diff --git a/schema/admin.graphql b/schema/admin.graphql index d04fe438..fb6f412d 100644 --- a/schema/admin.graphql +++ b/schema/admin.graphql @@ -1,177 +1,191 @@ type EnvVariable { - key: String! - value: String! - description: String - type: String! - isSecret: Boolean + key: String! + value: String! + description: String + type: String! + isSecret: Boolean } type EnvSection { - name: String! - description: String - variables: [EnvVariable!]! + name: String! + description: String + variables: [EnvVariable!]! } input EnvVariableInput { - key: String! - value: String! - type: String! + key: String! + value: String! + type: String! } # Типы для управления пользователями type AdminUserInfo { - id: Int! - email: String - name: String - slug: String - roles: [String!] - created_at: Int - last_seen: Int + 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 + id: Int! + email: String + name: String + slug: String + roles: [String!] + community: Int } type Role { - id: String! - name: String! - description: String + id: String! + name: String! + description: String } # Тип для пагинированного ответа пользователей type AdminUserListResponse { - authors: [AdminUserInfo!]! - total: Int! - page: Int! - perPage: Int! - totalPages: Int! + authors: [AdminUserInfo!]! + total: Int! + page: Int! + perPage: Int! + totalPages: Int! } # Общий ответ на операцию с данными об успехе и ошибке type OperationResult { - success: Boolean! - error: String + 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 + 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! + 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 + 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 + 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! + invites: [AdminInviteInfo!]! + total: Int! + page: Int! + perPage: Int! + totalPages: Int! } input AdminInviteUpdateInput { - inviter_id: Int! - author_id: Int! - shout_id: Int! - status: InviteStatus! + inviter_id: Int! + author_id: Int! + shout_id: Int! + status: InviteStatus! } # Входной тип для идентификации приглашения при пакетном удалении input AdminInviteIdInput { - inviter_id: Int! - author_id: Int! - shout_id: Int! + inviter_id: Int! + author_id: Int! + shout_id: Int! } extend type Query { - getEnvVariables: [EnvSection!]! - # Запросы для управления пользователями - adminGetUsers(limit: Int, offset: Int, search: String): AdminUserListResponse! - adminGetRoles: [Role!]! - # Запросы для управления публикациями - adminGetShouts(limit: Int, offset: Int, search: String, status: String): AdminShoutListResponse! - # Запросы для управления приглашениями - adminGetInvites(limit: Int, offset: Int, search: String, status: String): AdminInviteListResponse! + getEnvVariables: [EnvSection!]! + # Запросы для управления пользователями + adminGetUsers(limit: Int, offset: Int, search: String): AdminUserListResponse! + adminGetRoles: [Role!]! + # Запросы для управления публикациями + adminGetShouts( + limit: Int + offset: Int + search: String + status: String + ): AdminShoutListResponse! + # Запросы для управления приглашениями + adminGetInvites( + limit: Int + offset: Int + search: String + status: String + ): AdminInviteListResponse! } extend type Mutation { - updateEnvVariable(key: String!, value: String!): Boolean! - updateEnvVariables(variables: [EnvVariableInput!]!): Boolean! + updateEnvVariable(key: String!, value: String!): Boolean! + updateEnvVariables(variables: [EnvVariableInput!]!): Boolean! - # Мутации для управления пользователями - adminUpdateUser(user: AdminUserUpdateInput!): OperationResult! - # Мутации для управления публикациями - adminUpdateShout(shout: AdminShoutUpdateInput!): OperationResult! - adminDeleteShout(id: Int!): OperationResult! - adminRestoreShout(id: Int!): OperationResult! - # Мутации для управления приглашениями - adminCreateInvite(invite: AdminInviteUpdateInput!): OperationResult! - adminUpdateInvite(invite: AdminInviteUpdateInput!): OperationResult! - adminDeleteInvite(inviter_id: Int!, author_id: Int!, shout_id: Int!): OperationResult! - adminDeleteInvitesBatch(invites: [AdminInviteIdInput!]!): OperationResult! + # Мутации для управления пользователями + adminUpdateUser(user: AdminUserUpdateInput!): OperationResult! + # Мутации для управления публикациями + adminUpdateShout(shout: AdminShoutUpdateInput!): OperationResult! + adminDeleteShout(id: Int!): OperationResult! + adminRestoreShout(id: Int!): OperationResult! + # Мутации для управления приглашениями + adminCreateInvite(invite: AdminInviteUpdateInput!): OperationResult! + adminUpdateInvite(invite: AdminInviteUpdateInput!): OperationResult! + adminDeleteInvite( + inviter_id: Int! + author_id: Int! + shout_id: Int! + ): OperationResult! + adminDeleteInvitesBatch(invites: [AdminInviteIdInput!]!): OperationResult! } diff --git a/schema/enum.graphql b/schema/enum.graphql index 2a2eeb0f..4c5ba60d 100644 --- a/schema/enum.graphql +++ b/schema/enum.graphql @@ -1,68 +1,66 @@ enum ReactionStatus { - NEW - UPDATED - CHANGED - EXPLAINED - DELETED + NEW + UPDATED + CHANGED + EXPLAINED + DELETED } enum ReactionSort { - newest - oldest - like - dislike + newest + oldest + like + dislike } enum ShoutsOrderBy { - last_commented_at - rating - comments_count + last_commented_at + rating + comments_count } enum ReactionKind { + # collabs + AGREE + DISAGREE + ASK + PROPOSE + PROOF + DISPROOF + ACCEPT + REJECT - # collabs - AGREE - DISAGREE - ASK - PROPOSE - PROOF - DISPROOF - ACCEPT - REJECT - - # public feed - QUOTE - COMMENT - LIKE - DISLIKE - + # public feed + QUOTE + COMMENT + LIKE + DISLIKE } enum FollowingEntity { - TOPIC - AUTHOR - SHOUT - COMMUNITY + TOPIC + AUTHOR + SHOUT + COMMUNITY } enum InviteStatus { - PENDING - ACCEPTED - REJECTED + PENDING + ACCEPTED + REJECTED } # Auth enums enum AuthAction { - LOGIN - REGISTER - CONFIRM_EMAIL - RESET_PASSWORD - CHANGE_PASSWORD + LOGIN + REGISTER + CONFIRM_EMAIL + RESET_PASSWORD + CHANGE_PASSWORD } enum RoleType { - SYSTEM - COMMUNITY - CUSTOM + SYSTEM + COMMUNITY + CUSTOM } diff --git a/schema/input.graphql b/schema/input.graphql index 3129f1d3..8f098188 100644 --- a/schema/input.graphql +++ b/schema/input.graphql @@ -1,157 +1,157 @@ input MediaItemInput { - url: String - title: String - body: String - source: String - pic: String - date: String - genre: String - artist: String - lyrics: String + url: String + title: String + body: String + source: String + pic: String + date: String + genre: String + artist: String + lyrics: String } input AuthorInput { - id: Int! - slug: String + id: Int! + slug: String } input TopicInput { - id: Int - slug: String! - title: String - body: String - pic: String - community: Int - parent_ids: [Int] + id: Int + slug: String! + title: String + body: String + pic: String + community: Int + parent_ids: [Int] } input TopicMergeInput { - target_topic_id: Int! - source_topic_ids: [Int!]! - preserve_target_properties: Boolean + target_topic_id: Int! + source_topic_ids: [Int!]! + preserve_target_properties: Boolean } input DraftInput { - id: Int - # no created_at, updated_at, deleted_at, updated_by, deleted_by - layout: String - shout_id: Int # Changed from shout: Shout - author_ids: [Int!] # Changed from authors: [Author] - topic_ids: [Int!] # Changed from topics: [Topic] - main_topic_id: Int # Changed from main_topic: Topic - media: [MediaItemInput] # Changed to use MediaItemInput - lead: String - subtitle: String - lang: String - seo: String - body: String - title: String - slug: String - cover: String - cover_caption: String + id: Int + # no created_at, updated_at, deleted_at, updated_by, deleted_by + layout: String + shout_id: Int # Changed from shout: Shout + author_ids: [Int!] # Changed from authors: [Author] + topic_ids: [Int!] # Changed from topics: [Topic] + main_topic_id: Int # Changed from main_topic: Topic + media: [MediaItemInput] # Changed to use MediaItemInput + lead: String + subtitle: String + lang: String + seo: String + body: String + title: String + slug: String + cover: String + cover_caption: String } input ProfileInput { - slug: String - name: String - pic: String - links: [String] - bio: String - about: String + slug: String + name: String + pic: String + links: [String] + bio: String + about: String } input ReactionInput { - id: Int - kind: ReactionKind! - shout: Int! - quote: String - body: String - reply_to: Int + id: Int + kind: ReactionKind! + shout: Int! + quote: String + body: String + reply_to: Int } input AuthorsBy { - last_seen: Int - created_at: Int - slug: String - name: String - topic: String - order: String - after: Int - stat: String + last_seen: Int + created_at: Int + slug: String + name: String + topic: String + order: String + after: Int + stat: String } input LoadShoutsFilters { - topic: String - author: String - layouts: [String] - featured: Boolean - reacted: Boolean # requires auth, used in load_shouts_feed - after: Int - community: Int + topic: String + author: String + layouts: [String] + featured: Boolean + reacted: Boolean # requires auth, used in load_shouts_feed + after: Int + community: Int } input LoadShoutsOptions { - filters: LoadShoutsFilters - limit: Int! - random_limit: Int - offset: Int - order_by: ShoutsOrderBy - order_by_desc: Boolean + filters: LoadShoutsFilters + limit: Int! + random_limit: Int + offset: Int + order_by: ShoutsOrderBy + order_by_desc: Boolean } input ReactionBy { - shout: String - shout_id: Int - shouts: [String] - search: String - kinds: [ReactionKind] - reply_to: Int # filter - topic: String - created_by: Int - author_id: Int - author: String - after: Int - sort: ReactionSort # sort + shout: String + shout_id: Int + shouts: [String] + search: String + kinds: [ReactionKind] + reply_to: Int # filter + topic: String + created_by: Int + author_id: Int + author: String + after: Int + sort: ReactionSort # sort } input NotificationSeenInput { - notifications: [Int] - thread: Int + notifications: [Int] + thread: Int } input CommunityInput { - slug: String - name: String - desc: String - pic: String + slug: String + name: String + desc: String + pic: String } input CollectionInput { - id: Int - slug: String! - title: String! - desc: String - pic: String + id: Int + slug: String! + title: String! + desc: String + pic: String } # Auth inputs input LoginCredentials { - email: String! - password: String! + email: String! + password: String! } input RegisterInput { - email: String! - password: String - name: String + email: String! + password: String + name: String } input ChangePasswordInput { - oldPassword: String! - newPassword: String! + oldPassword: String! + newPassword: String! } input ResetPasswordInput { - token: String! - newPassword: String! + token: String! + newPassword: String! } diff --git a/schema/mutation.graphql b/schema/mutation.graphql index 4f9edb71..31ee060e 100644 --- a/schema/mutation.graphql +++ b/schema/mutation.graphql @@ -1,74 +1,78 @@ type Mutation { - # Auth mutations - login(email: String!, password: String!): AuthResult! - logout: AuthSuccess! - refreshToken: AuthResult! - registerUser(email: String!, password: String, name: String): AuthResult! - sendLink(email: String!, lang: String, template: String): Author! - confirmEmail(token: String!): AuthResult! - getSession: SessionInfo! - changePassword(oldPassword: String!, newPassword: String!): AuthSuccess! - resetPassword(token: String!, newPassword: String!): AuthSuccess! - requestPasswordReset(email: String!, lang: String): AuthSuccess! - updateSecurity(email: String, old_password: String, new_password: String): SecurityUpdateResult! - confirmEmailChange(token: String!): SecurityUpdateResult! - cancelEmailChange: SecurityUpdateResult! + # Auth mutations + login(email: String!, password: String!): AuthResult! + logout: AuthSuccess! + refreshToken: AuthResult! + registerUser(email: String!, password: String, name: String): AuthResult! + sendLink(email: String!, lang: String, template: String): Author! + confirmEmail(token: String!): AuthResult! + getSession: SessionInfo! + changePassword(oldPassword: String!, newPassword: String!): AuthSuccess! + resetPassword(token: String!, newPassword: String!): AuthSuccess! + requestPasswordReset(email: String!, lang: String): AuthSuccess! + updateSecurity( + email: String + old_password: String + new_password: String + ): SecurityUpdateResult! + confirmEmailChange(token: String!): SecurityUpdateResult! + cancelEmailChange: SecurityUpdateResult! - # author - rate_author(rated_slug: String!, value: Int!): CommonResult! - update_author(profile: ProfileInput!): CommonResult! + # author + rate_author(rated_slug: String!, value: Int!): CommonResult! + update_author(profile: ProfileInput!): CommonResult! - # draft - create_draft(draft_input: DraftInput!): CommonResult! - update_draft(draft_id: Int!, draft_input: DraftInput!): CommonResult! - delete_draft(draft_id: Int!): CommonResult! - # publication - publish_shout(shout_id: Int!): CommonResult! - publish_draft(draft_id: Int!): CommonResult! - unpublish_draft(draft_id: Int!): CommonResult! - unpublish_shout(shout_id: Int!): CommonResult! + # draft + create_draft(draft_input: DraftInput!): CommonResult! + update_draft(draft_id: Int!, draft_input: DraftInput!): CommonResult! + delete_draft(draft_id: Int!): CommonResult! + # publication + publish_shout(shout_id: Int!): CommonResult! + publish_draft(draft_id: Int!): CommonResult! + unpublish_draft(draft_id: Int!): CommonResult! + unpublish_shout(shout_id: Int!): CommonResult! - # follower - follow(what: FollowingEntity!, slug: String!): AuthorFollowsResult! - unfollow(what: FollowingEntity!, slug: String!): AuthorFollowsResult! + # follower + follow(what: FollowingEntity!, slug: String!): AuthorFollowsResult! + unfollow(what: FollowingEntity!, slug: String!): AuthorFollowsResult! - # topic - create_topic(topic_input: TopicInput!): CommonResult! - update_topic(topic_input: TopicInput!): CommonResult! - delete_topic(slug: String!): CommonResult! - delete_topic_by_id(id: Int!): CommonResult! - merge_topics(merge_input: TopicMergeInput!): CommonResult! - set_topic_parent(topic_id: Int!, parent_id: Int): CommonResult! + # topic + create_topic(topic_input: TopicInput!): CommonResult! + update_topic(topic_input: TopicInput!): CommonResult! + delete_topic(slug: String!): CommonResult! + delete_topic_by_id(id: Int!): CommonResult! + merge_topics(merge_input: TopicMergeInput!): CommonResult! + set_topic_parent(topic_id: Int!, parent_id: Int): CommonResult! - # reaction - create_reaction(reaction: ReactionInput!): CommonResult! - update_reaction(reaction: ReactionInput!): CommonResult! - delete_reaction(reaction_id: Int!): CommonResult! + # reaction + create_reaction(reaction: ReactionInput!): CommonResult! + update_reaction(reaction: ReactionInput!): CommonResult! + delete_reaction(reaction_id: Int!): CommonResult! - # collab - create_invite(slug: String, author_id: Int): CommonResult! - remove_author(slug: String, author_id: Int): CommonResult! - remove_invite(invite_id: Int!): CommonResult! - accept_invite(invite_id: Int!): CommonResult! - reject_invite(invite_id: Int!): CommonResult! + # collab + create_invite(slug: String, author_id: Int): CommonResult! + remove_author(slug: String, author_id: Int): CommonResult! + remove_invite(invite_id: Int!): CommonResult! + accept_invite(invite_id: Int!): CommonResult! + reject_invite(invite_id: Int!): CommonResult! - # bookmark - toggle_bookmark_shout(slug: String!): CommonResult! + # bookmark + toggle_bookmark_shout(slug: String!): CommonResult! - # notifier - notification_mark_seen(notification_id: Int!, seen: Boolean): CommonResult! - notifications_seen_after(after: Int!, seen: Boolean): CommonResult! - notifications_seen_thread(thread_id: String!, seen: Boolean): CommonResult! + # notifier + notification_mark_seen(notification_id: Int!, seen: Boolean): CommonResult! + notifications_seen_after(after: Int!, seen: Boolean): CommonResult! + notifications_seen_thread(thread_id: String!, seen: Boolean): CommonResult! - # community - join_community(slug: String!): CommonResult! - leave_community(slug: String!): CommonResult! - create_community(community_input: CommunityInput!): CommonResult! - update_community(community_input: CommunityInput!): CommonResult! - delete_community(slug: String!): CommonResult! + # community + join_community(slug: String!): CommonResult! + leave_community(slug: String!): CommonResult! + create_community(community_input: CommunityInput!): CommonResult! + update_community(community_input: CommunityInput!): CommonResult! + delete_community(slug: String!): CommonResult! - # collection - create_collection(collection_input: CollectionInput!): CommonResult! - update_collection(collection_input: CollectionInput!): CommonResult! - delete_collection(slug: String!): CommonResult! + # collection + create_collection(collection_input: CollectionInput!): CommonResult! + update_collection(collection_input: CollectionInput!): CommonResult! + delete_collection(slug: String!): CommonResult! } diff --git a/schema/query.graphql b/schema/query.graphql index 005b19c8..4c2f064a 100644 --- a/schema/query.graphql +++ b/schema/query.graphql @@ -1,80 +1,100 @@ type Query { - # author - get_author(slug: String, author_id: Int): Author - get_authors_all: [Author] - load_authors_by(by: AuthorsBy!, limit: Int, offset: Int): [Author] - load_authors_search(text: String!, limit: Int, offset: Int): [Author!] # Search for authors by name or bio + # author + get_author(slug: String, author_id: Int): Author + get_authors_all: [Author] + load_authors_by(by: AuthorsBy!, limit: Int, offset: Int): [Author] + load_authors_search(text: String!, limit: Int, offset: Int): [Author!] # Search for authors by name or bio - # Auth queries - logout: AuthResult! - me: AuthResult! - isEmailUsed(email: String!): Boolean! - isAdmin: Boolean! - getOAuthProviders: [OAuthProvider!]! - getRoles: [RolesInfo!]! + # Auth queries + logout: AuthResult! + me: AuthResult! + isEmailUsed(email: String!): Boolean! + isAdmin: Boolean! + getOAuthProviders: [OAuthProvider!]! + getRoles: [RolesInfo!]! - # community - get_community: Community - get_communities_all: [Community] - get_communities_by_author(slug: String, user: String, author_id: Int): [Community] + # community + get_community: Community + get_communities_all: [Community] + get_communities_by_author( + slug: String + user: String + author_id: Int + ): [Community] - # collection - get_collection(slug: String!): Collection - get_collections_all: [Collection] - get_collections_by_author(slug: String, user: String, author_id: Int): [Collection] + # collection + get_collection(slug: String!): Collection + get_collections_all: [Collection] + get_collections_by_author( + slug: String + user: String + author_id: Int + ): [Collection] - # follower - get_shout_followers(slug: String, shout_id: Int): [Author] - get_topic_followers(slug: String): [Author] - get_topic_authors(slug: String): [Author] - get_author_followers(slug: String, user: String, author_id: Int): [Author] - get_author_follows(slug: String, user: String, author_id: Int): CommonResult! - get_author_follows_topics(slug: String, user: String, author_id: Int): [Topic] - get_author_follows_authors(slug: String, user: String, author_id: Int): [Author] + # follower + get_shout_followers(slug: String, shout_id: Int): [Author] + get_topic_followers(slug: String): [Author] + get_topic_authors(slug: String): [Author] + get_author_followers(slug: String, user: String, author_id: Int): [Author] + get_author_follows(slug: String, user: String, author_id: Int): CommonResult! + get_author_follows_topics(slug: String, user: String, author_id: Int): [Topic] + get_author_follows_authors( + slug: String + user: String + author_id: Int + ): [Author] - # reaction - load_reactions_by(by: ReactionBy!, limit: Int, offset: Int): [Reaction] - load_shout_comments(shout: Int!, limit: Int, offset: Int): [Reaction] - load_shout_ratings(shout: Int!, limit: Int, offset: Int): [Reaction] - load_comment_ratings(comment: Int!, limit: Int, offset: Int): [Reaction] + # reaction + load_reactions_by(by: ReactionBy!, limit: Int, offset: Int): [Reaction] + load_shout_comments(shout: Int!, limit: Int, offset: Int): [Reaction] + load_shout_ratings(shout: Int!, limit: Int, offset: Int): [Reaction] + load_comment_ratings(comment: Int!, limit: Int, offset: Int): [Reaction] - # branched comments pagination - load_comments_branch(shout: Int!, parent_id: Int, limit: Int, offset: Int, sort: ReactionSort, children_limit: Int, children_offset: Int): [Reaction] + # branched comments pagination + load_comments_branch( + shout: Int! + parent_id: Int + limit: Int + offset: Int + sort: ReactionSort + children_limit: Int + children_offset: Int + ): [Reaction] - # reader - get_shout(slug: String, shout_id: Int): Shout - load_shouts_by(options: LoadShoutsOptions): [Shout] - load_shouts_search(text: String!, options: LoadShoutsOptions): [SearchResult] - get_search_results_count(text: String!): CountResult! - load_shouts_bookmarked(options: LoadShoutsOptions): [Shout] + # reader + get_shout(slug: String, shout_id: Int): Shout + load_shouts_by(options: LoadShoutsOptions): [Shout] + load_shouts_search(text: String!, options: LoadShoutsOptions): [SearchResult] + get_search_results_count(text: String!): CountResult! + load_shouts_bookmarked(options: LoadShoutsOptions): [Shout] - # rating - get_my_rates_shouts(shouts: [Int!]!): [MyRateShout] - get_my_rates_comments(comments: [Int!]!): [MyRateComment] + # rating + get_my_rates_shouts(shouts: [Int!]!): [MyRateShout] + get_my_rates_comments(comments: [Int!]!): [MyRateComment] - # public feeds - load_shouts_with_topic(slug: String, options: LoadShoutsOptions): [Shout] # topic feed - load_shouts_random_top(options: LoadShoutsOptions): [Shout] # random order, fixed filter, limit offset can be used - load_shouts_authored_by(slug: String, options: LoadShoutsOptions): [Shout] # author feed - load_shouts_followed_by(slug: String, options: LoadShoutsOptions): [Shout] # another author feed + # public feeds + load_shouts_with_topic(slug: String, options: LoadShoutsOptions): [Shout] # topic feed + load_shouts_random_top(options: LoadShoutsOptions): [Shout] # random order, fixed filter, limit offset can be used + load_shouts_authored_by(slug: String, options: LoadShoutsOptions): [Shout] # author feed + load_shouts_followed_by(slug: String, options: LoadShoutsOptions): [Shout] # another author feed - # my feeds - load_shouts_feed(options: LoadShoutsOptions): [Shout] - load_shouts_unrated(options: LoadShoutsOptions): [Shout] - load_shouts_coauthored(options: LoadShoutsOptions): [Shout] - load_shouts_discussed(options: LoadShoutsOptions): [Shout] + # my feeds + load_shouts_feed(options: LoadShoutsOptions): [Shout] + load_shouts_unrated(options: LoadShoutsOptions): [Shout] + load_shouts_coauthored(options: LoadShoutsOptions): [Shout] + load_shouts_discussed(options: LoadShoutsOptions): [Shout] - # editor - get_my_shout(shout_id: Int!): CommonResult! - get_shouts_drafts: CommonResult! - load_drafts: CommonResult! + # editor + get_my_shout(shout_id: Int!): CommonResult! + get_shouts_drafts: CommonResult! + load_drafts: CommonResult! - # topic - get_topic(slug: String!): Topic - get_topics_all: [Topic]! - get_topics_by_author(slug: String, user: String, author_id: Int): [Topic] - get_topics_by_community(community_id: Int!, limit: Int, offset: Int): [Topic] + # topic + get_topic(slug: String!): Topic + get_topics_all: [Topic]! + get_topics_by_author(slug: String, user: String, author_id: Int): [Topic] + get_topics_by_community(community_id: Int!, limit: Int, offset: Int): [Topic] - # notifier - load_notifications(after: Int!, limit: Int, offset: Int): NotificationsResult! + # notifier + load_notifications(after: Int!, limit: Int, offset: Int): NotificationsResult! } diff --git a/schema/type.graphql b/schema/type.graphql index 2d5877a5..e1869317 100644 --- a/schema/type.graphql +++ b/schema/type.graphql @@ -1,334 +1,334 @@ type AuthorStat { - shouts: Int - topics: Int - authors: Int - followers: Int - rating: Int - rating_shouts: Int - rating_comments: Int - comments: Int - viewed: Int + shouts: Int + topics: Int + authors: Int + followers: Int + rating: Int + rating_shouts: Int + rating_comments: Int + comments: Int + viewed: Int } type Author { - id: Int! - slug: String! - name: String - pic: String - bio: String - about: String - links: [String] - created_at: Int - last_seen: Int - updated_at: Int - deleted_at: Int - email: String - seo: String - stat: AuthorStat # ratings inside - communities: [Community] - roles: [String!] - email_verified: Boolean + id: Int! + slug: String! + name: String + pic: String + bio: String + about: String + links: [String] + created_at: Int + last_seen: Int + updated_at: Int + deleted_at: Int + email: String + seo: String + stat: AuthorStat # ratings inside + communities: [Community] + roles: [String!] + email_verified: Boolean } type ReactionUpdating { - error: String - status: ReactionStatus - reaction: Reaction + error: String + status: ReactionStatus + reaction: Reaction } type Rating { - rater: String! - value: Int! + rater: String! + value: Int! } type Reaction { - id: Int! - shout: Shout! - created_at: Int! - created_by: Author! - updated_at: Int - deleted_at: Int - deleted_by: Author - range: String - kind: ReactionKind! - body: String - reply_to: Int - stat: Stat - oid: String - # old_thread: String - first_replies: [Reaction] + id: Int! + shout: Shout! + created_at: Int! + created_by: Author! + updated_at: Int + deleted_at: Int + deleted_by: Author + range: String + kind: ReactionKind! + body: String + reply_to: Int + stat: Stat + oid: String + # old_thread: String + first_replies: [Reaction] } type MediaItem { - url: String - title: String - body: String - source: String # image - pic: String + url: String + title: String + body: String + source: String # image + pic: String - # audio specific properties - date: String - genre: String - artist: String - lyrics: String + # audio specific properties + date: String + genre: String + artist: String + lyrics: String } type Shout { - id: Int! - title: String! - slug: String! - body: String! - layout: String! + id: Int! + title: String! + slug: String! + body: String! + layout: String! - lead: String - subtitle: String - lang: String - cover: String - cover_caption: String + lead: String + subtitle: String + lang: String + cover: String + cover_caption: String - community: Community! - main_topic: Topic - created_by: Author! - topics: [Topic] - authors: [Author] - updated_by: Author - deleted_by: Author + community: Community! + main_topic: Topic + created_by: Author! + topics: [Topic] + authors: [Author] + updated_by: Author + deleted_by: Author - created_at: Int! - updated_at: Int - published_at: Int - featured_at: Int - deleted_at: Int + created_at: Int! + updated_at: Int + published_at: Int + featured_at: Int + deleted_at: Int - seo: String # generated if not set - version_of: Shout # TODO: use version_of somewhere - draft: Draft - media: [MediaItem] - stat: Stat - score: Float + seo: String # generated if not set + version_of: Shout # TODO: use version_of somewhere + draft: Draft + media: [MediaItem] + stat: Stat + score: Float } type PublicationInfo { - id: Int! - slug: String! - published_at: Int + id: Int! + slug: String! + published_at: Int } type Draft { - id: Int! - created_at: Int! - created_by: Author! - community: Community! - layout: String - slug: String - title: String - subtitle: String - lead: String - body: String - media: [MediaItem] - cover: String - cover_caption: String - lang: String - seo: String + id: Int! + created_at: Int! + created_by: Author! + community: Community! + layout: String + slug: String + title: String + subtitle: String + lead: String + body: String + media: [MediaItem] + cover: String + cover_caption: String + lang: String + seo: String - # auto - updated_at: Int - deleted_at: Int - updated_by: Author - deleted_by: Author - authors: [Author]! - topics: [Topic]! - publication: PublicationInfo + # auto + updated_at: Int + deleted_at: Int + updated_by: Author + deleted_by: Author + authors: [Author]! + topics: [Topic]! + publication: PublicationInfo } type Stat { - rating: Int - comments_count: Int - viewed: Int - last_commented_at: Int + rating: Int + comments_count: Int + viewed: Int + last_commented_at: Int } type CommunityStat { - shouts: Int! - followers: Int! - authors: Int! + shouts: Int! + followers: Int! + authors: Int! } type Community { - id: Int! - slug: String! - name: String! - desc: String - pic: String! - created_at: Int! - created_by: Author! - stat: CommunityStat + id: Int! + slug: String! + name: String! + desc: String + pic: String! + created_at: Int! + created_by: Author! + stat: CommunityStat } type Collection { - id: Int! - slug: String! - title: String! - desc: String - pic: String - amount: Int - published_at: Int - created_at: Int! - created_by: Author! + id: Int! + slug: String! + title: String! + desc: String + pic: String + amount: Int + published_at: Int + created_at: Int! + created_by: Author! } type TopicStat { - shouts: Int! - followers: Int! - authors: Int! - comments: Int + shouts: Int! + followers: Int! + authors: Int! + comments: Int } type Topic { - id: Int! - slug: String! - title: String - body: String - pic: String - community: Int - parent_ids: [Int] - stat: TopicStat - oid: String - is_main: Boolean + id: Int! + slug: String! + title: String + body: String + pic: String + community: Int + parent_ids: [Int] + stat: TopicStat + oid: String + is_main: Boolean } # output type type CommonResult { - error: String - message: String - stats: String - drafts: [Draft] - draft: Draft - slugs: [String] - shout: Shout - shouts: [Shout] - author: Author - authors: [Author] - reaction: Reaction - reactions: [Reaction] - topic: Topic - topics: [Topic] - community: Community - communities: [Community] + error: String + message: String + stats: String + drafts: [Draft] + draft: Draft + slugs: [String] + shout: Shout + shouts: [Shout] + author: Author + authors: [Author] + reaction: Reaction + reactions: [Reaction] + topic: Topic + topics: [Topic] + community: Community + communities: [Community] } type SearchResult { - id: Int! - slug: String! - title: String! - cover: String - main_topic: Topic - created_at: Int - authors: [Author] - topics: [Topic] - score: Float! + id: Int! + slug: String! + title: String! + cover: String + main_topic: Topic + created_at: Int + authors: [Author] + topics: [Topic] + score: Float! } type Invite { - id: Int! - inviter_id: Int! - author_id: Int! - shout_id: Int! - status: InviteStatus + id: Int! + inviter_id: Int! + author_id: Int! + shout_id: Int! + status: InviteStatus } type AuthorFollowsResult { - topics: [Topic] - authors: [Author] - communities: [Community] - error: String + topics: [Topic] + authors: [Author] + communities: [Community] + error: String } type Notification { - id: Int! - action: String! - entity: String! - created_at: Int! - payload: String! - seen: [Author] + id: Int! + action: String! + entity: String! + created_at: Int! + payload: String! + seen: [Author] } type NotificationSeenResult { - error: String + error: String } type NotificationGroup { - thread: String! - entity: String! - action: String! - updated_at: Int! - authors: [Author] - shout: Shout - reactions: [Reaction] - seen: Boolean + thread: String! + entity: String! + action: String! + updated_at: Int! + authors: [Author] + shout: Shout + reactions: [Reaction] + seen: Boolean } type NotificationsResult { - notifications: [NotificationGroup!]! - unread: Int! - total: Int! - error: String + notifications: [NotificationGroup!]! + unread: Int! + total: Int! + error: String } type MyRateShout { - shout_id: Int! - my_rate: ReactionKind + shout_id: Int! + my_rate: ReactionKind } type MyRateComment { - shout_id: Int - comment_id: Int! - my_rate: ReactionKind + shout_id: Int + comment_id: Int! + my_rate: ReactionKind } # Auth types type AuthResult { - success: Boolean! - error: String - token: String - author: Author + success: Boolean! + error: String + token: String + author: Author } type SecurityUpdateResult { - success: Boolean! - error: String - author: Author + success: Boolean! + error: String + author: Author } type Permission { - resource: String! - action: String! - conditions: String + resource: String! + action: String! + conditions: String } type SessionInfo { - token: String! - author: Author! + token: String! + author: Author! } type AuthSuccess { - success: Boolean! + success: Boolean! } type OAuthProvider { - id: String! - name: String! - url: String! + id: String! + name: String! + url: String! } type RolesInfo { - id: String! - name: String! - description: String - permissions: [Permission!]! + id: String! + name: String! + description: String + permissions: [Permission!]! } type CountResult { - count: Int! + count: Int! }