Continue work on brewery page, implement like system

This commit is contained in:
Aaron William Po
2023-04-23 17:25:39 -04:00
parent 9504da33d6
commit 58d30b605f
27 changed files with 699 additions and 125 deletions

View File

@@ -0,0 +1,16 @@
-- CreateTable
CREATE TABLE "BreweryPostLike" (
"id" STRING NOT NULL,
"breweryPostId" STRING NOT NULL,
"likedById" STRING NOT NULL,
"createdAt" TIMESTAMPTZ(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"updatedAt" TIMESTAMPTZ(3),
CONSTRAINT "BreweryPostLike_pkey" PRIMARY KEY ("id")
);
-- AddForeignKey
ALTER TABLE "BreweryPostLike" ADD CONSTRAINT "BreweryPostLike_breweryPostId_fkey" FOREIGN KEY ("breweryPostId") REFERENCES "BreweryPost"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "BreweryPostLike" ADD CONSTRAINT "BreweryPostLike_likedById_fkey" FOREIGN KEY ("likedById") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@@ -11,15 +11,15 @@ datasource db {
}
model User {
id String @id @default(uuid())
username String @unique
id String @id @default(uuid())
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)
isAccountVerified Boolean @default(false)
email String @unique
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
isAccountVerified Boolean @default(false)
dateOfBirth DateTime
beerPosts BeerPost[]
beerTypes BeerType[]
@@ -29,6 +29,7 @@ model User {
BeerPostLikes BeerPostLike[]
BeerImage BeerImage[]
BreweryImage BreweryImage[]
BreweryPostLike BreweryPostLike[]
}
model BeerPost {
@@ -60,6 +61,16 @@ model BeerPostLike {
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
}
model BreweryPostLike {
id String @id @default(uuid())
breweryPost BreweryPost @relation(fields: [breweryPostId], references: [id], onDelete: Cascade)
breweryPostId 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 BeerComment {
id String @id @default(uuid())
rating Int
@@ -83,17 +94,18 @@ model BeerType {
}
model BreweryPost {
id String @id @default(uuid())
id String @id @default(uuid())
name String
location String
beers BeerPost[]
description String
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
postedBy User @relation(fields: [postedById], references: [id], onDelete: Cascade)
createdAt DateTime @default(now()) @db.Timestamptz(3)
updatedAt DateTime? @updatedAt @db.Timestamptz(3)
postedBy User @relation(fields: [postedById], references: [id], onDelete: Cascade)
postedById String
breweryComments BreweryComment[]
breweryImages BreweryImage[]
BreweryPostLike BreweryPostLike[]
}
model BreweryComment {

View File

@@ -0,0 +1,33 @@
import type { BreweryPost, BreweryPostLike, User } from '@prisma/client';
import DBClient from '../../DBClient';
const createNewBreweryPostLikes = async ({
joinData: { breweryPosts, users },
numberOfLikes,
}: {
joinData: {
breweryPosts: BreweryPost[];
users: User[];
};
numberOfLikes: number;
}) => {
const breweryPostLikePromises: Promise<BreweryPostLike>[] = [];
// eslint-disable-next-line no-plusplus
for (let i = 0; i < numberOfLikes; i++) {
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
const user = users[Math.floor(Math.random() * users.length)];
breweryPostLikePromises.push(
DBClient.instance.breweryPostLike.create({
data: {
breweryPost: { connect: { id: breweryPost.id } },
likedBy: { connect: { id: user.id } },
},
}),
);
}
return Promise.all(breweryPostLikePromises);
};
export default createNewBreweryPostLikes;

View File

@@ -13,6 +13,7 @@ import createNewBreweryImages from './create/createNewBreweryImages';
import createNewBreweryPostComments from './create/createNewBreweryPostComments';
import createNewBreweryPosts from './create/createNewBreweryPosts';
import createNewUsers from './create/createNewUsers';
import createNewBreweryPostLikes from './create/createNewBreweryPostLikes';
(async () => {
try {
@@ -52,6 +53,10 @@ import createNewUsers from './create/createNewUsers';
numberOfLikes: 10000,
joinData: { beerPosts, users },
}),
createNewBreweryPostLikes({
numberOfLikes: 10000,
joinData: { breweryPosts, users },
}),
createNewBeerImages({
numberOfImages: 1000,
joinData: { beerPosts, users },