mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 10:42:08 +00:00
Feat: Add role enum for user table
This commit is contained in:
1755
schema.svg
1755
schema.svg
File diff suppressed because it is too large
Load Diff
|
Before Width: | Height: | Size: 194 KiB After Width: | Height: | Size: 198 KiB |
5
src/prisma/migrations/20230923043953_/migration.sql
Normal file
5
src/prisma/migrations/20230923043953_/migration.sql
Normal file
@@ -0,0 +1,5 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "Role" AS ENUM ('USER', 'ADMIN');
|
||||
|
||||
-- AlterTable
|
||||
ALTER TABLE "User" ADD COLUMN "role" "Role" NOT NULL DEFAULT 'USER';
|
||||
@@ -12,6 +12,11 @@ datasource db {
|
||||
shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
|
||||
}
|
||||
|
||||
enum Role {
|
||||
USER
|
||||
ADMIN
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(cuid())
|
||||
username String @unique
|
||||
@@ -23,6 +28,7 @@ model User {
|
||||
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
|
||||
accountIsVerified Boolean @default(false)
|
||||
dateOfBirth DateTime
|
||||
role Role @default(USER)
|
||||
beerPosts BeerPost[]
|
||||
beerStyles BeerStyle[]
|
||||
breweryPosts BreweryPost[]
|
||||
|
||||
36
src/prisma/seed/create/createAdminUser.ts
Normal file
36
src/prisma/seed/create/createAdminUser.ts
Normal file
@@ -0,0 +1,36 @@
|
||||
import { z } from 'zod';
|
||||
|
||||
import { hashPassword } from '../../../config/auth/passwordFns';
|
||||
import DBClient from '../../DBClient';
|
||||
import GetUserSchema from '../../../services/User/schema/GetUserSchema';
|
||||
|
||||
const createAdminUser = async () => {
|
||||
const hash = await hashPassword('Pas!3word');
|
||||
const adminUser: z.infer<typeof GetUserSchema> = await DBClient.instance.user.create({
|
||||
data: {
|
||||
username: 'admin',
|
||||
email: 'admin@example.com',
|
||||
firstName: 'Admin',
|
||||
lastName: 'User',
|
||||
dateOfBirth: new Date('1990-01-01'),
|
||||
role: 'ADMIN',
|
||||
hash,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
username: true,
|
||||
email: true,
|
||||
firstName: true,
|
||||
lastName: true,
|
||||
dateOfBirth: true,
|
||||
createdAt: true,
|
||||
accountIsVerified: true,
|
||||
updatedAt: true,
|
||||
role: true,
|
||||
},
|
||||
});
|
||||
|
||||
return adminUser;
|
||||
};
|
||||
|
||||
export default createAdminUser;
|
||||
@@ -16,6 +16,8 @@ interface UserData {
|
||||
dateOfBirth: Date;
|
||||
createdAt: Date;
|
||||
hash: string;
|
||||
accountIsVerified: boolean;
|
||||
role: 'USER' | 'ADMIN';
|
||||
}
|
||||
|
||||
const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
|
||||
@@ -53,7 +55,7 @@ const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
|
||||
const dateOfBirth = faker.date.birthdate({ mode: 'age', min: 19 });
|
||||
const createdAt = faker.date.past({ years: 4 });
|
||||
|
||||
const user = {
|
||||
const user: UserData = {
|
||||
firstName,
|
||||
lastName,
|
||||
email,
|
||||
@@ -62,6 +64,7 @@ const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
|
||||
createdAt,
|
||||
hash,
|
||||
accountIsVerified: true,
|
||||
role: 'USER',
|
||||
};
|
||||
|
||||
data.push(user);
|
||||
|
||||
@@ -15,6 +15,7 @@ import createNewUsers from './create/createNewUsers';
|
||||
import createNewBreweryPostLikes from './create/createNewBreweryPostLikes';
|
||||
import createNewLocations from './create/createNewLocations';
|
||||
import logger from '../../config/pino/logger';
|
||||
import createAdminUser from './create/createAdminUser';
|
||||
|
||||
(async () => {
|
||||
try {
|
||||
@@ -24,6 +25,9 @@ import logger from '../../config/pino/logger';
|
||||
await cleanDatabase();
|
||||
logger.info('Database cleared successfully, preparing to seed.');
|
||||
|
||||
await createAdminUser();
|
||||
logger.info('Admin user created successfully.');
|
||||
|
||||
const users = await createNewUsers({ numberOfUsers: 10000 });
|
||||
logger.info('Users created successfully.');
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ const createNewUser = async ({
|
||||
createdAt: true,
|
||||
accountIsVerified: true,
|
||||
updatedAt: true,
|
||||
role: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ const deleteUserById = async (id: string) => {
|
||||
createdAt: true,
|
||||
accountIsVerified: true,
|
||||
updatedAt: true,
|
||||
role: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ const findUserById = async (id: string) => {
|
||||
createdAt: true,
|
||||
accountIsVerified: true,
|
||||
updatedAt: true,
|
||||
role: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@ const GetUserSchema = z.object({
|
||||
lastName: z.string(),
|
||||
dateOfBirth: z.coerce.date(),
|
||||
accountIsVerified: z.boolean(),
|
||||
role: z.enum(['USER', 'ADMIN']),
|
||||
});
|
||||
|
||||
export default GetUserSchema;
|
||||
|
||||
@@ -16,6 +16,7 @@ const updateUserToBeConfirmedById = async (id: string) => {
|
||||
lastName: true,
|
||||
updatedAt: true,
|
||||
dateOfBirth: true,
|
||||
role: true,
|
||||
},
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user