1
0
Fork 0
mirror of https://github.com/kou029w/_.git synced 2025-01-31 06:18:07 +00:00

create nexus-with-prisma

This commit is contained in:
Nebel 2020-10-08 15:36:55 +09:00
parent f44b75c613
commit fbc5a580bc
8 changed files with 2124 additions and 0 deletions

10
nexus-with-prisma/.gitignore vendored Normal file
View file

@ -0,0 +1,10 @@
# Node
node_modules
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
migrations
.nexus
db.sqlite
build

View file

@ -0,0 +1,24 @@
# Nexus Example With Prisma
This example shows how to use Nexus with [Prisma](https://prisma.io) without the [Prisma plugin for Nexus](https://nxs.li/plugins/prisma). This approach is lower-level and here for reference reasons. Generally, you would want to use the Prisma plugin.
### Try It
```
npm install
npx prisma generate
npx prisma migrate save --experimental
npx prisma migrate up --experimental
```
Terminal 1
```
npm run dev
```
Terminal 2
```
npm run dev:typecheck
```

View file

@ -0,0 +1,12 @@
### This file was generated by Nexus Schema
### Do not make changes to this file directly
type Query {
users(world: String): [User!]!
}
type User {
id: ID!
name: String
}

62
nexus-with-prisma/api.ts Normal file
View file

@ -0,0 +1,62 @@
import { makeSchema, objectType, queryType, stringArg } from '@nexus/schema'
import { PrismaClient } from '@prisma/client'
import { ApolloServer } from 'apollo-server-express'
import express from 'express'
import * as path from 'path'
const prisma = new PrismaClient()
const apollo = new ApolloServer({
context: () => ({ prisma }),
schema: makeSchema({
typegenAutoConfig: {
contextType: '{ prisma: PrismaClient.PrismaClient }',
sources: [{ source: '.prisma/client', alias: 'PrismaClient' }],
},
outputs: {
typegen: path.join(
__dirname,
'node_modules/@types/nexus-typegen/index.d.ts',
),
schema: path.join(__dirname, './api.graphql'),
},
shouldExitAfterGenerateArtifacts: Boolean(
process.env.NEXUS_SHOULD_EXIT_AFTER_REFLECTION,
),
types: [
objectType({
name: 'User',
definition(t) {
t.id('id')
t.string('name', {
nullable: true,
resolve(parent) {
return parent.name
},
})
},
}),
queryType({
definition(t) {
t.list.field('users', {
type: 'User',
args: {
world: stringArg({ required: false }),
},
resolve(_root, _args, ctx) {
return ctx.prisma.user.findMany()
},
})
},
}),
],
}),
})
const app = express()
apollo.applyMiddleware({ app })
app.listen(4000, () => {
console.log(`🚀 GraphQL service ready at http://localhost:4000/graphql`)
})

View file

@ -0,0 +1,32 @@
{
"name": "with-prisma",
"version": "0.0.0",
"license": "UNLICENSED",
"scripts": {
"build": "yarn build:reflection && tsc",
"build:reflection": "NEXUS_SHOULD_EXIT_AFTER_REFLECTION=true ts-node api",
"dev": "ts-node-dev --transpile-only api",
"dev:migrate": "prisma migrate save --experimental -c && prisma migrate up --experimental -c",
"dev:typecheck": "tsc --watch --noEmit",
"format": "npx prettier --write './**/*.{ts,md}'",
"start": "NODE_ENV=production node .nexus/build"
},
"prettier": {
"semi": false,
"singleQuote": true,
"trailingComma": "all"
},
"dependencies": {
"@nexus/schema": "^0.15.0",
"@prisma/client": "2.3.0",
"apollo-server-express": "^2.17.0",
"express": "^4.17.1",
"graphql": "^15.3.0"
},
"devDependencies": {
"@prisma/cli": "^2.3.0",
"prettier": "2.0.5",
"ts-node-dev": "^1.0.0-pre.62",
"typescript": "^4.0.2"
}
}

View file

@ -0,0 +1,45 @@
datasource db {
provider = "sqlite"
url = "file:db.sqlite"
}
generator prisma_client_js {
provider = "prisma-client-js"
}
model Blog {
id Int @default(autoincrement()) @id
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
name String
viewCount Int @default(0)
posts Post[]
authors User[]
}
model User {
id Int @default(autoincrement()) @id
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
name String?
posts Post[]
blogId Int?
blog Blog? @relation(fields: [blogId], references: [id])
rating Float
}
model Post {
id Int @default(autoincrement()) @id
title String
tags Tag[] @relation(references: [id])
blogId Int?
blog Blog? @relation(fields: [blogId], references: [id])
User User? @relation(fields: [userId], references: [id])
userId Int?
}
model Tag {
id Int @default(autoincrement()) @id
label String
posts Post[] @relation(references: [id])
}

View file

@ -0,0 +1,11 @@
{
"compilerOptions": {
"skipLibCheck": true,
"esModuleInterop": true,
"target": "es2018",
"module": "commonjs",
"strict": true,
"outDir": "build",
"rootDir": "."
}
}

1928
nexus-with-prisma/yarn.lock Normal file

File diff suppressed because it is too large Load diff