Feat: Add role enum for user table

This commit is contained in:
Aaron William Po
2023-09-23 01:26:36 -04:00
parent bf56ca6058
commit 942f1390f7
11 changed files with 946 additions and 870 deletions

View 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';

View File

@@ -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[]

View 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;

View File

@@ -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);

View File

@@ -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.');

View File

@@ -32,6 +32,7 @@ const createNewUser = async ({
createdAt: true,
accountIsVerified: true,
updatedAt: true,
role: true,
},
});

View File

@@ -16,6 +16,7 @@ const deleteUserById = async (id: string) => {
createdAt: true,
accountIsVerified: true,
updatedAt: true,
role: true,
},
});

View File

@@ -16,6 +16,7 @@ const findUserById = async (id: string) => {
createdAt: true,
accountIsVerified: true,
updatedAt: true,
role: true,
},
});

View File

@@ -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;

View File

@@ -16,6 +16,7 @@ const updateUserToBeConfirmedById = async (id: string) => {
lastName: true,
updatedAt: true,
dateOfBirth: true,
role: true,
},
});