feat: GraphQL schema

This commit is contained in:
NGPixel
2017-08-06 21:05:10 -04:00
parent 62067caa62
commit 437b88bf58
8 changed files with 201 additions and 60 deletions

View File

@@ -0,0 +1,14 @@
'use strict'
/* global wiki */
module.exports = {
Query(obj, args, context, info) {
return wiki.db.Group.findAll({ where: args })
},
Type: {
users(grp) {
return grp.getUsers()
}
}
}

View File

@@ -0,0 +1,14 @@
'use strict'
/* global wiki */
module.exports = {
Query(obj, args, context, info) {
return wiki.db.User.findAll({ where: args })
},
Type: {
groups(usr) {
return usr.getGroups()
}
}
}

View File

@@ -0,0 +1,136 @@
# 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]
}