Skip to content

Commit b0fc33e

Browse files
committed
wip
1 parent 94575ff commit b0fc33e

39 files changed

+934
-19
lines changed

graphql-codegen-joist.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
const mappers = { Author: "src/entities#Author", Book: "src/entities#Book" };
1+
const mappers = {
2+
Author: "src/entities#Author",
3+
Book: "src/entities#Book",
4+
BookReview: "src/entities#BookReview",
5+
Reviewer: "src/entities#Reviewer",
6+
};
27

38
const enumValues = {};
49

joist-config.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
{
22
"codegenPlugins": ["joist-graphql-codegen"],
3-
"entities": { "Author": { "tag": "a" }, "Book": { "tag": "b" } },
3+
"entities": {
4+
"Author": { "fields": { "numberOfReviews": { "derived": "async" } }, "tag": "a" },
5+
"Book": { "tag": "b" },
6+
"BookReview": { "tag": "br" },
7+
"Reviewer": { "tag": "r" }
8+
},
49
"entitiesDirectory": "./src/entities"
510
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { MigrationBuilder } from "node-pg-migrate";
2+
import { createEntityTable, foreignKey } from "joist-migration-utils";
3+
4+
export async function up(b: MigrationBuilder): Promise<void> {
5+
// Add book reviews
6+
createEntityTable(b, "book_reviews", {
7+
book_id: foreignKey("books", { notNull: true }),
8+
rating: { type: "integer", notNull: true },
9+
});
10+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { MigrationBuilder } from "node-pg-migrate";
2+
import { createEntityTable, addColumns, foreignKey } from "joist-migration-utils";
3+
4+
export async function up(b: MigrationBuilder): Promise<void> {
5+
// Keep track of who is making reviews
6+
createEntityTable(b, "reviewers", {
7+
name: { type: "text", notNull: true },
8+
age: { type: "integer", notNull: true },
9+
});
10+
// Assume we don't have any reviews in the database yet
11+
addColumns(b, "book_reviews", {
12+
reviewer_id: foreignKey("reviewers", { notNull: true }),
13+
});
14+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { MigrationBuilder } from "node-pg-migrate";
2+
import { addColumns } from "joist-migration-utils";
3+
4+
export async function up(b: MigrationBuilder): Promise<void> {
5+
// Given the datalake easy access to our business logic
6+
addColumns(b, "authors", {
7+
number_of_reviews: { type: "int", notNull: true, default: 0 },
8+
});
9+
}

schema/.history.json

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
{
2-
"Author": ["books", "createdAt", "firstName", "id", "lastName", "updatedAt"],
3-
"Book": ["author", "createdAt", "id", "title", "updatedAt"],
4-
"Mutation": ["saveAuthor", "saveBook"],
5-
"SaveAuthorInput": ["firstName", "id", "lastName"],
2+
"Author": ["books", "createdAt", "firstName", "id", "lastName", "numberOfReviews", "updatedAt"],
3+
"Book": ["author", "createdAt", "id", "reviews", "title", "updatedAt"],
4+
"BookReview": ["book", "createdAt", "id", "rating", "reviewer", "updatedAt"],
5+
"Mutation": ["saveAuthor", "saveBook", "saveBookReview", "saveReviewer"],
6+
"Reviewer": ["age", "bookReviews", "createdAt", "id", "name", "updatedAt"],
7+
"SaveAuthorInput": ["firstName", "id", "lastName", "numberOfReviews"],
68
"SaveAuthorResult": ["author"],
79
"SaveBookInput": ["authorId", "id", "title"],
8-
"SaveBookResult": ["book"]
10+
"SaveBookResult": ["book"],
11+
"SaveBookReviewInput": ["bookId", "id", "rating", "reviewerId"],
12+
"SaveBookReviewResult": ["bookReview"],
13+
"SaveReviewerInput": ["age", "id", "name"],
14+
"SaveReviewerResult": ["reviewer"]
915
}

schema/author.graphql

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
extend type Query {
2+
authors: [Author!]!
23
author(id: ID!): Author!
34
}
45

@@ -12,12 +13,15 @@ type Author {
1213
firstName: String!
1314
lastName: String
1415
books: [Book!]!
16+
publicReviews: [BookReview!]!
17+
numberOfReviews: Int!
1518
}
1619

1720
input SaveAuthorInput {
1821
id: ID
1922
firstName: String
2023
lastName: String
24+
numberOfReviews: Int
2125
}
2226

2327
type SaveAuthorResult {

schema/book.graphql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ type Book {
66
id: ID!
77
title: String!
88
author: Author!
9+
reviews: [BookReview!]!
910
}
1011

1112
input SaveBookInput {

schema/bookReview.graphql

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
extend type Mutation {
2+
saveBookReview(input: SaveBookReviewInput!): SaveBookReviewResult!
3+
}
4+
5+
type BookReview {
6+
id: ID!
7+
rating: Int!
8+
book: Book!
9+
reviewer: Reviewer!
10+
isPublic: Boolean!
11+
}
12+
13+
input SaveBookReviewInput {
14+
id: ID
15+
rating: Int
16+
bookId: ID
17+
reviewerId: ID
18+
}
19+
20+
type SaveBookReviewResult {
21+
bookReview: BookReview!
22+
}

schema/reviewer.graphql

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
extend type Mutation {
2+
saveReviewer(input: SaveReviewerInput!): SaveReviewerResult!
3+
}
4+
5+
type Reviewer {
6+
id: ID!
7+
name: String!
8+
age: Int!
9+
bookReviews: [BookReview!]!
10+
}
11+
12+
input SaveReviewerInput {
13+
id: ID
14+
name: String
15+
age: Int
16+
}
17+
18+
type SaveReviewerResult {
19+
reviewer: Reviewer!
20+
}

0 commit comments

Comments
 (0)