Did more work to beer post page, seed

Worked on comments and beer recs features. Fine tuning database seed amounts.
This commit is contained in:
Aaron William Po
2023-01-29 21:53:05 -05:00
parent fe277d5964
commit 0b96c8f1f5
38 changed files with 833 additions and 221 deletions

View File

@@ -0,0 +1,12 @@
/*
Warnings:
- Added the required column `rating` to the `BeerComment` table without a default value. This is not possible if the table is not empty.
- Added the required column `rating` to the `BreweryComment` table without a default value. This is not possible if the table is not empty.
*/
-- AlterTable
ALTER TABLE "BeerComment" ADD COLUMN "rating" INTEGER NOT NULL;
-- AlterTable
ALTER TABLE "BreweryComment" ADD COLUMN "rating" INTEGER NOT NULL;

View File

@@ -46,6 +46,7 @@ model BeerPost {
model BeerComment {
id String @id @default(uuid())
rating Int
beerPost BeerPost @relation(fields: [beerPostId], references: [id], onDelete: Cascade)
beerPostId String
postedBy User @relation(fields: [postedById], references: [id], onDelete: Cascade)
@@ -81,6 +82,7 @@ model BreweryPost {
model BreweryComment {
id String @id @default(uuid())
rating Int
breweryPost BreweryPost @relation(fields: [breweryPostId], references: [id], onDelete: Cascade)
breweryPostId String
postedBy User @relation(fields: [postedById], references: [id], onDelete: Cascade)

View File

@@ -1,3 +1,5 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { faker } from '@faker-js/faker';
import { BeerPost, BeerImage } from '@prisma/client';
import DBClient from '../../DBClient';
@@ -10,7 +12,7 @@ const createNewBeerImages = async ({
beerPosts,
}: CreateNewBeerImagesArgs) => {
const prisma = DBClient.instance;
const createdAt = faker.date.past(1);
const beerImagesPromises: Promise<BeerImage>[] = [];
// eslint-disable-next-line no-plusplus
@@ -22,6 +24,7 @@ const createNewBeerImages = async ({
url: 'https://picsum.photos/900/1600',
alt: 'Placeholder beer image.',
beerPost: { connect: { id: beerPost.id } },
createdAt,
},
}),
);

View File

@@ -23,12 +23,15 @@ const createNewBeerComments = async ({
const content = faker.lorem.lines(5);
const user = users[Math.floor(Math.random() * users.length)];
const beerPost = beerPosts[Math.floor(Math.random() * beerPosts.length)];
const createdAt = faker.date.past(1);
beerCommentPromises.push(
prisma.beerComment.create({
data: {
content,
postedBy: { connect: { id: user.id } },
beerPost: { connect: { id: beerPost.id } },
rating: Math.floor(Math.random() * 5) + 1,
createdAt,
},
}),
);

View File

@@ -25,17 +25,18 @@ const createNewBeerPosts = async ({
const user = users[Math.floor(Math.random() * users.length)];
const beerType = beerTypes[Math.floor(Math.random() * beerTypes.length)];
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
const createdAt = faker.date.past(1);
beerPostPromises.push(
prisma.beerPost.create({
data: {
abv: 10,
ibu: 10,
name: `${faker.commerce.productName()} ${beerType.name}`,
abv: Math.floor(Math.random() * (12 - 4) + 4),
ibu: Math.floor(Math.random() * (60 - 10) + 10),
name: faker.commerce.productName(),
description: faker.lorem.lines(24),
brewery: { connect: { id: breweryPost.id } },
postedBy: { connect: { id: user.id } },
type: { connect: { id: beerType.id } },
createdAt,
},
}),
);

View File

@@ -1,3 +1,5 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { faker } from '@faker-js/faker';
import { User, BeerType } from '@prisma/client';
import DBClient from '../../DBClient';
@@ -36,9 +38,10 @@ const createNewBeerTypes = async ({ joinData }: CreateNewBeerTypesArgs) => {
types.forEach((type) => {
const user = users[Math.floor(Math.random() * users.length)];
const createdAt = faker.date.past(1);
beerTypePromises.push(
prisma.beerType.create({
data: { name: type, postedBy: { connect: { id: user.id } } },
data: { name: type, postedBy: { connect: { id: user.id } }, createdAt },
}),
);
});

View File

@@ -1,3 +1,5 @@
// eslint-disable-next-line import/no-extraneous-dependencies
import { faker } from '@faker-js/faker';
import { BreweryPost, BreweryImage } from '@prisma/client';
import DBClient from '../../DBClient';
@@ -10,7 +12,7 @@ const createNewBreweryImages = async ({
breweryPosts,
}: CreateBreweryImagesArgs) => {
const prisma = DBClient.instance;
const createdAt = faker.date.past(1);
const breweryImagesPromises: Promise<BreweryImage>[] = [];
// eslint-disable-next-line no-plusplus
@@ -23,6 +25,7 @@ const createNewBreweryImages = async ({
url: 'https://picsum.photos/900/1600',
alt: 'Placeholder brewery image.',
breweryPost: { connect: { id: breweryPost.id } },
createdAt,
},
}),
);

View File

@@ -18,6 +18,7 @@ const createNewBreweryPostComments = async ({
const { breweryPosts, users } = joinData;
const prisma = DBClient.instance;
const breweryCommentPromises: Promise<BreweryComment>[] = [];
const createdAt = faker.date.past(1);
// eslint-disable-next-line no-plusplus
for (let i = 0; i < numberOfComments; i++) {
const content = faker.lorem.lines(5);
@@ -29,6 +30,8 @@ const createNewBreweryPostComments = async ({
content,
postedBy: { connect: { id: user.id } },
breweryPost: { connect: { id: breweryPost.id } },
rating: Math.floor(Math.random() * 5) + 1,
createdAt,
},
}),
);

View File

@@ -23,10 +23,16 @@ const createNewBreweryPosts = async ({
const location = faker.address.cityName();
const description = faker.lorem.lines(5);
const user = users[Math.floor(Math.random() * users.length)];
const createdAt = faker.date.past(1);
breweryPromises.push(
prisma.breweryPost.create({
data: { name, location, description, postedBy: { connect: { id: user.id } } },
data: {
name,
location,
description,
postedBy: { connect: { id: user.id } },
createdAt,
},
}),
);
}

View File

@@ -16,7 +16,7 @@ const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
const username = `${firstName[0]}.${lastName}`;
const email = faker.internet.email(firstName, lastName, 'example.com');
const dateOfBirth = faker.date.birthdate({ mode: 'age', min: 19 });
const createdAt = faker.date.past(1);
userPromises.push(
prisma.user.create({
data: {
@@ -25,6 +25,7 @@ const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
email,
username,
dateOfBirth,
createdAt,
},
}),
);

View File

@@ -28,16 +28,16 @@ import createNewUsers from './create/createNewUsers';
createNewBeerTypes({ joinData: { users } }),
]);
const beerPosts = await createNewBeerPosts({
numberOfPosts: 100,
numberOfPosts: 48,
joinData: { breweryPosts, beerTypes, users },
});
const [beerPostComments, breweryPostComments] = await Promise.all([
createNewBeerPostComments({
numberOfComments: 500,
numberOfComments: 1000,
joinData: { beerPosts, users },
}),
createNewBreweryPostComments({
numberOfComments: 500,
numberOfComments: 1000,
joinData: { breweryPosts, users },
}),
]);