Init the prisma starter profile for cubetiq team and add some functions for migration and playaround

This commit is contained in:
Sambo Chea 2021-03-13 10:10:40 +07:00
commit fc7d91e98a
10 changed files with 154 additions and 0 deletions

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
node_modules
yarn.lock
dist/
build/
.DS_Store

20
package.json Normal file
View File

@ -0,0 +1,20 @@
{
"name": "prisma-starter",
"license": "MIT",
"main": "main.ts",
"devDependencies": {
"prisma": "2.18.0",
"ts-node": "9.1.1",
"typescript": "4.2.3"
},
"scripts": {
"dev": "ts-node ./src/main.ts",
"migrate": "prisma migrate dev --name add-profile --preview-feature"
},
"dependencies": {
"@prisma/client": "2.18.0"
},
"engines": {
"node": ">=10.0.0"
}
}

1
prisma/.env Normal file
View File

@ -0,0 +1 @@
DATABASE_URL="file:./dev.db"

BIN
prisma/dev.db Normal file

Binary file not shown.

View File

@ -0,0 +1,19 @@
-- CreateTable
CREATE TABLE "Post" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"title" TEXT NOT NULL,
"content" TEXT,
"published" BOOLEAN NOT NULL DEFAULT false,
"authorId" INTEGER,
FOREIGN KEY ("authorId") REFERENCES "User" ("id") ON DELETE SET NULL ON UPDATE CASCADE
);
-- CreateTable
CREATE TABLE "User" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"email" TEXT NOT NULL,
"name" TEXT
);
-- CreateIndex
CREATE UNIQUE INDEX "User.email_unique" ON "User"("email");

View File

@ -0,0 +1,12 @@
-- CreateTable
CREATE TABLE "Profile" (
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"bio" TEXT NOT NULL,
"avatar" TEXT,
"userId" INTEGER NOT NULL,
"enabled" BOOLEAN NOT NULL DEFAULT true,
FOREIGN KEY ("userId") REFERENCES "User" ("id") ON DELETE CASCADE ON UPDATE CASCADE
);
-- CreateIndex
CREATE UNIQUE INDEX "Profile.userId_unique" ON "Profile"("userId");

View File

@ -0,0 +1,3 @@
# Please do not edit this file manually
# It should be added in your version-control system (i.e. Git)
provider = "sqlite"

34
prisma/schema.prisma Normal file
View File

@ -0,0 +1,34 @@
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
bio String
avatar String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
enabled Boolean @default(true)
}

51
src/main.ts Normal file
View File

@ -0,0 +1,51 @@
import { PrismaClient, User } from "@prisma/client";
const prisma = new PrismaClient();
// A `main` function so that you can use async/await
async function main() {
// create user
await createUser()
.then((user) => {
// create profile for user
createProfile(user);
})
.catch((e) => {
console.error(e);
});
const allUsers = await prisma.user.findMany();
console.log("All users => ", allUsers);
}
async function createUser() {
const user = await prisma.user.create({
data: {
name: "CUBETIQ Solution",
email: "ops@cubetiqs.com",
},
});
console.log("User => ", user);
return user;
}
async function createProfile(user: User) {
const profile = await prisma.profile.create({
data: {
userId: user.id,
bio: "Software Company",
},
});
console.log("Profile => ", profile);
}
main()
.catch((e) => {
throw e;
})
.finally(async () => {
await prisma.$disconnect();
});

9
tsconfig.json Normal file
View File

@ -0,0 +1,9 @@
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext", "dom"],
"esModuleInterop": true
}
}