From be2e559602d59efb2f003d207a787ca70922840c Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 10 Dec 2024 19:02:18 -0500 Subject: [PATCH 1/8] split up files --- src/lib/pothos/builder.ts | 24 +++++++++++++++ src/lib/pothos/index.ts | 64 +-------------------------------------- src/lib/pothos/schema.ts | 41 +++++++++++++++++++++++++ src/lib/yoga/index.ts | 16 ++-------- src/lib/yoga/server.ts | 14 +++++++++ 5 files changed, 82 insertions(+), 77 deletions(-) create mode 100644 src/lib/pothos/builder.ts create mode 100644 src/lib/pothos/schema.ts create mode 100644 src/lib/yoga/server.ts diff --git a/src/lib/pothos/builder.ts b/src/lib/pothos/builder.ts new file mode 100644 index 0000000..1428ea6 --- /dev/null +++ b/src/lib/pothos/builder.ts @@ -0,0 +1,24 @@ +import { prisma } from '$lib/prisma'; +import type { Context } from '$lib/yoga'; +import SchemaBuilder from '@pothos/core'; +import PrismaPlugin, { type PrismaTypesFromClient } from '@pothos/plugin-prisma'; + +type ContextType = ReturnType; + +export const builder = new SchemaBuilder<{ + Context: ContextType; + PrismaTypes: PrismaTypesFromClient; +}>({ + plugins: [PrismaPlugin], + prisma: { + client: prisma, + // defaults to false, uses /// comments from prisma schema as descriptions + // for object types, relations and exposed fields. + // descriptions can be omitted by setting description to false + exposeDescriptions: false, + // use where clause from prismaRelatedConnection for totalCount (defaults to true) + filterConnectionTotalCount: true, + // warn when not using a query parameter correctly + onUnusedQuery: process.env.NODE_ENV === 'production' ? null : 'warn' + } +}); \ No newline at end of file diff --git a/src/lib/pothos/index.ts b/src/lib/pothos/index.ts index c8ee3d6..d6bd62d 100644 --- a/src/lib/pothos/index.ts +++ b/src/lib/pothos/index.ts @@ -1,65 +1,3 @@ -import { prisma } from '$lib/prisma'; -import { Context } from '$lib/yoga/context'; -import SchemaBuilder from '@pothos/core'; -import PrismaPlugin, { type PrismaTypesFromClient } from '@pothos/plugin-prisma'; - -type ContextType = ReturnType; - -export const builder = new SchemaBuilder<{ - Context: ContextType; - PrismaTypes: PrismaTypesFromClient; -}>({ - plugins: [PrismaPlugin], - prisma: { - client: prisma, - // defaults to false, uses /// comments from prisma schema as descriptions - // for object types, relations and exposed fields. - // descriptions can be omitted by setting description to false - exposeDescriptions: false, - // use where clause from prismaRelatedConnection for totalCount (defaults to true) - filterConnectionTotalCount: true, - // warn when not using a query parameter correctly - onUnusedQuery: process.env.NODE_ENV === 'production' ? null : 'warn' - } -}); - -const User = builder.prismaObject('User', { - fields: (t) => ({ - id: t.exposeID('id'), - email: t.exposeString('email'), - name: t.exposeString('name'), - posts: t.relation('posts') - }) -}); - -const Post = builder.prismaObject('Post', { - fields: (t) => ({ - id: t.exposeID('id'), - title: t.exposeString('title'), - content: t.exposeString('content'), - published: t.exposeBoolean('published'), - author: t.relation('author') - }) -}); - -builder.queryType({ - fields: (t) => ({ - version: t.string({ - resolve: (parent, args, context) => context.config.app_version - }), - users: t.prismaField({ - type: [User], - resolve: async () => { - return await prisma.user.findMany(); - } - }), - posts: t.prismaField({ - type: [Post], - resolve: async () => { - return await prisma.post.findMany(); - } - }) - }) -}); +import { builder } from './builder'; export const Schema = builder.toSchema(); \ No newline at end of file diff --git a/src/lib/pothos/schema.ts b/src/lib/pothos/schema.ts new file mode 100644 index 0000000..4abddae --- /dev/null +++ b/src/lib/pothos/schema.ts @@ -0,0 +1,41 @@ +import { prisma } from '$lib/prisma'; +import { builder } from './builder'; + +const User = builder.prismaObject('User', { + fields: (t) => ({ + id: t.exposeID('id'), + email: t.exposeString('email'), + name: t.exposeString('name'), + posts: t.relation('posts') + }) +}); + +const Post = builder.prismaObject('Post', { + fields: (t) => ({ + id: t.exposeID('id'), + title: t.exposeString('title'), + content: t.exposeString('content'), + published: t.exposeBoolean('published'), + author: t.relation('author') + }) +}); + +builder.queryType({ + fields: (t) => ({ + version: t.string({ + resolve: (parent, args, context) => context.config.app_version + }), + users: t.prismaField({ + type: [User], + resolve: async () => { + return await prisma.user.findMany(); + } + }), + posts: t.prismaField({ + type: [Post], + resolve: async () => { + return await prisma.post.findMany(); + } + }) + }) +}); \ No newline at end of file diff --git a/src/lib/yoga/index.ts b/src/lib/yoga/index.ts index b008b24..b489ffb 100644 --- a/src/lib/yoga/index.ts +++ b/src/lib/yoga/index.ts @@ -1,14 +1,2 @@ -import { yogaLogger } from '$lib/logger'; -import { Schema } from '$lib/pothos'; -import type { RequestEvent } from '@sveltejs/kit'; -import { createYoga } from 'graphql-yoga'; -import { Context } from './context'; - -export const Yoga = createYoga({ - context: Context, - schema: Schema, - graphqlEndpoint: '/api/graphql', - // Let Yoga use sveltekit's Response object - fetchAPI: { Response }, - logging: yogaLogger -}); \ No newline at end of file +export * from './context'; +export * from './server'; \ No newline at end of file diff --git a/src/lib/yoga/server.ts b/src/lib/yoga/server.ts new file mode 100644 index 0000000..b008b24 --- /dev/null +++ b/src/lib/yoga/server.ts @@ -0,0 +1,14 @@ +import { yogaLogger } from '$lib/logger'; +import { Schema } from '$lib/pothos'; +import type { RequestEvent } from '@sveltejs/kit'; +import { createYoga } from 'graphql-yoga'; +import { Context } from './context'; + +export const Yoga = createYoga({ + context: Context, + schema: Schema, + graphqlEndpoint: '/api/graphql', + // Let Yoga use sveltekit's Response object + fetchAPI: { Response }, + logging: yogaLogger +}); \ No newline at end of file -- 2.45.3 From fec67a55c7d518cd58335526bd3c1123483442a9 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 10 Dec 2024 21:31:42 -0500 Subject: [PATCH 2/8] timestamps, scalars and dayjs --- bun.lockb | Bin 242029 -> 242377 bytes package.json | 1 + prisma/schema.prisma | 18 +++++++++++------- src/lib/pothos/Scalars/Date.ts | 15 +++++++++++++++ src/lib/pothos/Scalars/index.ts | 10 ++++++++++ src/lib/pothos/builder.ts | 12 +++++++----- 6 files changed, 44 insertions(+), 12 deletions(-) create mode 100644 src/lib/pothos/Scalars/Date.ts create mode 100644 src/lib/pothos/Scalars/index.ts diff --git a/bun.lockb b/bun.lockb index 37b9108af1670ffd7e70c9ae4e7c8cd7895e85c6..925d1b3e720c974bb424c26e2ca45fd48a5493bc 100755 GIT binary patch delta 35156 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 diff --git a/package.json b/package.json index 87c7b5f..c7b7b1a 100644 --- a/package.json +++ b/package.json @@ -55,6 +55,7 @@ "@prisma/client": "6.0.1", "@tailwindcss/typography": "^0.5.15", "@types/bun": "^1.1.14", + "dayjs": "^1.11.13", "graphql": "^16.9.0", "graphql-yoga": "^5.10.4", "pino": "^9.5.0", diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0cd53f5..6449cf2 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -15,17 +15,21 @@ datasource db { } model User { - id Int @id @default(autoincrement()) - email String @unique - name String? - posts Post[] + id Int @id @default(autoincrement()) + email String @unique + name String? + posts Post[] + createdAt DateTime + updatedAt DateTime } model Post { - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) title String content String? - published Boolean @default(false) - author User @relation(fields: [authorId], references: [id]) + published Boolean @default(false) + author User @relation(fields: [authorId], references: [id]) authorId Int + createdAt DateTime + updatedAt DateTime } \ No newline at end of file diff --git a/src/lib/pothos/Scalars/Date.ts b/src/lib/pothos/Scalars/Date.ts new file mode 100644 index 0000000..298596f --- /dev/null +++ b/src/lib/pothos/Scalars/Date.ts @@ -0,0 +1,15 @@ +import dayjs from 'dayjs'; +import { builder } from '../builder'; + +export const Date = builder.scalarType('Date', { + description: 'Date Scalar in ISO format', + serialize: (t) => { + return t.toISOString(); + }, + parseValue: (date) => { + if (typeof date !== 'string') { + throw new Error('Cyka blyat'); + } + return dayjs(date); + } +}); \ No newline at end of file diff --git a/src/lib/pothos/Scalars/index.ts b/src/lib/pothos/Scalars/index.ts new file mode 100644 index 0000000..521b166 --- /dev/null +++ b/src/lib/pothos/Scalars/index.ts @@ -0,0 +1,10 @@ +import type { Dayjs } from 'dayjs'; + +export * from './Date'; + +export type Scalars = { + Date: { + Input: Dayjs; + Output: Dayjs; + }; +}; \ No newline at end of file diff --git a/src/lib/pothos/builder.ts b/src/lib/pothos/builder.ts index 1428ea6..c8e2d3c 100644 --- a/src/lib/pothos/builder.ts +++ b/src/lib/pothos/builder.ts @@ -2,13 +2,15 @@ import { prisma } from '$lib/prisma'; import type { Context } from '$lib/yoga'; import SchemaBuilder from '@pothos/core'; import PrismaPlugin, { type PrismaTypesFromClient } from '@pothos/plugin-prisma'; +import type { Scalars } from './Scalars'; -type ContextType = ReturnType; - -export const builder = new SchemaBuilder<{ - Context: ContextType; +type PothosType = { + Context: ReturnType; PrismaTypes: PrismaTypesFromClient; -}>({ + Scalars: Scalars; +}; + +export const builder = new SchemaBuilder({ plugins: [PrismaPlugin], prisma: { client: prisma, -- 2.45.3 From ac65c09fc5222d6195f24d3c30008e9240fd06b1 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 10 Dec 2024 22:12:09 -0500 Subject: [PATCH 3/8] lib server directory --- src/lib/{ => server}/config/index.ts | 2 +- src/lib/{ => server}/logger/index.ts | 0 src/lib/{ => server}/pothos/Scalars/Date.ts | 0 src/lib/{ => server}/pothos/Scalars/index.ts | 0 src/lib/{ => server}/pothos/builder.ts | 4 ++-- src/lib/{ => server}/pothos/index.ts | 0 src/lib/{ => server}/pothos/schema.ts | 2 +- src/lib/{ => server}/prisma/index.ts | 0 src/lib/{ => server}/yoga/context.ts | 0 src/lib/{ => server}/yoga/index.ts | 0 src/lib/{ => server}/yoga/server.ts | 4 ++-- src/routes/api/graphql/+server.ts | 2 +- 12 files changed, 7 insertions(+), 7 deletions(-) rename src/lib/{ => server}/config/index.ts (90%) rename src/lib/{ => server}/logger/index.ts (100%) rename src/lib/{ => server}/pothos/Scalars/Date.ts (100%) rename src/lib/{ => server}/pothos/Scalars/index.ts (100%) rename src/lib/{ => server}/pothos/builder.ts (90%) rename src/lib/{ => server}/pothos/index.ts (100%) rename src/lib/{ => server}/pothos/schema.ts (94%) rename src/lib/{ => server}/prisma/index.ts (100%) rename src/lib/{ => server}/yoga/context.ts (100%) rename src/lib/{ => server}/yoga/index.ts (100%) rename src/lib/{ => server}/yoga/server.ts (78%) diff --git a/src/lib/config/index.ts b/src/lib/server/config/index.ts similarity index 90% rename from src/lib/config/index.ts rename to src/lib/server/config/index.ts index b87d270..b7dcdbe 100644 --- a/src/lib/config/index.ts +++ b/src/lib/server/config/index.ts @@ -1,4 +1,4 @@ -import { logger } from '$lib/logger'; +import { logger } from '$lib/server/logger'; import { z } from 'zod'; export interface Configuration { diff --git a/src/lib/logger/index.ts b/src/lib/server/logger/index.ts similarity index 100% rename from src/lib/logger/index.ts rename to src/lib/server/logger/index.ts diff --git a/src/lib/pothos/Scalars/Date.ts b/src/lib/server/pothos/Scalars/Date.ts similarity index 100% rename from src/lib/pothos/Scalars/Date.ts rename to src/lib/server/pothos/Scalars/Date.ts diff --git a/src/lib/pothos/Scalars/index.ts b/src/lib/server/pothos/Scalars/index.ts similarity index 100% rename from src/lib/pothos/Scalars/index.ts rename to src/lib/server/pothos/Scalars/index.ts diff --git a/src/lib/pothos/builder.ts b/src/lib/server/pothos/builder.ts similarity index 90% rename from src/lib/pothos/builder.ts rename to src/lib/server/pothos/builder.ts index c8e2d3c..fe450fa 100644 --- a/src/lib/pothos/builder.ts +++ b/src/lib/server/pothos/builder.ts @@ -1,5 +1,5 @@ -import { prisma } from '$lib/prisma'; -import type { Context } from '$lib/yoga'; +import { prisma } from '$lib/server/prisma'; +import type { Context } from '$lib/server/yoga'; import SchemaBuilder from '@pothos/core'; import PrismaPlugin, { type PrismaTypesFromClient } from '@pothos/plugin-prisma'; import type { Scalars } from './Scalars'; diff --git a/src/lib/pothos/index.ts b/src/lib/server/pothos/index.ts similarity index 100% rename from src/lib/pothos/index.ts rename to src/lib/server/pothos/index.ts diff --git a/src/lib/pothos/schema.ts b/src/lib/server/pothos/schema.ts similarity index 94% rename from src/lib/pothos/schema.ts rename to src/lib/server/pothos/schema.ts index 4abddae..2b06918 100644 --- a/src/lib/pothos/schema.ts +++ b/src/lib/server/pothos/schema.ts @@ -1,4 +1,4 @@ -import { prisma } from '$lib/prisma'; +import { prisma } from '$lib/server/prisma'; import { builder } from './builder'; const User = builder.prismaObject('User', { diff --git a/src/lib/prisma/index.ts b/src/lib/server/prisma/index.ts similarity index 100% rename from src/lib/prisma/index.ts rename to src/lib/server/prisma/index.ts diff --git a/src/lib/yoga/context.ts b/src/lib/server/yoga/context.ts similarity index 100% rename from src/lib/yoga/context.ts rename to src/lib/server/yoga/context.ts diff --git a/src/lib/yoga/index.ts b/src/lib/server/yoga/index.ts similarity index 100% rename from src/lib/yoga/index.ts rename to src/lib/server/yoga/index.ts diff --git a/src/lib/yoga/server.ts b/src/lib/server/yoga/server.ts similarity index 78% rename from src/lib/yoga/server.ts rename to src/lib/server/yoga/server.ts index b008b24..4bdfbe6 100644 --- a/src/lib/yoga/server.ts +++ b/src/lib/server/yoga/server.ts @@ -1,5 +1,5 @@ -import { yogaLogger } from '$lib/logger'; -import { Schema } from '$lib/pothos'; +import { yogaLogger } from '$lib/server/logger'; +import { Schema } from '$lib/server/pothos'; import type { RequestEvent } from '@sveltejs/kit'; import { createYoga } from 'graphql-yoga'; import { Context } from './context'; diff --git a/src/routes/api/graphql/+server.ts b/src/routes/api/graphql/+server.ts index 72aab8c..c208143 100644 --- a/src/routes/api/graphql/+server.ts +++ b/src/routes/api/graphql/+server.ts @@ -1,3 +1,3 @@ -import { Yoga } from '$lib/yoga'; +import { Yoga } from '$lib/server/yoga'; export { Yoga as GET, Yoga as POST }; \ No newline at end of file -- 2.45.3 From 6d31714e4dd27893a73a5068e55abfaac00e6bed Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 10 Dec 2024 23:06:40 -0500 Subject: [PATCH 4/8] move bun types to dev --- bun.lockb | Bin 242377 -> 242377 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 925d1b3e720c974bb424c26e2ca45fd48a5493bc..18a22e1faa9661a741ca165c87a9133c2848c3c7 100755 GIT binary patch delta 24811 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 o*DV$)@4OH-n+a delta 24975 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 diff --git a/package.json b/package.json index c7b7b1a..36c66fd 100644 --- a/package.json +++ b/package.json @@ -31,6 +31,7 @@ "@sveltejs/adapter-auto": "^3.0.0", "@sveltejs/kit": "^2.9.0", "@sveltejs/vite-plugin-svelte": "^5.0.0", + "@types/bun": "^1.1.14", "autoprefixer": "^10.4.20", "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", @@ -54,7 +55,6 @@ "@pothos/plugin-prisma": "^4.4.0", "@prisma/client": "6.0.1", "@tailwindcss/typography": "^0.5.15", - "@types/bun": "^1.1.14", "dayjs": "^1.11.13", "graphql": "^16.9.0", "graphql-yoga": "^5.10.4", -- 2.45.3 From 084faf12f90871fb650d0154f430fc806942f5d3 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Tue, 10 Dec 2024 23:07:43 -0500 Subject: [PATCH 5/8] move storybook dark mode to dev --- bun.lockb | Bin 242377 -> 242377 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index 18a22e1faa9661a741ca165c87a9133c2848c3c7..f9ae40a93c4a7807691bb9975c3a33a8f521f2e5 100755 GIT binary patch delta 34888 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 delta 34782 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 D0KzkP diff --git a/package.json b/package.json index 36c66fd..054f9cf 100644 --- a/package.json +++ b/package.json @@ -42,6 +42,7 @@ "prettier-plugin-tailwindcss": "^0.6.5", "prisma": "^6.0.1", "storybook": "^8.4.7", + "storybook-dark-mode": "^4.0.2", "svelte": "^5.0.0", "svelte-check": "^4.0.0", "tailwindcss": "^3.4.9", @@ -60,7 +61,6 @@ "graphql-yoga": "^5.10.4", "pino": "^9.5.0", "pino-pretty": "^13.0.0", - "storybook-dark-mode": "^4.0.2", "zod": "^3.24.0" } } \ No newline at end of file -- 2.45.3 From 77142e4df582d66c6f45b4ba3c5023a65d50480e Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Wed, 11 Dec 2024 08:41:36 -0500 Subject: [PATCH 6/8] got timestamps working --- prisma/schema.prisma | 8 ++++---- src/lib/server/pothos/Scalars/Date.ts | 9 ++++----- src/lib/server/pothos/Scalars/index.ts | 6 ++---- src/lib/server/pothos/schema.ts | 16 ++++++++++++++-- 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6449cf2..8160664 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -19,8 +19,8 @@ model User { email String @unique name String? posts Post[] - createdAt DateTime - updatedAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt } model Post { @@ -30,6 +30,6 @@ model Post { published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int - createdAt DateTime - updatedAt DateTime + createdAt DateTime @default(now()) + updatedAt DateTime @default(now()) @updatedAt } \ No newline at end of file diff --git a/src/lib/server/pothos/Scalars/Date.ts b/src/lib/server/pothos/Scalars/Date.ts index 298596f..6d61571 100644 --- a/src/lib/server/pothos/Scalars/Date.ts +++ b/src/lib/server/pothos/Scalars/Date.ts @@ -1,15 +1,14 @@ -import dayjs from 'dayjs'; import { builder } from '../builder'; -export const Date = builder.scalarType('Date', { +export const DateScalar = builder.scalarType('Date', { description: 'Date Scalar in ISO format', - serialize: (t) => { - return t.toISOString(); + serialize: (date) => { + return date.toISOString(); }, parseValue: (date) => { if (typeof date !== 'string') { throw new Error('Cyka blyat'); } - return dayjs(date); + return new Date(date); } }); \ No newline at end of file diff --git a/src/lib/server/pothos/Scalars/index.ts b/src/lib/server/pothos/Scalars/index.ts index 521b166..0751f41 100644 --- a/src/lib/server/pothos/Scalars/index.ts +++ b/src/lib/server/pothos/Scalars/index.ts @@ -1,10 +1,8 @@ -import type { Dayjs } from 'dayjs'; - export * from './Date'; export type Scalars = { Date: { - Input: Dayjs; - Output: Dayjs; + Input: Date; + Output: Date; }; }; \ No newline at end of file diff --git a/src/lib/server/pothos/schema.ts b/src/lib/server/pothos/schema.ts index 2b06918..0789677 100644 --- a/src/lib/server/pothos/schema.ts +++ b/src/lib/server/pothos/schema.ts @@ -6,7 +6,13 @@ const User = builder.prismaObject('User', { id: t.exposeID('id'), email: t.exposeString('email'), name: t.exposeString('name'), - posts: t.relation('posts') + posts: t.relation('posts'), + createdAt: t.expose('createdAt', { + type: 'Date' + }), + updatedAt: t.expose('updatedAt', { + type: 'Date' + }) }) }); @@ -16,7 +22,13 @@ const Post = builder.prismaObject('Post', { title: t.exposeString('title'), content: t.exposeString('content'), published: t.exposeBoolean('published'), - author: t.relation('author') + author: t.relation('author'), + createdAt: t.expose('createdAt', { + type: 'Date' + }), + updatedAt: t.expose('updatedAt', { + type: 'Date' + }) }) }); -- 2.45.3 From 95d4e229e6f2bec5d1f88b425e7da48fa0fc5293 Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Wed, 11 Dec 2024 13:39:18 -0500 Subject: [PATCH 7/8] fix reference --- src/lib/server/yoga/context.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/server/yoga/context.ts b/src/lib/server/yoga/context.ts index d9a6a68..8a3ab51 100644 --- a/src/lib/server/yoga/context.ts +++ b/src/lib/server/yoga/context.ts @@ -1,4 +1,4 @@ -import { Config } from '$lib/config'; +import { Config } from '$lib/server/config'; import type { YogaInitialContext } from 'graphql-yoga'; export const Context = (initialContext: YogaInitialContext) => ({ -- 2.45.3 From 2e1d0b2b5efad43c1b2bfab08c188c07870fd5af Mon Sep 17 00:00:00 2001 From: Benjamin Palko Date: Wed, 11 Dec 2024 15:26:24 -0500 Subject: [PATCH 8/8] separate schema into files and add mutations --- prisma/dev.db | Bin 28672 -> 32768 bytes prisma/dev.db-journal | Bin 8720 -> 0 bytes .../migration.sql | 37 ++++++ prisma/schema.prisma | 10 +- src/lib/server/pothos/builder.ts | 4 +- src/lib/server/pothos/index.ts | 4 +- src/lib/server/pothos/schema.ts | 53 --------- .../pothos/{ => schema}/Scalars/Date.ts | 2 +- .../pothos/{ => schema}/Scalars/index.ts | 0 src/lib/server/pothos/schema/index.ts | 18 +++ src/lib/server/pothos/schema/posts.ts | 110 ++++++++++++++++++ src/lib/server/pothos/schema/users.ts | 83 +++++++++++++ 12 files changed, 258 insertions(+), 63 deletions(-) delete mode 100644 prisma/dev.db-journal create mode 100644 prisma/migrations/20241211200947_add_timestamps/migration.sql delete mode 100644 src/lib/server/pothos/schema.ts rename src/lib/server/pothos/{ => schema}/Scalars/Date.ts (87%) rename src/lib/server/pothos/{ => schema}/Scalars/index.ts (100%) create mode 100644 src/lib/server/pothos/schema/index.ts create mode 100644 src/lib/server/pothos/schema/posts.ts create mode 100644 src/lib/server/pothos/schema/users.ts diff --git a/prisma/dev.db b/prisma/dev.db index 14dfc1187da260604e354d3f3987a255b013567c..78861349513cb8604672483db113172bbcab8ee6 100644 GIT binary patch delta 989 zcmc&yJ#5oJ6h1qDcAVrIAc{m4)fg%owP|g~&d*fRHnbIK616cuLJ*y6TZATYl(|1M4^z&X7c8YPh4ddn<_F?C1Wu3 zRHl?I&CX@%e4#|=rCg4l%AU_ixe`4o&Ch4^rLrAeC}rk~BVO7%%yL8d=gX6Y{6fjx z@U^`DX+T6n*j>qMW+*9=Bi-TCAxy8-6?H{wsm*dlDKDvaY}IL&sgq+po1qJNnz6mi z5K~c@=!Tm(oIzVZoPiy&$!(VXSA9o_>!_wO=Ep#2^*=n^8!bBB;o)KIih<0Zz8NR{ z0UmWO_}}0J9_Rwt2y{Eaz7K)b^)T+0*8Q$&09+)JSuu@xF(xKCEhfZKDwY-$F2->j z%W6nt6*iTWwWJp3M3jhgNtEK`cuGtr#I&FaikeEZaXyU_yr5`;s3v$8@rsT=0y{U)ka>gNm#@#vynn>cdNMO0nVZTvfL zd%TBW55PU(v|4?J11B6~esKv1vrVq!teE_tQ;NgSKSaSV)W>JC z1efXL<6IS!zw!jJH1aUBZ}#Th$;8IUU%&icOf@r diff --git a/prisma/dev.db-journal b/prisma/dev.db-journal deleted file mode 100644 index be0024efeb2a325009d71b5f0c2fb3a1a4e8d1c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8720 zcmeI$F$w}P5CzbzAfg~zcmW%`g_+DGn|Kdv$!@Z+jg{DnXYeFe9?r(aGgt`z&(t6O zE5{h*&jlvS5ujRK%y; @@ -10,6 +10,8 @@ type PothosType = { Scalars: Scalars; }; +SchemaBuilder.allowPluginReRegistration = true; + export const builder = new SchemaBuilder({ plugins: [PrismaPlugin], prisma: { diff --git a/src/lib/server/pothos/index.ts b/src/lib/server/pothos/index.ts index d6bd62d..5d5aa13 100644 --- a/src/lib/server/pothos/index.ts +++ b/src/lib/server/pothos/index.ts @@ -1,3 +1 @@ -import { builder } from './builder'; - -export const Schema = builder.toSchema(); \ No newline at end of file +export * from './schema'; \ No newline at end of file diff --git a/src/lib/server/pothos/schema.ts b/src/lib/server/pothos/schema.ts deleted file mode 100644 index 0789677..0000000 --- a/src/lib/server/pothos/schema.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { prisma } from '$lib/server/prisma'; -import { builder } from './builder'; - -const User = builder.prismaObject('User', { - fields: (t) => ({ - id: t.exposeID('id'), - email: t.exposeString('email'), - name: t.exposeString('name'), - posts: t.relation('posts'), - createdAt: t.expose('createdAt', { - type: 'Date' - }), - updatedAt: t.expose('updatedAt', { - type: 'Date' - }) - }) -}); - -const Post = builder.prismaObject('Post', { - fields: (t) => ({ - id: t.exposeID('id'), - title: t.exposeString('title'), - content: t.exposeString('content'), - published: t.exposeBoolean('published'), - author: t.relation('author'), - createdAt: t.expose('createdAt', { - type: 'Date' - }), - updatedAt: t.expose('updatedAt', { - type: 'Date' - }) - }) -}); - -builder.queryType({ - fields: (t) => ({ - version: t.string({ - resolve: (parent, args, context) => context.config.app_version - }), - users: t.prismaField({ - type: [User], - resolve: async () => { - return await prisma.user.findMany(); - } - }), - posts: t.prismaField({ - type: [Post], - resolve: async () => { - return await prisma.post.findMany(); - } - }) - }) -}); \ No newline at end of file diff --git a/src/lib/server/pothos/Scalars/Date.ts b/src/lib/server/pothos/schema/Scalars/Date.ts similarity index 87% rename from src/lib/server/pothos/Scalars/Date.ts rename to src/lib/server/pothos/schema/Scalars/Date.ts index 6d61571..6573f0a 100644 --- a/src/lib/server/pothos/Scalars/Date.ts +++ b/src/lib/server/pothos/schema/Scalars/Date.ts @@ -1,4 +1,4 @@ -import { builder } from '../builder'; +import { builder } from '../../builder'; export const DateScalar = builder.scalarType('Date', { description: 'Date Scalar in ISO format', diff --git a/src/lib/server/pothos/Scalars/index.ts b/src/lib/server/pothos/schema/Scalars/index.ts similarity index 100% rename from src/lib/server/pothos/Scalars/index.ts rename to src/lib/server/pothos/schema/Scalars/index.ts diff --git a/src/lib/server/pothos/schema/index.ts b/src/lib/server/pothos/schema/index.ts new file mode 100644 index 0000000..acdab44 --- /dev/null +++ b/src/lib/server/pothos/schema/index.ts @@ -0,0 +1,18 @@ +import { builder } from '../builder'; + +builder.queryType({}); + +builder.queryField('version', (t) => + t.string({ + description: 'Application version', + resolve: (parent, args, context) => context.config.app_version + }) +); + +builder.mutationType({}); + +import './Scalars'; +import './posts'; +import './users'; + +export const Schema = builder.toSchema(); \ No newline at end of file diff --git a/src/lib/server/pothos/schema/posts.ts b/src/lib/server/pothos/schema/posts.ts new file mode 100644 index 0000000..f616871 --- /dev/null +++ b/src/lib/server/pothos/schema/posts.ts @@ -0,0 +1,110 @@ +import { prisma } from '$lib/server/prisma'; +import { builder } from '../builder'; + +export const Post = builder.prismaObject('Post', { + fields: (t) => ({ + id: t.exposeID('id'), + title: t.exposeString('title'), + content: t.exposeString('content'), + published: t.exposeBoolean('published'), + author: t.relation('author'), + createdAt: t.expose('createdAt', { + type: 'Date' + }), + updatedAt: t.expose('updatedAt', { + type: 'Date' + }) + }) +}); + +const CreatePost = builder.inputType('CreatePost', { + fields: (t) => ({ + title: t.string({ + required: true + }), + content: t.string({ + required: true + }), + published: t.boolean(), + authorId: t.id({ + required: true + }) + }) +}); + +const UpdatePost = builder.inputType('UpdatePost', { + fields: (t) => ({ + id: t.id({ + required: true + }), + title: t.string(), + content: t.string(), + published: t.boolean(), + authorId: t.id() + }) +}); + +builder.queryFields((t) => ({ + posts: t.prismaField({ + type: [Post], + resolve: async () => { + return await prisma.post.findMany(); + } + }) +})); + +builder.mutationFields((t) => ({ + createPost: t.field({ + type: Post, + args: { + input: t.arg({ required: true, type: CreatePost }) + }, + resolve: async (parent, args) => { + const author = await prisma.user.findUnique({ + where: { id: Number(args.input.authorId) } + }); + if (!author) { + throw new Error('Author does not exist!'); + } + const post = await prisma.post.create({ + data: { + title: args.input.title, + content: args.input.content, + published: args.input.published, + author: { + connect: { + id: author.id + } + } + } + }); + return post; + } + }), + updatePost: t.field({ + type: Post, + args: { + input: t.arg({ required: true, type: UpdatePost }) + }, + resolve: async (parent, args) => { + const post = await prisma.post.update({ + where: { + id: Number(args.input.id) + }, + data: { + title: args.input.title ?? undefined, + content: args.input.content ?? undefined, + published: args.input.published, + ...(args.input.authorId && { + author: { + connect: { + id: Number(args.input.authorId) + } + } + }) + } + }); + return post; + } + }) +})); \ No newline at end of file diff --git a/src/lib/server/pothos/schema/users.ts b/src/lib/server/pothos/schema/users.ts new file mode 100644 index 0000000..c15b8bb --- /dev/null +++ b/src/lib/server/pothos/schema/users.ts @@ -0,0 +1,83 @@ +import { prisma } from '$lib/server/prisma'; +import { builder } from '../builder'; + +export const User = builder.prismaObject('User', { + fields: (t) => ({ + id: t.exposeID('id'), + email: t.exposeString('email'), + name: t.exposeString('name'), + posts: t.relation('posts'), + createdAt: t.expose('createdAt', { + type: 'Date' + }), + updatedAt: t.expose('updatedAt', { + type: 'Date' + }) + }) +}); + +const CreateUser = builder.inputType('CreateUser', { + fields: (t) => ({ + email: t.string({ + required: true + }), + name: t.string({ + required: true + }) + }) +}); + +const UpdateUser = builder.inputType('UpdateUser', { + fields: (t) => ({ + id: t.id({ + required: true + }), + email: t.string(), + name: t.string() + }) +}); + +builder.queryFields((t) => ({ + users: t.prismaField({ + type: [User], + resolve: async () => { + return await prisma.user.findMany(); + } + }) +})); + +builder.mutationFields((t) => ({ + createUser: t.field({ + type: User, + args: { + input: t.arg({ required: true, type: CreateUser }) + }, + resolve: async (parent, args) => { + const post = await prisma.user.create({ + data: { + email: args.input.email, + name: args.input.name + } + }); + return post; + } + }), + updateUser: t.field({ + type: User, + args: { + input: t.arg({ required: true, type: UpdateUser }) + }, + resolve: async (parent, args) => { + const post = await prisma.user.update({ + where: { + id: Number(args.input.id) + }, + data: { + email: args.input.email, + name: args.input.name ?? undefined + } + }); + return post; + } + }) +})); \ No newline at end of file -- 2.45.3