restructured,inbox-removed
This commit is contained in:
415
schemas/core.graphql
Normal file
415
schemas/core.graphql
Normal file
@@ -0,0 +1,415 @@
|
||||
scalar DateTime
|
||||
|
||||
################################### Payload ###################################
|
||||
|
||||
type UserFollowings {
|
||||
unread: Int
|
||||
topics: [String]
|
||||
authors: [String]
|
||||
reactions: [Int]
|
||||
communities: [String]
|
||||
}
|
||||
|
||||
type AuthResult {
|
||||
error: String
|
||||
token: String
|
||||
user: User
|
||||
news: UserFollowings
|
||||
}
|
||||
|
||||
type AuthorStat {
|
||||
followings: Int
|
||||
followers: Int
|
||||
rating: Int
|
||||
commented: Int
|
||||
shouts: Int
|
||||
}
|
||||
|
||||
|
||||
type Author {
|
||||
id: Int!
|
||||
slug: String!
|
||||
name: String!
|
||||
userpic: String
|
||||
caption: String # only for full shout
|
||||
bio: String
|
||||
about: String
|
||||
links: [String]
|
||||
stat: AuthorStat
|
||||
roles: [Role] # in different communities
|
||||
lastSeen: DateTime
|
||||
createdAt: DateTime
|
||||
}
|
||||
|
||||
type Result {
|
||||
error: String
|
||||
slugs: [String]
|
||||
shout: Shout
|
||||
shouts: [Shout]
|
||||
author: Author
|
||||
authors: [Author]
|
||||
reaction: Reaction
|
||||
reactions: [Reaction]
|
||||
topic: Topic
|
||||
topics: [Topic]
|
||||
community: Community
|
||||
communities: [Community]
|
||||
}
|
||||
|
||||
enum ReactionStatus {
|
||||
NEW
|
||||
UPDATED
|
||||
CHANGED
|
||||
EXPLAINED
|
||||
DELETED
|
||||
}
|
||||
|
||||
type ReactionUpdating {
|
||||
error: String
|
||||
status: ReactionStatus
|
||||
reaction: Reaction
|
||||
}
|
||||
|
||||
################################### Inputs ###################################
|
||||
|
||||
input ShoutInput {
|
||||
slug: String
|
||||
title: String
|
||||
body: String
|
||||
lead: String
|
||||
description: String
|
||||
layout: String
|
||||
media: String
|
||||
authors: [String]
|
||||
topics: [TopicInput]
|
||||
community: Int
|
||||
mainTopic: TopicInput
|
||||
subtitle: String
|
||||
cover: String
|
||||
}
|
||||
|
||||
input ProfileInput {
|
||||
slug: String
|
||||
name: String
|
||||
userpic: String
|
||||
links: [String]
|
||||
bio: String
|
||||
about: String
|
||||
}
|
||||
|
||||
input TopicInput {
|
||||
id: Int,
|
||||
slug: String!
|
||||
# community: String!
|
||||
title: String
|
||||
body: String
|
||||
pic: String
|
||||
# children: [String]
|
||||
# parents: [String]
|
||||
}
|
||||
|
||||
|
||||
input ReactionInput {
|
||||
kind: ReactionKind!
|
||||
shout: Int!
|
||||
range: String
|
||||
body: String
|
||||
replyTo: Int
|
||||
}
|
||||
|
||||
enum FollowingEntity {
|
||||
TOPIC
|
||||
AUTHOR
|
||||
COMMUNITY
|
||||
REACTIONS
|
||||
}
|
||||
|
||||
################################### Mutation
|
||||
|
||||
type Mutation {
|
||||
|
||||
# auth
|
||||
getSession: AuthResult!
|
||||
registerUser(email: String!, password: String, name: String): AuthResult!
|
||||
sendLink(email: String!, lang: String, template: String): Result!
|
||||
confirmEmail(token: String!): AuthResult!
|
||||
|
||||
# shout
|
||||
createShout(inp: ShoutInput!): Result!
|
||||
updateShout(shout_id: Int!, shout_input: ShoutInput, publish: Boolean): Result!
|
||||
deleteShout(shout_id: Int!): Result!
|
||||
|
||||
# user profile
|
||||
rateUser(slug: String!, value: Int!): Result!
|
||||
updateOnlineStatus: Result!
|
||||
updateProfile(profile: ProfileInput!): Result!
|
||||
|
||||
# topics
|
||||
createTopic(input: TopicInput!): Result!
|
||||
# TODO: mergeTopics(t1: String!, t2: String!): Result!
|
||||
updateTopic(input: TopicInput!): Result!
|
||||
destroyTopic(slug: String!): Result!
|
||||
|
||||
# reactions
|
||||
createReaction(reaction: ReactionInput!): Result!
|
||||
updateReaction(id: Int!, reaction: ReactionInput!): Result!
|
||||
deleteReaction(id: Int!): Result!
|
||||
|
||||
# following
|
||||
follow(what: FollowingEntity!, slug: String!): Result!
|
||||
unfollow(what: FollowingEntity!, slug: String!): Result!
|
||||
}
|
||||
|
||||
input AuthorsBy {
|
||||
lastSeen: DateTime
|
||||
createdAt: DateTime
|
||||
slug: String
|
||||
name: String
|
||||
topic: String
|
||||
order: String
|
||||
days: Int
|
||||
stat: String
|
||||
}
|
||||
|
||||
input LoadShoutsFilters {
|
||||
title: String
|
||||
body: String
|
||||
topic: String
|
||||
author: String
|
||||
layout: String
|
||||
excludeLayout: String
|
||||
visibility: String
|
||||
days: Int
|
||||
reacted: Boolean
|
||||
}
|
||||
|
||||
input LoadShoutsOptions {
|
||||
filters: LoadShoutsFilters
|
||||
with_author_captions: Boolean
|
||||
limit: Int!
|
||||
offset: Int
|
||||
order_by: String
|
||||
order_by_desc: Boolean
|
||||
}
|
||||
|
||||
input ReactionBy {
|
||||
shout: String # slug
|
||||
shouts: [String]
|
||||
search: String # fts on body
|
||||
comment: Boolean
|
||||
topic: String # topic.slug
|
||||
createdBy: String # user.slug
|
||||
days: Int # before
|
||||
sort: String # how to sort, default createdAt
|
||||
}
|
||||
################################### Query
|
||||
|
||||
type Query {
|
||||
|
||||
# auth
|
||||
isEmailUsed(email: String!): Boolean!
|
||||
signIn(email: String!, password: String, lang: String): AuthResult!
|
||||
signOut: AuthResult!
|
||||
|
||||
# zine
|
||||
loadAuthorsBy(by: AuthorsBy, limit: Int, offset: Int): [Author]!
|
||||
loadShout(slug: String, shout_id: Int): Shout
|
||||
loadShouts(options: LoadShoutsOptions): [Shout]!
|
||||
loadDrafts: [Shout]!
|
||||
loadReactionsBy(by: ReactionBy!, limit: Int, offset: Int): [Reaction]!
|
||||
userFollowers(slug: String!): [Author]!
|
||||
userFollowedAuthors(slug: String!): [Author]!
|
||||
userFollowedTopics(slug: String!): [Topic]!
|
||||
authorsAll: [Author]!
|
||||
getAuthor(slug: String!): User
|
||||
myFeed(options: LoadShoutsOptions): [Shout]
|
||||
|
||||
# migrate
|
||||
markdownBody(body: String!): String!
|
||||
|
||||
# topics
|
||||
getTopic(slug: String!): Topic
|
||||
topicsAll: [Topic]!
|
||||
topicsRandom(amount: Int): [Topic]!
|
||||
topicsByCommunity(community: String!): [Topic]!
|
||||
topicsByAuthor(author: String!): [Topic]!
|
||||
}
|
||||
|
||||
############################################ Entities
|
||||
|
||||
type Resource {
|
||||
id: Int!
|
||||
name: String!
|
||||
}
|
||||
|
||||
type Operation {
|
||||
id: Int!
|
||||
name: String!
|
||||
}
|
||||
|
||||
type Permission {
|
||||
operation: Int!
|
||||
resource: Int!
|
||||
}
|
||||
|
||||
type Role {
|
||||
id: Int!
|
||||
name: String!
|
||||
community: String!
|
||||
desc: String
|
||||
permissions: [Permission!]!
|
||||
}
|
||||
|
||||
type Rating {
|
||||
rater: String!
|
||||
value: Int!
|
||||
}
|
||||
|
||||
type User {
|
||||
id: Int!
|
||||
username: String! # to login, ex. email, phone
|
||||
createdAt: DateTime!
|
||||
lastSeen: DateTime
|
||||
slug: String!
|
||||
name: String # to display
|
||||
email: String
|
||||
password: String
|
||||
oauth: String # provider:token
|
||||
userpic: String
|
||||
links: [String]
|
||||
emailConfirmed: Boolean # should contain all emails too
|
||||
muted: Boolean
|
||||
updatedAt: DateTime
|
||||
ratings: [Rating]
|
||||
bio: String
|
||||
about: String
|
||||
communities: [Int] # user participating communities
|
||||
oid: String
|
||||
}
|
||||
|
||||
enum ReactionKind {
|
||||
LIKE
|
||||
DISLIKE
|
||||
|
||||
AGREE
|
||||
DISAGREE
|
||||
|
||||
PROOF
|
||||
DISPROOF
|
||||
|
||||
COMMENT
|
||||
QUOTE
|
||||
|
||||
PROPOSE
|
||||
ASK
|
||||
|
||||
REMARK
|
||||
FOOTNOTE
|
||||
|
||||
ACCEPT
|
||||
REJECT
|
||||
}
|
||||
|
||||
type Reaction {
|
||||
id: Int!
|
||||
shout: Shout!
|
||||
createdAt: DateTime!
|
||||
createdBy: User!
|
||||
updatedAt: DateTime
|
||||
deletedAt: DateTime
|
||||
deletedBy: User
|
||||
range: String # full / 0:2340
|
||||
kind: ReactionKind!
|
||||
body: String
|
||||
replyTo: Int
|
||||
stat: Stat
|
||||
old_id: String
|
||||
old_thread: String
|
||||
}
|
||||
|
||||
# is publication
|
||||
type Shout {
|
||||
id: Int!
|
||||
slug: String!
|
||||
body: String!
|
||||
lead: String
|
||||
description: String
|
||||
createdAt: DateTime!
|
||||
topics: [Topic]
|
||||
mainTopic: String
|
||||
title: String
|
||||
subtitle: String
|
||||
authors: [Author]
|
||||
lang: String
|
||||
community: String
|
||||
cover: String
|
||||
layout: String # audio video literature image
|
||||
versionOf: String # for translations and re-telling the same story
|
||||
visibility: String # owner authors community public
|
||||
updatedAt: DateTime
|
||||
updatedBy: User
|
||||
deletedAt: DateTime
|
||||
deletedBy: User
|
||||
publishedAt: DateTime
|
||||
media: String # json [ { title pic url body }, .. ]
|
||||
stat: Stat
|
||||
}
|
||||
|
||||
type Stat {
|
||||
viewed: Int
|
||||
reacted: Int
|
||||
rating: Int
|
||||
commented: Int
|
||||
ranking: Int
|
||||
}
|
||||
|
||||
type Community {
|
||||
id: Int!
|
||||
slug: String!
|
||||
name: String!
|
||||
desc: String
|
||||
pic: String!
|
||||
createdAt: DateTime!
|
||||
createdBy: User!
|
||||
}
|
||||
|
||||
type Collection {
|
||||
id: Int!
|
||||
slug: String!
|
||||
title: String!
|
||||
desc: String
|
||||
amount: Int
|
||||
publishedAt: DateTime
|
||||
createdAt: DateTime!
|
||||
createdBy: User!
|
||||
}
|
||||
|
||||
type TopicStat {
|
||||
shouts: Int!
|
||||
followers: Int!
|
||||
authors: Int!
|
||||
# viewed: Int
|
||||
# reacted: Int!
|
||||
# commented: Int
|
||||
# rating: Int
|
||||
}
|
||||
|
||||
type Topic {
|
||||
id: Int!
|
||||
slug: String!
|
||||
title: String
|
||||
body: String
|
||||
pic: String
|
||||
# community: Community!
|
||||
stat: TopicStat
|
||||
oid: String
|
||||
}
|
||||
|
||||
type Token {
|
||||
createdAt: DateTime!
|
||||
expiresAt: DateTime
|
||||
id: Int!
|
||||
ownerId: Int!
|
||||
usedAt: DateTime
|
||||
value: String!
|
||||
}
|
Reference in New Issue
Block a user