feat: add beer style comments

This commit is contained in:
Aaron William Po
2023-10-15 20:24:40 -04:00
parent 27af922a91
commit c8e8207e30
16 changed files with 774 additions and 26 deletions

View File

@@ -0,0 +1,35 @@
-- CreateTable
CREATE TABLE "BeerStyleLike" (
"id" TEXT NOT NULL,
"beerStyleId" TEXT NOT NULL,
"likedById" TEXT NOT NULL,
"createdAt" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMPTZ(3),
CONSTRAINT "BeerStyleLike_pkey" PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "BeerStyleComment" (
"id" TEXT NOT NULL,
"rating" INTEGER NOT NULL,
"beerStyleId" TEXT NOT NULL,
"postedById" TEXT NOT NULL,
"content" TEXT NOT NULL,
"createdAt" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMPTZ(3),
CONSTRAINT "BeerStyleComment_pkey" PRIMARY KEY ("id")
);
-- AddForeignKey
ALTER TABLE "BeerStyleLike" ADD CONSTRAINT "BeerStyleLike_beerStyleId_fkey" FOREIGN KEY ("beerStyleId") REFERENCES "BeerStyle"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "BeerStyleLike" ADD CONSTRAINT "BeerStyleLike_likedById_fkey" FOREIGN KEY ("likedById") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "BeerStyleComment" ADD CONSTRAINT "BeerStyleComment_beerStyleId_fkey" FOREIGN KEY ("beerStyleId") REFERENCES "BeerStyle"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "BeerStyleComment" ADD CONSTRAINT "BeerStyleComment_postedById_fkey" FOREIGN KEY ("postedById") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@@ -18,17 +18,17 @@ enum Role {
}
model User {
id String @id @default(cuid())
username String @unique
id String @id @default(cuid())
username String @unique
firstName String
lastName String
hash String
email String @unique
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
accountIsVerified Boolean @default(false)
email String @unique
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
accountIsVerified Boolean @default(false)
dateOfBirth DateTime
role Role @default(USER)
role Role @default(USER)
beerPosts BeerPost[]
beerStyles BeerStyle[]
breweryPosts BreweryPost[]
@@ -40,6 +40,8 @@ model User {
BreweryPostLike BreweryPostLike[]
Location Location[]
Glassware Glassware[]
BeerStyleLike BeerStyleLike[]
BeerStyleComment BeerStyleComment[]
}
model BeerPost {
@@ -94,18 +96,42 @@ model BeerComment {
}
model BeerStyle {
id String @id @default(cuid())
name String
description String
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
postedBy User @relation(fields: [postedById], references: [id], onDelete: Cascade)
glassware Glassware @relation(fields: [glasswareId], references: [id], onDelete: Cascade)
glasswareId String
id String @id @default(cuid())
name String
description String
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
postedBy User @relation(fields: [postedById], references: [id], onDelete: Cascade)
glassware Glassware @relation(fields: [glasswareId], references: [id], onDelete: Cascade)
glasswareId String
postedById String
abvRange Float[]
ibuRange Float[]
beerPosts BeerPost[]
BeerStyleLike BeerStyleLike[]
BeerStyleComment BeerStyleComment[]
}
model BeerStyleLike {
id String @id @default(cuid())
beerStyle BeerStyle @relation(fields: [beerStyleId], references: [id], onDelete: Cascade)
beerStyleId String
likedBy User @relation(fields: [likedById], references: [id], onDelete: Cascade)
likedById String
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
}
model BeerStyleComment {
id String @id @default(cuid())
rating Int
beerStyle BeerStyle @relation(fields: [beerStyleId], references: [id], onDelete: Cascade)
beerStyleId String
postedBy User @relation(fields: [postedById], references: [id], onDelete: Cascade)
postedById String
abvRange Float[]
ibuRange Float[]
beerPosts BeerPost[]
content String
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
}
model Glassware {

View File

@@ -0,0 +1,56 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { faker } from '@faker-js/faker';
import { BeerStyle, User } from '@prisma/client';
import DBClient from '../../DBClient';
interface CreateNewBeerCommentsArgs {
numberOfComments: number;
joinData: {
beerStyles: BeerStyle[];
users: User[];
};
}
interface BeerStyleComment {
content: string;
postedById: string;
beerStyleId: string;
rating: number;
createdAt: Date;
}
const createNewBeerStyleComments = async ({
numberOfComments,
joinData,
}: CreateNewBeerCommentsArgs) => {
const { beerStyles, users } = joinData;
const prisma = DBClient.instance;
const beerStyleCommentData: BeerStyleComment[] = [];
// eslint-disable-next-line no-plusplus
for (let i = 0; i < numberOfComments; i++) {
const content = faker.lorem.lines(5);
const user = users[Math.floor(Math.random() * users.length)];
const beerStyle = beerStyles[Math.floor(Math.random() * beerStyles.length)];
const createdAt = faker.date.past({ years: 1 });
const rating = Math.floor(Math.random() * 5) + 1;
beerStyleCommentData.push({
content,
postedById: user.id,
beerStyleId: beerStyle.id,
createdAt,
rating,
});
}
await prisma.beerStyleComment.createMany({
data: beerStyleCommentData,
});
return prisma.beerStyleComment.findMany();
};
export default createNewBeerStyleComments;

View File

@@ -0,0 +1,44 @@
import type { BeerStyle, User } from '@prisma/client';
// eslint-disable-next-line import/no-extraneous-dependencies
import { faker } from '@faker-js/faker';
import DBClient from '../../DBClient';
interface BeerPostLikeData {
beerStyleId: string;
likedById: string;
createdAt: Date;
}
interface CreateNewBeerStyleLikesArgs {
joinData: {
beerStyles: BeerStyle[];
users: User[];
};
numberOfLikes: number;
}
const createNewBeerStyleLikes = async ({
joinData: { beerStyles, users },
numberOfLikes,
}: CreateNewBeerStyleLikesArgs) => {
const beerStyleLikeData: BeerPostLikeData[] = [];
// eslint-disable-next-line no-plusplus
for (let i = 0; i < numberOfLikes; i++) {
const beerStyle = beerStyles[Math.floor(Math.random() * beerStyles.length)];
const user = users[Math.floor(Math.random() * users.length)];
const createdAt = faker.date.past({ years: 1 });
beerStyleLikeData.push({
beerStyleId: beerStyle.id,
likedById: user.id,
createdAt,
});
}
await DBClient.instance.beerStyleLike.createMany({
data: beerStyleLikeData,
});
return DBClient.instance.beerStyleLike.findMany();
};
export default createNewBeerStyleLikes;

View File

@@ -16,6 +16,8 @@ import createNewBreweryPostLikes from './create/createNewBreweryPostLikes';
import createNewLocations from './create/createNewLocations';
import logger from '../../config/pino/logger';
import createAdminUser from './create/createAdminUser';
import createNewBeerStyleComments from './create/createNewBeerStyleComments';
import createNewBeerStyleLikes from './create/createNewBeerStyleLikes';
(async () => {
try {
@@ -51,11 +53,15 @@ import createAdminUser from './create/createAdminUser';
logger.info('Beer posts created successfully.');
const [beerPostComments, breweryPostComments] = await Promise.all([
const [beerPostComments, beerStyleComments, breweryPostComments] = await Promise.all([
createNewBeerPostComments({
numberOfComments: 100000,
joinData: { beerPosts, users },
}),
createNewBeerStyleComments({
numberOfComments: 5000,
joinData: { beerStyles, users },
}),
createNewBreweryPostComments({
numberOfComments: 50000,
joinData: { breweryPosts, users },
@@ -63,11 +69,15 @@ import createAdminUser from './create/createAdminUser';
]);
logger.info('Created beer post comments and brewery post comments.');
const [beerPostLikes, breweryPostLikes] = await Promise.all([
const [beerPostLikes, beerStyleLikes, breweryPostLikes] = await Promise.all([
createNewBeerPostLikes({
numberOfLikes: 500000,
joinData: { beerPosts, users },
}),
createNewBeerStyleLikes({
numberOfLikes: 50000,
joinData: { beerStyles, users },
}),
createNewBreweryPostLikes({
numberOfLikes: 100000,
joinData: { breweryPosts, users },
@@ -96,6 +106,8 @@ import createAdminUser from './create/createAdminUser';
numberOfBreweryPosts: breweryPosts.length,
numberOfBeerPosts: beerPosts.length,
numberOfBeerStyles: beerStyles.length,
numberOfBeerStyleLikes: beerStyleLikes.length,
numberOfBeerStyleComments: beerStyleComments.length,
numberOfBeerPostLikes: beerPostLikes.length,
numberOfBreweryPostLikes: breweryPostLikes.length,
numberOfBeerPostComments: beerPostComments.length,