Add seeder
This commit is contained in:
parent
322034ac2e
commit
991a9ed583
|
|
@ -8,6 +8,9 @@
|
|||
"start": "next start",
|
||||
"lint": "next lint"
|
||||
},
|
||||
"prisma": {
|
||||
"seed": "ts-node --compiler-options {\"module\":\"CommonJS\"} prisma/seed.ts"
|
||||
},
|
||||
"dependencies": {
|
||||
"@auth/prisma-adapter": "^1.1.0",
|
||||
"@mantine/core": "^7.5.0",
|
||||
|
|
@ -37,6 +40,7 @@
|
|||
"sass": "^1.70.0",
|
||||
"server-only": "^0.0.1",
|
||||
"superjson": "^2.2.1",
|
||||
"ts-node": "^10.9.2",
|
||||
"zod": "^3.22.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@ dependencies:
|
|||
superjson:
|
||||
specifier: ^2.2.1
|
||||
version: 2.2.1
|
||||
ts-node:
|
||||
specifier: ^10.9.2
|
||||
version: 10.9.2(@types/node@20.11.7)(typescript@5.3.3)
|
||||
zod:
|
||||
specifier: ^3.22.4
|
||||
version: 3.22.4
|
||||
|
|
@ -126,7 +129,7 @@ devDependencies:
|
|||
version: 5.8.1
|
||||
tailwindcss:
|
||||
specifier: ^3.4.1
|
||||
version: 3.4.1
|
||||
version: 3.4.1(ts-node@10.9.2)
|
||||
typescript:
|
||||
specifier: ^5.3.3
|
||||
version: 5.3.3
|
||||
|
|
@ -176,6 +179,12 @@ packages:
|
|||
dependencies:
|
||||
regenerator-runtime: 0.14.1
|
||||
|
||||
/@cspotcode/source-map-support@0.8.1:
|
||||
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
|
||||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@jridgewell/trace-mapping': 0.3.9
|
||||
|
||||
/@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
|
||||
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
|
||||
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
||||
|
|
@ -291,7 +300,6 @@ packages:
|
|||
/@jridgewell/resolve-uri@3.1.1:
|
||||
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
dev: true
|
||||
|
||||
/@jridgewell/set-array@1.1.2:
|
||||
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
|
||||
|
|
@ -300,7 +308,6 @@ packages:
|
|||
|
||||
/@jridgewell/sourcemap-codec@1.4.15:
|
||||
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
|
||||
dev: true
|
||||
|
||||
/@jridgewell/trace-mapping@0.3.22:
|
||||
resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
|
||||
|
|
@ -309,6 +316,12 @@ packages:
|
|||
'@jridgewell/sourcemap-codec': 1.4.15
|
||||
dev: true
|
||||
|
||||
/@jridgewell/trace-mapping@0.3.9:
|
||||
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
|
||||
dependencies:
|
||||
'@jridgewell/resolve-uri': 3.1.1
|
||||
'@jridgewell/sourcemap-codec': 1.4.15
|
||||
|
||||
/@mantine/core@7.5.0(@mantine/hooks@7.5.0)(@types/react@18.2.48)(react-dom@18.2.0)(react@18.2.0):
|
||||
resolution: {integrity: sha512-0Qfn4oLCs6Qrli+JK6Q325xhNblVEPSKOB4sDMUkvKYUlCt/2lsIhwUXarVBgiIV3X+rKccf0/LcEWmpn/dYuw==}
|
||||
peerDependencies:
|
||||
|
|
@ -668,6 +681,18 @@ packages:
|
|||
resolution: {integrity: sha512-2Fwzv6nqpE0Ie/G7PeS0EVR89zLm+c1Mw7T+RAGtU807j4oaUx0zGkBXTu5u9AI+j+BYNN2GZxJcuDTAecbr1A==}
|
||||
dev: false
|
||||
|
||||
/@tsconfig/node10@1.0.9:
|
||||
resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==}
|
||||
|
||||
/@tsconfig/node12@1.0.11:
|
||||
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
|
||||
|
||||
/@tsconfig/node14@1.0.3:
|
||||
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
|
||||
|
||||
/@tsconfig/node16@1.0.4:
|
||||
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
|
||||
|
||||
/@types/bcrypt@5.0.2:
|
||||
resolution: {integrity: sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==}
|
||||
dependencies:
|
||||
|
|
@ -861,6 +886,10 @@ packages:
|
|||
dependencies:
|
||||
acorn: 8.11.3
|
||||
|
||||
/acorn-walk@8.3.2:
|
||||
resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
|
||||
/acorn@8.11.3:
|
||||
resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
|
||||
engines: {node: '>=0.4.0'}
|
||||
|
|
@ -926,6 +955,9 @@ packages:
|
|||
readable-stream: 3.6.2
|
||||
dev: false
|
||||
|
||||
/arg@4.1.3:
|
||||
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
|
||||
|
||||
/arg@5.0.2:
|
||||
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
|
||||
dev: true
|
||||
|
|
@ -1220,6 +1252,9 @@ packages:
|
|||
is-what: 4.1.16
|
||||
dev: false
|
||||
|
||||
/create-require@1.1.1:
|
||||
resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
|
||||
|
||||
/cross-spawn@7.0.3:
|
||||
resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
|
||||
engines: {node: '>= 8'}
|
||||
|
|
@ -1306,6 +1341,10 @@ packages:
|
|||
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
|
||||
dev: true
|
||||
|
||||
/diff@4.0.2:
|
||||
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
|
||||
engines: {node: '>=0.3.1'}
|
||||
|
||||
/dir-glob@3.0.1:
|
||||
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
|
||||
engines: {node: '>=8'}
|
||||
|
|
@ -2424,6 +2463,9 @@ packages:
|
|||
semver: 6.3.1
|
||||
dev: false
|
||||
|
||||
/make-error@1.3.6:
|
||||
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
|
||||
|
||||
/mantine-form-zod-resolver@1.1.0(@mantine/form@7.5.0)(zod@3.22.4):
|
||||
resolution: {integrity: sha512-hidTuYq6agSF5XbkcVVcr0mkGs9ki/x8OC9ldZMxGLVGja6bdl+x4k1hCNrigCG90DBoMDnu0bo3hprGBBlUZA==}
|
||||
engines: {node: '>=16.6.0'}
|
||||
|
|
@ -2776,7 +2818,7 @@ packages:
|
|||
postcss: 8.4.33
|
||||
dev: true
|
||||
|
||||
/postcss-load-config@4.0.2(postcss@8.4.33):
|
||||
/postcss-load-config@4.0.2(postcss@8.4.33)(ts-node@10.9.2):
|
||||
resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
|
||||
engines: {node: '>= 14'}
|
||||
peerDependencies:
|
||||
|
|
@ -2790,6 +2832,7 @@ packages:
|
|||
dependencies:
|
||||
lilconfig: 3.0.0
|
||||
postcss: 8.4.33
|
||||
ts-node: 10.9.2(@types/node@20.11.7)(typescript@5.3.3)
|
||||
yaml: 2.3.4
|
||||
dev: true
|
||||
|
||||
|
|
@ -3388,7 +3431,7 @@ packages:
|
|||
resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==}
|
||||
dev: false
|
||||
|
||||
/tailwindcss@3.4.1:
|
||||
/tailwindcss@3.4.1(ts-node@10.9.2):
|
||||
resolution: {integrity: sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==}
|
||||
engines: {node: '>=14.0.0'}
|
||||
hasBin: true
|
||||
|
|
@ -3410,7 +3453,7 @@ packages:
|
|||
postcss: 8.4.33
|
||||
postcss-import: 15.1.0(postcss@8.4.33)
|
||||
postcss-js: 4.0.1(postcss@8.4.33)
|
||||
postcss-load-config: 4.0.2(postcss@8.4.33)
|
||||
postcss-load-config: 4.0.2(postcss@8.4.33)(ts-node@10.9.2)
|
||||
postcss-nested: 6.0.1(postcss@8.4.33)
|
||||
postcss-selector-parser: 6.0.15
|
||||
resolve: 1.22.8
|
||||
|
|
@ -3474,6 +3517,36 @@ packages:
|
|||
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
|
||||
dev: true
|
||||
|
||||
/ts-node@10.9.2(@types/node@20.11.7)(typescript@5.3.3):
|
||||
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
|
||||
hasBin: true
|
||||
peerDependencies:
|
||||
'@swc/core': '>=1.2.50'
|
||||
'@swc/wasm': '>=1.2.50'
|
||||
'@types/node': '*'
|
||||
typescript: '>=2.7'
|
||||
peerDependenciesMeta:
|
||||
'@swc/core':
|
||||
optional: true
|
||||
'@swc/wasm':
|
||||
optional: true
|
||||
dependencies:
|
||||
'@cspotcode/source-map-support': 0.8.1
|
||||
'@tsconfig/node10': 1.0.9
|
||||
'@tsconfig/node12': 1.0.11
|
||||
'@tsconfig/node14': 1.0.3
|
||||
'@tsconfig/node16': 1.0.4
|
||||
'@types/node': 20.11.7
|
||||
acorn: 8.11.3
|
||||
acorn-walk: 8.3.2
|
||||
arg: 4.1.3
|
||||
create-require: 1.1.1
|
||||
diff: 4.0.2
|
||||
make-error: 1.3.6
|
||||
typescript: 5.3.3
|
||||
v8-compile-cache-lib: 3.0.1
|
||||
yn: 3.1.1
|
||||
|
||||
/tsconfig-paths@3.15.0:
|
||||
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
|
||||
dependencies:
|
||||
|
|
@ -3650,6 +3723,9 @@ packages:
|
|||
/util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
|
||||
/v8-compile-cache-lib@3.0.1:
|
||||
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
|
||||
|
||||
/webidl-conversions@3.0.1:
|
||||
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
|
||||
dev: false
|
||||
|
|
@ -3751,6 +3827,10 @@ packages:
|
|||
engines: {node: '>= 14'}
|
||||
dev: true
|
||||
|
||||
/yn@3.1.1:
|
||||
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
|
||||
engines: {node: '>=6'}
|
||||
|
||||
/yocto-queue@0.1.0:
|
||||
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
|
||||
engines: {node: '>=10'}
|
||||
|
|
|
|||
20
prisma/seed.ts
Normal file
20
prisma/seed.ts
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import { PrismaClient } from "@prisma/client";
|
||||
import permissionSeed from "./seeds/permissionSeed";
|
||||
import roleSeed from "./seeds/roleSeed";
|
||||
|
||||
const prisma = new PrismaClient();
|
||||
|
||||
async function main() {
|
||||
await permissionSeed(prisma);
|
||||
await roleSeed(prisma);
|
||||
}
|
||||
|
||||
main()
|
||||
.then(async () => {
|
||||
await prisma.$disconnect();
|
||||
})
|
||||
.catch(async (e) => {
|
||||
console.error(e);
|
||||
await prisma.$disconnect();
|
||||
process.exit(1);
|
||||
});
|
||||
99
prisma/seeds/permissionSeed.ts
Normal file
99
prisma/seeds/permissionSeed.ts
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
import { Permission, PrismaClient } from "@prisma/client";
|
||||
import { log } from "console";
|
||||
|
||||
export default async function permissionSeed(prisma: PrismaClient) {
|
||||
|
||||
log("Seeding permissions...")
|
||||
|
||||
const permissionData: Omit<Permission, "id">[] = [
|
||||
// Permission group
|
||||
{
|
||||
code: "permissions.read",
|
||||
name: "Read permission",
|
||||
description: "Allows reading a single permission",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "permissions.readAll",
|
||||
name: "Read all permissions",
|
||||
description: "Allows reading all permissions",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "permissions.update",
|
||||
name: "Update permission",
|
||||
description: "Allows updating a permission",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "permissions.delete",
|
||||
name: "Delete permission",
|
||||
description: "Allows deleting a permission",
|
||||
isActive: true,
|
||||
},
|
||||
// Role group
|
||||
{
|
||||
code: "roles.read",
|
||||
name: "Read role",
|
||||
description: "Allows reading a single role",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "roles.readAll",
|
||||
name: "Read all roles",
|
||||
description: "Allows reading all roles",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "roles.update",
|
||||
name: "Update role",
|
||||
description: "Allows updating a role",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "roles.delete",
|
||||
name: "Delete role",
|
||||
description: "Allows deleting a role",
|
||||
isActive: true,
|
||||
},
|
||||
// User group
|
||||
{
|
||||
code: "users.read",
|
||||
name: "Read user",
|
||||
description: "Allows reading a single user",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "users.readAll",
|
||||
name: "Read all users",
|
||||
description: "Allows reading all users",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "users.update",
|
||||
name: "Update user",
|
||||
description: "Allows updating a user",
|
||||
isActive: true,
|
||||
},
|
||||
{
|
||||
code: "users.delete",
|
||||
name: "Delete user",
|
||||
description: "Allows deleting a user",
|
||||
isActive: true,
|
||||
},
|
||||
];
|
||||
|
||||
await Promise.all(
|
||||
permissionData.map(async (permission) => {
|
||||
await prisma.permission.upsert({
|
||||
where: {
|
||||
code: permission.code
|
||||
},
|
||||
update: permission,
|
||||
create: permission
|
||||
})
|
||||
})
|
||||
)
|
||||
|
||||
console.log("Permission is seeded successfully")
|
||||
}
|
||||
30
prisma/seeds/roleSeed.ts
Normal file
30
prisma/seeds/roleSeed.ts
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
import { Role, PrismaClient } from "@prisma/client";
|
||||
import { log } from "console";
|
||||
|
||||
export default async function roleSeed(prisma: PrismaClient) {
|
||||
|
||||
log("Seeding roles...")
|
||||
|
||||
const roleData: Omit<Role, "id">[] = [
|
||||
{
|
||||
code: "super-admin",
|
||||
description: "Has full access to the system and can manage all features and settings",
|
||||
isActive: true,
|
||||
name: "Super Admin"
|
||||
}
|
||||
];
|
||||
|
||||
await Promise.all(
|
||||
roleData.map(async (role) => {
|
||||
await prisma.role.upsert({
|
||||
where: {
|
||||
code: role.code
|
||||
},
|
||||
update: role,
|
||||
create: role
|
||||
})
|
||||
})
|
||||
)
|
||||
|
||||
console.log("roles is seeded successfully")
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user