mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 20:13:49 +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")
|
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[]
|
||||||
|
|||||||
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;
|
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);
|
||||||
|
|||||||
@@ -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.');
|
||||||
|
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ const createNewUser = async ({
|
|||||||
createdAt: true,
|
createdAt: true,
|
||||||
accountIsVerified: true,
|
accountIsVerified: true,
|
||||||
updatedAt: true,
|
updatedAt: true,
|
||||||
|
role: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const deleteUserById = async (id: string) => {
|
|||||||
createdAt: true,
|
createdAt: true,
|
||||||
accountIsVerified: true,
|
accountIsVerified: true,
|
||||||
updatedAt: true,
|
updatedAt: true,
|
||||||
|
role: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const findUserById = async (id: string) => {
|
|||||||
createdAt: true,
|
createdAt: true,
|
||||||
accountIsVerified: true,
|
accountIsVerified: true,
|
||||||
updatedAt: true,
|
updatedAt: true,
|
||||||
|
role: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ const updateUserToBeConfirmedById = async (id: string) => {
|
|||||||
lastName: true,
|
lastName: true,
|
||||||
updatedAt: true,
|
updatedAt: true,
|
||||||
dateOfBirth: true,
|
dateOfBirth: true,
|
||||||
|
role: true,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user