GoでGraphQLサーバーを作る
QiitaにDeNA20新卒アドベントカレンダー2019として書いた 概要
TODOアプリ
機能
タスク を一覧表示
タスクの並び替え
作成時間順
due (期限が早い順)
タスク作成
タスク更新
title
notes
completed
due
API やること
CORS
スキーマ
code:schema.graphql
query {
tasks(input: TasksInput!, orderBy: TaskOrderFields!, page: PaginationInput!): TaskConnection!
}
mutation {
createTask(input: CreateTaskInput!): Task!
updateTask(input: UpdateTaskInput!): Task!
}
code:task.graphql
type Task implements Node {
id: ID!
title: String!
notes: String!
completed: Boolean!
due: Time // gqlgen build-in scalar type
}
type TaskEdge implements Edge {
cursor: String!
node: Task!
}
type TaskConnection implements Connection {
pageInfo: PageInfo!
}
input TasksInput {
completed: Boolean
}
enum TaskOrderFields {
LATEST
DUE
}
input CreateTaskInput {
title: String!
notes: String
completed: Boolean
due: Time
}
input UpdateTaskInput {
taskID: ID!
title: String
notes: String
completed: Boolean
due: Time
}
code:page.graphql
type PageInfo { // startCursor, hasPreviousPageは不要なので入れてない
endCursor: String!
hasNextPage: Boolean!
}
interface Connection {
pageInfo: PageInfo!
}
interface Edge {
cursor: String!
node: Node!
}
interface Node {
id: ID!
}
input PaginationInput { // last, before は不要なのでいれてない
first: Int
after: String
}