mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 18:52:06 +00:00
feat: add beer style comments
This commit is contained in:
35
src/prisma/migrations/20231009153905_/migration.sql
Normal file
35
src/prisma/migrations/20231009153905_/migration.sql
Normal 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;
|
||||
@@ -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 {
|
||||
|
||||
56
src/prisma/seed/create/createNewBeerStyleComments.ts
Normal file
56
src/prisma/seed/create/createNewBeerStyleComments.ts
Normal 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;
|
||||
44
src/prisma/seed/create/createNewBeerStyleLikes.ts
Normal file
44
src/prisma/seed/create/createNewBeerStyleLikes.ts
Normal 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;
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user