mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
225 lines
6.3 KiB
GraphQL
225 lines
6.3 KiB
GraphQL
type Query {
|
|
isLoggedIn: Boolean!
|
|
currentUser: User
|
|
statistics: Statistics!
|
|
}
|
|
type Mutation {
|
|
login(email: String!, password: String!): String!
|
|
signup(email: String!, password: String!): Boolean!
|
|
report(id: ID!, description: String): Report
|
|
disable(id: ID!): ID!
|
|
enable(id: ID!): ID!
|
|
}
|
|
|
|
type Statistics {
|
|
countUsers: Int!
|
|
countPosts: Int!
|
|
countComments: Int!
|
|
countNotifications: Int!
|
|
countOrganizations: Int!
|
|
countProjects: Int!
|
|
countInvites: Int!
|
|
countFollows: Int!
|
|
countShouts: Int!
|
|
}
|
|
|
|
scalar Date
|
|
scalar Time
|
|
scalar DateTime
|
|
|
|
enum VisibilityEnum {
|
|
public
|
|
friends
|
|
private
|
|
}
|
|
|
|
enum UserGroupEnum {
|
|
admin
|
|
moderator
|
|
user
|
|
}
|
|
|
|
type Location {
|
|
id: ID!
|
|
name: String!
|
|
nameEN: String
|
|
nameDE: String
|
|
nameFR: String
|
|
nameNL: String
|
|
nameIT: String
|
|
nameES: String
|
|
namePT: String
|
|
namePL: String
|
|
type: String!
|
|
lat: Float
|
|
lng: Float
|
|
parent: Location @cypher(statement: "MATCH (this)-[:IS_IN]->(l:Location) RETURN l")
|
|
}
|
|
|
|
type User {
|
|
id: ID!
|
|
name: String
|
|
email: String
|
|
slug: String
|
|
password: String!
|
|
avatar: String
|
|
deleted: Boolean
|
|
disabled: Boolean
|
|
disabledBy: User @relation(name: "DISABLED", direction: "IN")
|
|
role: UserGroupEnum
|
|
|
|
location: Location @cypher(statement: "MATCH (this)-[:IS_IN]->(l:Location) RETURN l")
|
|
locationName: String
|
|
about: String
|
|
|
|
createdAt: String
|
|
updatedAt: String
|
|
|
|
friends: [User]! @relation(name: "FRIENDS", direction: "BOTH")
|
|
friendsCount: Int! @cypher(statement: "MATCH (this)<-[:FRIENDS]->(r:User) RETURN COUNT(r)")
|
|
|
|
following: [User]! @relation(name: "FOLLOWS", direction: "OUT")
|
|
followingCount: Int! @cypher(statement: "MATCH (this)-[:FOLLOWS]->(r:User) RETURN COUNT(r)")
|
|
|
|
followedBy: [User]! @relation(name: "FOLLOWS", direction: "IN")
|
|
followedByCount: Int! @cypher(statement: "MATCH (this)<-[:FOLLOWS]-(r:User) RETURN COUNT(r)")
|
|
|
|
#contributions: [WrittenPost]!
|
|
#contributions2(first: Int = 10, offset: Int = 0): [WrittenPost2]!
|
|
# @cypher(
|
|
# statement: "MATCH (this)-[w:WROTE]->(p:Post) RETURN p as Post, w.timestamp as timestamp"
|
|
# )
|
|
contributions: [Post]! @relation(name: "WROTE", direction: "OUT")
|
|
contributionsCount: Int! @cypher(statement: """
|
|
MATCH (this)-[:WROTE]->(r:Post)
|
|
WHERE (NOT exists(r.deleted) OR r.deleted = false)
|
|
AND (NOT exists(r.disabled) OR r.disabled = false)
|
|
RETURN COUNT(r)"""
|
|
)
|
|
|
|
comments: [Comment]! @relation(name: "WROTE", direction: "OUT")
|
|
commentsCount: Int! @cypher(statement: "MATCH (this)-[:WROTE]->(r:Comment) WHERE NOT r.deleted = true RETURN COUNT(r)")
|
|
|
|
shouted: [Post]! @relation(name: "SHOUTED", direction: "OUT")
|
|
shoutedCount: Int! @cypher(statement: "MATCH (this)-[:SHOUTED]->(r:Post) WHERE NOT r.deleted = true AND NOT r.disabled = true RETURN COUNT(r)")
|
|
|
|
organizationsCreated: [Organization] @relation(name: "CREATED_ORGA", direction: "OUT")
|
|
organizationsOwned: [Organization] @relation(name: "OWNING_ORGA", direction: "OUT")
|
|
|
|
blacklisted: [User]! @relation(name: "BLACKLISTED", direction: "OUT")
|
|
|
|
categories: [Category]! @relation(name: "CATEGORIZED", direction: "OUT")
|
|
|
|
badges: [Badge]! @relation(name: "REWARDED", direction: "IN")
|
|
badgesCount: Int! @cypher(statement: "MATCH (this)<-[:REWARDED]-(r:Badge) RETURN COUNT(r)")
|
|
}
|
|
|
|
type Post {
|
|
id: ID!
|
|
author: User @relation(name: "WROTE", direction: "IN")
|
|
title: String!
|
|
slug: String
|
|
content: String!
|
|
contentExcerpt: String
|
|
image: String
|
|
visibility: VisibilityEnum
|
|
deleted: Boolean
|
|
disabled: Boolean
|
|
disabledBy: User @relation(name: "DISABLED", direction: "IN")
|
|
createdAt: String
|
|
updatedAt: String
|
|
|
|
relatedContributions: [Post]! @cypher(statement: """
|
|
MATCH (this)-[:TAGGED|CATEGORIZED]->(categoryOrTag)<-[:TAGGED|CATEGORIZED]-(post:Post)
|
|
RETURN DISTINCT post
|
|
LIMIT 10
|
|
""")
|
|
|
|
tags: [Tag]! @relation(name: "TAGGED", direction: "OUT")
|
|
categories: [Category]! @relation(name: "CATEGORIZED", direction: "OUT")
|
|
|
|
comments: [Comment]! @relation(name: "COMMENTS", direction: "IN")
|
|
commentsCount: Int! @cypher(statement: "MATCH (this)<-[:COMMENTS]-(r:Comment) RETURN COUNT(r)")
|
|
|
|
shoutedBy: [User]! @relation(name: "SHOUTED", direction: "IN")
|
|
shoutedCount: Int! @cypher(statement: "MATCH (this)<-[:SHOUTED]-(r:User) WHERE NOT r.deleted = true AND NOT r.disabled = true RETURN COUNT(r)")
|
|
}
|
|
|
|
type Comment {
|
|
id: ID!
|
|
author: User @relation(name: "WROTE", direction: "IN")
|
|
content: String!
|
|
contentExcerpt: String
|
|
post: Post @relation(name: "COMMENTS", direction: "OUT")
|
|
createdAt: String
|
|
updatedAt: String
|
|
deleted: Boolean
|
|
disabled: Boolean
|
|
disabledBy: User @relation(name: "DISABLED", direction: "IN")
|
|
}
|
|
|
|
type Report {
|
|
id: ID!
|
|
submitter: User @relation(name: "REPORTED", direction: "IN")
|
|
description: String
|
|
type: String! @cypher(statement: "MATCH (resource)<-[:REPORTED]-(this) RETURN labels(resource)[0]")
|
|
createdAt: String
|
|
comment: Comment @relation(name: "REPORTED", direction: "OUT")
|
|
post: Post @relation(name: "REPORTED", direction: "OUT")
|
|
user: User @relation(name: "REPORTED", direction: "OUT")
|
|
}
|
|
|
|
type Category {
|
|
id: ID!
|
|
name: String!
|
|
slug: String
|
|
icon: String!
|
|
posts: [Post]! @relation(name: "CATEGORIZED", direction: "IN")
|
|
postCount: Int! @cypher(statement: "MATCH (this)<-[:CATEGORIZED]-(r:Post) RETURN COUNT(r)")
|
|
}
|
|
|
|
type Badge {
|
|
id: ID!
|
|
key: String!
|
|
type: BadgeTypeEnum!
|
|
status: BadgeStatusEnum!
|
|
icon: String!
|
|
|
|
rewarded: [User]! @relation(name: "REWARDED", direction: "OUT")
|
|
}
|
|
|
|
enum BadgeTypeEnum {
|
|
role
|
|
crowdfunding
|
|
}
|
|
enum BadgeStatusEnum {
|
|
permanent
|
|
temporary
|
|
}
|
|
|
|
type Organization {
|
|
id: ID!
|
|
createdBy: User @relation(name: "CREATED_ORGA", direction: "IN")
|
|
ownedBy: [User] @relation(name: "OWNING_ORGA", direction: "IN")
|
|
name: String!
|
|
slug: String
|
|
description: String!
|
|
descriptionExcerpt: String
|
|
deleted: Boolean
|
|
disabled: Boolean
|
|
|
|
tags: [Tag]! @relation(name: "TAGGED", direction: "OUT")
|
|
categories: [Category]! @relation(name: "CATEGORIZED", direction: "OUT")
|
|
}
|
|
|
|
type Tag {
|
|
id: ID!
|
|
name: String!
|
|
taggedPosts: [Post]! @relation(name: "TAGGED", direction: "IN")
|
|
taggedOrganizations: [Organization]! @relation(name: "TAGGED", direction: "IN")
|
|
taggedCount: Int! @cypher(statement: "MATCH (this)<-[:TAGGED]-(p) RETURN COUNT(p)")
|
|
taggedCountUnique: Int! @cypher(statement: "MATCH (this)<-[:TAGGED]-(p)<-[:WROTE]-(u:User) RETURN COUNT(DISTINCT u)")
|
|
deleted: Boolean
|
|
disabled: Boolean
|
|
}
|