Commit 437b88bf authored by NGPixel's avatar NGPixel

feat: GraphQL schema

parent 62067caa
......@@ -64,6 +64,7 @@
"fs-extra": "~4.0.0",
"git-wrapper2-promise": "~0.2.9",
"graphql": "~0.10.5",
"graphql-tools": "/home/nick1.1.0",
"highlight.js": "~9.12.0",
"i18next": "~8.4.3",
"i18next-express-middleware": "~1.0.5",
......
......@@ -48,9 +48,9 @@ if (numWorkers > numCPUs) {
}
if (cluster.isMaster) {
wiki.logger.info('--------------------------')
wiki.logger.info('Wiki.js is initializing...')
wiki.logger.info('--------------------------')
wiki.logger.info('=======================================')
wiki.logger.info('= Wiki.js =============================')
wiki.logger.info('=======================================')
require('./master').then(() => {
// -> Create background workers
......
......@@ -5,6 +5,7 @@
*/
module.exports = db => {
db.User.belongsToMany(db.Group, { through: 'userGroups' })
db.Group.belongsToMany(db.User, { through: 'userGroups' })
db.Group.hasMany(db.Right, { as: 'groupRights' })
db.Document.hasMany(db.Tag, { as: 'documentTags' })
db.File.belongsTo(db.Folder)
......
......@@ -2,66 +2,27 @@
/* global wiki */
const gql = require('graphql')
const gqlTools = require('graphql-tools')
const fs = require('fs')
const path = require('path')
const User = new gql.GraphQLObjectType({
name: 'User',
description: 'A User',
fields() {
return {
id: {
type: gql.GraphQLInt,
resolve(usr) {
return usr.id
}
},
email: {
type: gql.GraphQLString,
resolve(usr) {
return usr.email
}
},
provider: {
type: gql.GraphQLString,
resolve(usr) {
return usr.provider
}
},
providerId: {
type: gql.GraphQLString,
resolve(usr) {
return usr.providerId
}
}
}
}
})
const typeDefs = fs.readFileSync(path.join(wiki.SERVERPATH, 'schemas/types.graphql'), 'utf8')
const Query = new gql.GraphQLObjectType({
name: 'Query',
description: 'Root Query',
fields() {
return {
users: {
type: new gql.GraphQLList(User),
args: {
id: {
type: gql.GraphQLInt
},
email: {
type: gql.GraphQLString
}
},
resolve(root, args) {
return wiki.db.User.findAll({ where: args })
}
}
}
}
})
const GroupResolvers = require('../schemas/resolvers-group')
const UserResolvers = require('../schemas/resolvers-user')
const resolvers = {
Query: {
groups: GroupResolvers.Query,
users: UserResolvers.Query
},
Group: GroupResolvers.Type,
User: UserResolvers.Type
}
const Schema = new gql.GraphQLSchema({
query: Query
const Schema = gqlTools.makeExecutableSchema({
typeDefs,
resolvers
})
module.exports = Schema
'use strict'
/* global wiki */
module.exports = {
Query(obj, args, context, info) {
return wiki.db.Group.findAll({ where: args })
},
Type: {
users(grp) {
return grp.getUsers()
}
}
}
'use strict'
/* global wiki */
module.exports = {
Query(obj, args, context, info) {
return wiki.db.User.findAll({ where: args })
},
Type: {
groups(usr) {
return usr.getGroups()
}
}
}
# SCALARS
scalar Date
# ENUMS
enum UserRole {
guest
user
admin
}
enum FileType {
binary
image
}
enum RightRole {
read
write
manage
}
# INTERFACES
interface Base {
id: Int!
createdOn: Date
updatedOn: Date
}
# TYPES
type Comment implements Base {
id: Int!
createdOn: Date
updatedOn: Date
content: String
document: Document!
author: User!
}
type Document implements Base {
id: Int!
createdOn: Date
updatedOn: Date
path: String!
title: String!
subtitle: String
parentPath: String
parentTitle: String
isDirectory: Boolean!
isEntry: Boolean!
searchContent: String
tags: [Tag]
}
type File implements Base {
id: Int!
createdOn: Date
updatedOn: Date
category: FileType!
mime: String!
extra: String
filename: String!
basename: String!
filesize: Int!
folder: Folder
}
type Folder implements Base {
id: Int!
createdOn: Date
updatedOn: Date
name: String!
}
type Group implements Base {
id: Int!
createdOn: Date
updatedOn: Date
name: String!
users: [User]
rights: [Right]
}
type Right implements Base {
id: Int!
createdOn: Date
updatedOn: Date
path: String!
role: RightRole!
exact: Boolean!
allow: Boolean!
}
type Setting implements Base {
id: Int!
createdOn: Date
updatedOn: Date
key: String!
config: String!
}
type Tag implements Base {
id: Int!
createdOn: Date
updatedOn: Date
key: String!
}
type User implements Base {
id: Int!
createdOn: Date
updatedOn: Date
email: String!
provider: String
providerId: String
name: String
role: UserRole!
groups: [Group]
}
# QUERY
type Query {
comments(id: Int): [Comment]
documents(id: Int, path: String): [Document]
files(id: Int): [File]
folders(id: Int, name: String): [Folder]
groups(id: Int, name: String): [Group]
rights(id: Int): [Right]
settings(key: String): [Setting]
tags(key: String): [Tag]
users(id: Int, email: String, provider: String, providerId: String, role: UserRole): [User]
}
This diff was suppressed by a .gitattributes entry.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment