Add beer post, brewery post GET service and page

Add prettier, eslint config
This commit is contained in:
Aaron William Po
2023-01-22 20:56:33 -05:00
parent a434e1bb98
commit 0065525f5c
29 changed files with 8696 additions and 6977 deletions

126
prisma/seed.ts Normal file
View File

@@ -0,0 +1,126 @@
import { BeerPost, BeerType, BreweryPost, PrismaClient, User } from '@prisma/client';
import { faker } from '@faker-js/faker';
const prisma = new PrismaClient();
const createNewUsers = () => {
const userPromises: Promise<User>[] = [];
Array.from({ length: 100 }).forEach(() => {
const firstName = faker.name.firstName();
const lastName = faker.name.lastName();
const email = faker.internet.email(firstName, lastName, 'example.com');
userPromises.push(
prisma.user.create({
data: {
firstName,
lastName,
email,
username: `${firstName[0]}.${lastName}`,
dateOfBirth: faker.date.birthdate({ mode: 'age', min: 19 }),
},
}),
);
});
return Promise.all(userPromises);
};
const createNewBreweryPosts = (users: User[]) => {
const breweryPromises: Promise<BreweryPost>[] = [];
Array.from({ length: 100 }).forEach(() => {
const name = `${faker.commerce.productName()} Brewing Company`;
const location = faker.address.cityName();
const description = faker.lorem.lines();
const user = users[Math.floor(Math.random() * users.length)];
breweryPromises.push(
prisma.breweryPost.create({
data: { name, location, description, postedBy: { connect: { id: user.id } } },
}),
);
});
return Promise.all(breweryPromises);
};
const createNewBeerTypes = (users: User[]) => {
const beerTypePromises: Promise<BeerType>[] = [];
const types = [
'IPA',
'Pilsner',
'Stout',
'Lager',
'Wheat Beer',
'Belgian Ale',
'Pale Ale',
'Brown Ale',
'Sour Beer',
'Porter',
'Bock',
'Rauchbier',
'Sasion',
'Kolsch',
'Helles',
'Weizenbock',
'Doppelbock',
'Eisbock',
'Barley Wine',
];
types.forEach((type) => {
const user = users[Math.floor(Math.random() * users.length)];
beerTypePromises.push(
prisma.beerType.create({
data: { name: type, postedBy: { connect: { id: user.id } } },
}),
);
});
return Promise.all(beerTypePromises);
};
const createNewBeerPosts = (
users: User[],
breweryPosts: BreweryPost[],
beerTypes: BeerType[],
) => {
const beerPostPromises: Promise<BeerPost>[] = [];
Array.from({ length: 100 }).forEach(() => {
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)];
beerPostPromises.push(
prisma.beerPost.create({
data: {
abv: 10,
ibu: 10,
name: `${faker.commerce.productName()} ${beerType.name}`,
description: faker.lorem.lines(),
brewery: { connect: { id: breweryPost.id } },
postedBy: { connect: { id: user.id } },
type: { connect: { id: beerType.id } },
},
}),
);
});
return Promise.all(beerPostPromises);
};
async function main() {
const users = await createNewUsers();
const breweryPosts = await createNewBreweryPosts(users);
const beerTypes = await createNewBeerTypes(users);
const beerPosts = await createNewBeerPosts(users, breweryPosts, beerTypes);
console.log({ users, breweryPosts, beerTypes, beerPosts });
}
main().then(() => {
console.log('Seeded database.');
});