From 91a0f26e2fc77d98e1482a80a0b6751c3fd55315 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Thu, 7 Dec 2023 10:41:51 +0100 Subject: [PATCH] add prisma schema and seed --- .env.dist | 1 + package-lock.json | 48 +++++++++++++++++++ package.json | 10 +++- .../20231206124213_test/migration.sql | 8 ++++ prisma/migrations/migration_lock.toml | 3 ++ prisma/schema.prisma | 14 ++++++ prisma/seed.ts | 23 +++++++++ 7 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 .env.dist create mode 100644 prisma/migrations/20231206124213_test/migration.sql create mode 100644 prisma/migrations/migration_lock.toml create mode 100644 prisma/schema.prisma create mode 100644 prisma/seed.ts diff --git a/.env.dist b/.env.dist new file mode 100644 index 0000000..bcb041e --- /dev/null +++ b/.env.dist @@ -0,0 +1 @@ +DATABASE_URL="mysql://root:@localhost:3306/boilerplate_backend" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index fdd3215..a8720ae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,8 +10,10 @@ "license": "Apache-2.0", "dependencies": { "@apollo/server": "^4.9.5", + "@prisma/client": "^5.6.0", "graphql": "^16.8.1", "graphql-scalars": "^1.22.4", + "prisma": "^5.6.0", "reflect-metadata": "^0.1.13", "type-graphql": "^2.0.0-beta.3" }, @@ -1904,6 +1906,37 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@prisma/client": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.6.0.tgz", + "integrity": "sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee" + }, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/engines": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz", + "integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==", + "hasInstallScript": true + }, + "node_modules/@prisma/engines-version": { + "version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz", + "integrity": "sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw==" + }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", @@ -8977,6 +9010,21 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/prisma": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.6.0.tgz", + "integrity": "sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.6.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, "node_modules/proc-log": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", diff --git a/package.json b/package.json index b9f7b43..dba0ae1 100644 --- a/package.json +++ b/package.json @@ -23,12 +23,20 @@ "test:lint:remark": "remark . --quiet --frail", "test:unit": "TZ=UTC jest --runInBand --forceExit --detectOpenHandles", "test": "npm run test:lint && npm run test:unit", - "update": "npx npm-check-update" + "update": "npx npm-check-update", + "db:migrate": "TZ=UTC npx prisma migrate dev", + "db:reset": "TZ=UTC npx prisma migrate reset --force", + "db:seed": "TZ=UTC npx prisma db seed" }, + "prisma": { + "seed": "ts-node prisma/seed.ts" + }, "dependencies": { "@apollo/server": "^4.9.5", + "@prisma/client": "^5.6.0", "graphql": "^16.8.1", "graphql-scalars": "^1.22.4", + "prisma": "^5.6.0", "reflect-metadata": "^0.1.13", "type-graphql": "^2.0.0-beta.3" }, diff --git a/prisma/migrations/20231206124213_test/migration.sql b/prisma/migrations/20231206124213_test/migration.sql new file mode 100644 index 0000000..18d180d --- /dev/null +++ b/prisma/migrations/20231206124213_test/migration.sql @@ -0,0 +1,8 @@ +-- CreateTable +CREATE TABLE `Hello` ( + `id` INTEGER NOT NULL AUTO_INCREMENT, + `text` VARCHAR(191) NOT NULL, + `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), + + PRIMARY KEY (`id`) +) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..e5a788a --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "mysql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma new file mode 100644 index 0000000..68a135c --- /dev/null +++ b/prisma/schema.prisma @@ -0,0 +1,14 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} + +model Hello { + id Int @id @default(autoincrement()) + text String + createdAt DateTime @default(now()) +} diff --git a/prisma/seed.ts b/prisma/seed.ts new file mode 100644 index 0000000..76d1007 --- /dev/null +++ b/prisma/seed.ts @@ -0,0 +1,23 @@ +import { PrismaClient } from '@prisma/client' + +const prisma = new PrismaClient() + +async function main() { + await prisma.hello.create({ + data: { + text: 'Hello World!', + }, + }) +} + +main() + .then(async () => { + await prisma.$disconnect() + return undefined + }) + .catch(async (e) => { + // eslint-disable-next-line no-console + console.error(e) + await prisma.$disconnect() + process.exit(1) + })