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

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

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") shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
} }
enum Role {
USER
ADMIN
}
model User { model User {
id String @id @default(cuid()) id String @id @default(cuid())
username String @unique username String @unique
@@ -23,6 +28,7 @@ model User {
updatedAt DateTime? @updatedAt @db.Timestamptz(3) updatedAt DateTime? @updatedAt @db.Timestamptz(3)
accountIsVerified Boolean @default(false) accountIsVerified Boolean @default(false)
dateOfBirth DateTime dateOfBirth DateTime
role Role @default(USER)
beerPosts BeerPost[] beerPosts BeerPost[]
beerStyles BeerStyle[] beerStyles BeerStyle[]
breweryPosts BreweryPost[] 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; dateOfBirth: Date;
createdAt: Date; createdAt: Date;
hash: string; hash: string;
accountIsVerified: boolean;
role: 'USER' | 'ADMIN';
} }
const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => { const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
@@ -53,7 +55,7 @@ const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
const dateOfBirth = faker.date.birthdate({ mode: 'age', min: 19 }); const dateOfBirth = faker.date.birthdate({ mode: 'age', min: 19 });
const createdAt = faker.date.past({ years: 4 }); const createdAt = faker.date.past({ years: 4 });
const user = { const user: UserData = {
firstName, firstName,
lastName, lastName,
email, email,
@@ -62,6 +64,7 @@ const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
createdAt, createdAt,
hash, hash,
accountIsVerified: true, accountIsVerified: true,
role: 'USER',
}; };
data.push(user); data.push(user);

View File

@@ -15,6 +15,7 @@ import createNewUsers from './create/createNewUsers';
import createNewBreweryPostLikes from './create/createNewBreweryPostLikes'; import createNewBreweryPostLikes from './create/createNewBreweryPostLikes';
import createNewLocations from './create/createNewLocations'; import createNewLocations from './create/createNewLocations';
import logger from '../../config/pino/logger'; import logger from '../../config/pino/logger';
import createAdminUser from './create/createAdminUser';
(async () => { (async () => {
try { try {
@@ -24,6 +25,9 @@ import logger from '../../config/pino/logger';
await cleanDatabase(); await cleanDatabase();
logger.info('Database cleared successfully, preparing to seed.'); logger.info('Database cleared successfully, preparing to seed.');
await createAdminUser();
logger.info('Admin user created successfully.');
const users = await createNewUsers({ numberOfUsers: 10000 }); const users = await createNewUsers({ numberOfUsers: 10000 });
logger.info('Users created successfully.'); logger.info('Users created successfully.');

View File

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

View File

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

View File

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

View File

@@ -10,6 +10,7 @@ const GetUserSchema = z.object({
lastName: z.string(), lastName: z.string(),
dateOfBirth: z.coerce.date(), dateOfBirth: z.coerce.date(),
accountIsVerified: z.boolean(), accountIsVerified: z.boolean(),
role: z.enum(['USER', 'ADMIN']),
}); });
export default GetUserSchema; export default GetUserSchema;

View File

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