graph, rpdata-server: Started on new GraphQL implementation.
the build failed

This commit is contained in:
2018-09-13 21:13:05 +02:00
parent 2e5162a29b
commit 9978d7380b
16 changed files with 482 additions and 14 deletions
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
echo "# Generated by stiching together the files under schema/ – DO NOT EDIT" >generated.gql
cat schema/root.gql schema/**/*.gql >>generated.gql
+19
View File
@@ -0,0 +1,19 @@
schema: generated.gql
exec:
filename: generated.go
package: graph2
model:
filename: input/generated.go
package: input
models:
Tag:
model: git.aiterp.net/rpdata/api/model/story.Tag
TagKind:
model: git.aiterp.net/rpdata/api/model/story.TagKind
Character:
model: git.aiterp.net/rpdata/api/model/character.Character
CharactersFilter:
model: git.aiterp.net/rpdata/api/model/character.Filter
+21
View File
@@ -0,0 +1,21 @@
package graph2
import (
"git.aiterp.net/rpdata/api/graph2/queries"
graphql "github.com/99designs/gqlgen/graphql"
)
//go:generate ./combine.sh
//go:generate gorunpkg github.com/99designs/gqlgen -v
func New() graphql.ExecutableSchema {
return NewExecutableSchema(Config{
Resolvers: &rootResolver{},
})
}
type rootResolver struct{}
func (r *rootResolver) Query() QueryResolver {
return &queries.Resolver
}
+22
View File
@@ -0,0 +1,22 @@
package queries
import (
"context"
"errors"
"git.aiterp.net/rpdata/api/model/character"
)
func (r *resolver) Character(ctx context.Context, id *string, nick *string) (character.Character, error) {
if id != nil {
return character.FindID(*id)
} else if nick != nil {
return character.FindNick(*nick)
} else {
return character.Character{}, errors.New("You must specify either an ID or a nick")
}
}
func (r *resolver) Characters(ctx context.Context, filter *character.Filter) ([]character.Character, error) {
return character.List(filter)
}
+6
View File
@@ -0,0 +1,6 @@
package queries
type resolver struct{}
// Resolver has all the queries
var Resolver resolver
+11
View File
@@ -0,0 +1,11 @@
package queries
import (
"context"
"git.aiterp.net/rpdata/api/model/story"
)
func (r *resolver) Tags(ctx context.Context) ([]story.Tag, error) {
return story.ListTags()
}
+16
View File
@@ -0,0 +1,16 @@
schema {
query: Query
}
type Query {
# Find character by either an ID or a nick.
character(id: String, nick: String): Character!
# Find characters
characters(filter: CharactersFilter): [Character!]!
# Find all distinct tags used in stories
tags: [Tag!]!
}
+87
View File
@@ -0,0 +1,87 @@
# A Character represents an RP character
type Character {
# A unique identifier for the character
id: String!
# The primary IRC nick belonging to the character
nick: String
# All IRC nicks associated with this character
nicks: [String!]!
# The character's author
author: String!
# The character's name
name: String!
# The name to display when space is scarce, usually the first/given name
shortName: String!
# A short description of the character
description: String!
}
# Filter for characters query
input CharactersFilter {
# Filter by character IDs
ids: [String!]
# Filter by nicks
nicks: [String!]
# Filter by names
names: [String!]
# Filter by author
author: String
# Filter by text search matching against the character's description
search: String
# Filter by whether they've been part of a log.
logged: Boolean
}
# Input for adding characters
input CharacterAddInput {
# The primary IRC nick name to recognize this character by
nick: String!
# The character's name
name: String!
# Optioanl shortened name. By default, it uses the first token in the name
shortName: String
# Description for a character.
description: String
# Optioanlly, specify another author. This needs special permissions if it's not
# your own username
author: String
}
# Input for addNick and removeNick mutation
input CharacterNickInput {
# The ID of the character
id: String!
# The nick to add or remove
nick: String!
}
input CharacterEditInput {
# The id for the character to edit
id: String!
# The full name of the character -- not the salarian full name!
name: String
# The character's short name that is used in compact lists
shortName: String
# A short description for the character
description: String
}
+37
View File
@@ -0,0 +1,37 @@
# A Tag is a means of associating stories that have details in common with one another.
type Tag {
# The tag's kind
kind: TagKind!
# The tag's name
name: String!
}
# A Tag is a means of associating stories that have details in common with one another.
input TagInput {
# The tag's kind
kind: TagKind!
# The tag's name
name: String!
}
# Allowed values for Tag.kind
enum TagKind {
# An organization is a catch all term for in-universe corporations, teams, groups, cults, forces, etc...
Organization
# A character tag should have the exact full name of the character.
Character
# A location is anything from a planet to an establishment. This may overlap with an organization, and if so, both
# kinds of tags should be used.
Location
# An event is a plot or a part of a plot.
Event
# None of the above, but it does still tie multiple stories together. The new story/chapter format may obsolete this tag kind.
Series
}