mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 10:42:08 +00:00
Update seed to do bulk insert
This commit is contained in:
@@ -54,8 +54,6 @@ const useBeerPostComments = ({ id, pageSize }: UseBeerPostCommentsProps) => {
|
|||||||
|
|
||||||
const isAtEnd = !(size < data?.[0].pageCount!);
|
const isAtEnd = !(size < data?.[0].pageCount!);
|
||||||
|
|
||||||
console.log(comments);
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
comments,
|
comments,
|
||||||
isLoading,
|
isLoading,
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { BeerPost, BeerImage, User } from '@prisma/client';
|
import { BeerPost, User } from '@prisma/client';
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
|
|
||||||
interface CreateNewBeerImagesArgs {
|
interface CreateNewBeerImagesArgs {
|
||||||
@@ -8,13 +8,22 @@ interface CreateNewBeerImagesArgs {
|
|||||||
joinData: { beerPosts: BeerPost[]; users: User[] };
|
joinData: { beerPosts: BeerPost[]; users: User[] };
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BeerImageData {
|
||||||
|
path: string;
|
||||||
|
alt: string;
|
||||||
|
caption: string;
|
||||||
|
beerPostId: string;
|
||||||
|
postedById: string;
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
const createNewBeerImages = async ({
|
const createNewBeerImages = async ({
|
||||||
numberOfImages,
|
numberOfImages,
|
||||||
joinData: { beerPosts, users },
|
joinData: { beerPosts, users },
|
||||||
}: CreateNewBeerImagesArgs) => {
|
}: CreateNewBeerImagesArgs) => {
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const createdAt = faker.date.past(1);
|
const createdAt = faker.date.past(1);
|
||||||
const beerImagesPromises: Promise<BeerImage>[] = [];
|
|
||||||
|
const beerImageData: BeerImageData[] = [];
|
||||||
|
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfImages; i++) {
|
for (let i = 0; i < numberOfImages; i++) {
|
||||||
@@ -23,21 +32,18 @@ const createNewBeerImages = async ({
|
|||||||
const caption = faker.lorem.sentence();
|
const caption = faker.lorem.sentence();
|
||||||
const alt = faker.lorem.sentence();
|
const alt = faker.lorem.sentence();
|
||||||
|
|
||||||
beerImagesPromises.push(
|
beerImageData.push({
|
||||||
prisma.beerImage.create({
|
path: 'https://picsum.photos/5000/5000',
|
||||||
data: {
|
alt,
|
||||||
path: 'https://picsum.photos/5000/5000',
|
caption,
|
||||||
alt,
|
beerPostId: beerPost.id,
|
||||||
caption,
|
postedById: user.id,
|
||||||
beerPost: { connect: { id: beerPost.id } },
|
createdAt,
|
||||||
postedBy: { connect: { id: user.id } },
|
});
|
||||||
createdAt,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.all(beerImagesPromises);
|
await prisma.beerImage.createMany({ data: beerImageData });
|
||||||
|
return prisma.beerImage.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBeerImages;
|
export default createNewBeerImages;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { BeerComment, BeerPost, User } from '@prisma/client';
|
import { BeerPost, User } from '@prisma/client';
|
||||||
|
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
|
|
||||||
@@ -11,32 +11,46 @@ interface CreateNewBeerCommentsArgs {
|
|||||||
users: User[];
|
users: User[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BeerCommentData {
|
||||||
|
content: string;
|
||||||
|
postedById: string;
|
||||||
|
beerPostId: string;
|
||||||
|
rating: number;
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBeerComments = async ({
|
const createNewBeerComments = async ({
|
||||||
numberOfComments,
|
numberOfComments,
|
||||||
joinData,
|
joinData,
|
||||||
}: CreateNewBeerCommentsArgs) => {
|
}: CreateNewBeerCommentsArgs) => {
|
||||||
const { beerPosts, users } = joinData;
|
const { beerPosts, users } = joinData;
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const beerCommentPromises: Promise<BeerComment>[] = [];
|
|
||||||
|
const beerCommentData: BeerCommentData[] = [];
|
||||||
|
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfComments; i++) {
|
for (let i = 0; i < numberOfComments; i++) {
|
||||||
const content = faker.lorem.lines(5);
|
const content = faker.lorem.lines(5);
|
||||||
const user = users[Math.floor(Math.random() * users.length)];
|
const user = users[Math.floor(Math.random() * users.length)];
|
||||||
const beerPost = beerPosts[Math.floor(Math.random() * beerPosts.length)];
|
const beerPost = beerPosts[Math.floor(Math.random() * beerPosts.length)];
|
||||||
const createdAt = faker.date.past(1);
|
const createdAt = faker.date.past(1);
|
||||||
beerCommentPromises.push(
|
const rating = Math.floor(Math.random() * 5) + 1;
|
||||||
prisma.beerComment.create({
|
|
||||||
data: {
|
beerCommentData.push({
|
||||||
content,
|
content,
|
||||||
postedBy: { connect: { id: user.id } },
|
postedById: user.id,
|
||||||
beerPost: { connect: { id: beerPost.id } },
|
beerPostId: beerPost.id,
|
||||||
rating: Math.floor(Math.random() * 5) + 1,
|
createdAt,
|
||||||
createdAt,
|
rating,
|
||||||
},
|
});
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Promise.all(beerCommentPromises);
|
|
||||||
|
await prisma.beerComment.createMany({
|
||||||
|
data: beerCommentData,
|
||||||
|
});
|
||||||
|
|
||||||
|
return prisma.beerComment.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBeerComments;
|
export default createNewBeerComments;
|
||||||
|
|||||||
@@ -1,34 +1,36 @@
|
|||||||
import type { BeerPost, BeerPostLike, User } from '@prisma/client';
|
import type { BeerPost, User } from '@prisma/client';
|
||||||
|
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
|
|
||||||
|
interface BeerPostLikeData {
|
||||||
|
beerPostId: string;
|
||||||
|
likedById: string;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBeerPostLikes = async ({
|
const createNewBeerPostLikes = async ({
|
||||||
joinData: { beerPosts, users },
|
joinData: { beerPosts, users },
|
||||||
numberOfLikes,
|
numberOfLikes,
|
||||||
}: {
|
}: {
|
||||||
joinData: {
|
joinData: { beerPosts: BeerPost[]; users: User[] };
|
||||||
beerPosts: BeerPost[];
|
|
||||||
users: User[];
|
|
||||||
};
|
|
||||||
numberOfLikes: number;
|
numberOfLikes: number;
|
||||||
}) => {
|
}) => {
|
||||||
const beerPostLikePromises: Promise<BeerPostLike>[] = [];
|
const beerPostLikeData: BeerPostLikeData[] = [];
|
||||||
|
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfLikes; i++) {
|
for (let i = 0; i < numberOfLikes; i++) {
|
||||||
const beerPost = beerPosts[Math.floor(Math.random() * beerPosts.length)];
|
const beerPost = beerPosts[Math.floor(Math.random() * beerPosts.length)];
|
||||||
const user = users[Math.floor(Math.random() * users.length)];
|
const user = users[Math.floor(Math.random() * users.length)];
|
||||||
|
|
||||||
beerPostLikePromises.push(
|
beerPostLikeData.push({
|
||||||
DBClient.instance.beerPostLike.create({
|
beerPostId: beerPost.id,
|
||||||
data: {
|
likedById: user.id,
|
||||||
beerPost: { connect: { id: beerPost.id } },
|
});
|
||||||
likedBy: { connect: { id: user.id } },
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.all(beerPostLikePromises);
|
await DBClient.instance.beerPostLike.createMany({
|
||||||
|
data: beerPostLikeData,
|
||||||
|
});
|
||||||
|
|
||||||
|
return DBClient.instance.beerPostLike.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBeerPostLikes;
|
export default createNewBeerPostLikes;
|
||||||
|
|||||||
@@ -13,13 +13,24 @@ interface CreateNewBeerPostsArgs {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BeerPostData {
|
||||||
|
abv: number;
|
||||||
|
ibu: number;
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
createdAt: Date;
|
||||||
|
breweryId: string;
|
||||||
|
postedById: string;
|
||||||
|
typeId: string;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBeerPosts = async ({
|
const createNewBeerPosts = async ({
|
||||||
numberOfPosts,
|
numberOfPosts,
|
||||||
joinData,
|
joinData,
|
||||||
}: CreateNewBeerPostsArgs) => {
|
}: CreateNewBeerPostsArgs) => {
|
||||||
const { users, breweryPosts, beerTypes } = joinData;
|
const { users, breweryPosts, beerTypes } = joinData;
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const beerPostPromises = [];
|
const beerPostData: BeerPostData[] = [];
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfPosts; i++) {
|
for (let i = 0; i < numberOfPosts; i++) {
|
||||||
const user = users[Math.floor(Math.random() * users.length)];
|
const user = users[Math.floor(Math.random() * users.length)];
|
||||||
@@ -32,22 +43,20 @@ const createNewBeerPosts = async ({
|
|||||||
const name = faker.commerce.productName();
|
const name = faker.commerce.productName();
|
||||||
const description = faker.lorem.lines(20).replace(/(\r\n|\n|\r)/gm, ' ');
|
const description = faker.lorem.lines(20).replace(/(\r\n|\n|\r)/gm, ' ');
|
||||||
|
|
||||||
beerPostPromises.push(
|
beerPostData.push({
|
||||||
prisma.beerPost.create({
|
postedById: user.id,
|
||||||
data: {
|
typeId: beerType.id,
|
||||||
abv,
|
breweryId: breweryPost.id,
|
||||||
ibu,
|
createdAt,
|
||||||
name,
|
abv,
|
||||||
description,
|
ibu,
|
||||||
createdAt,
|
name,
|
||||||
brewery: { connect: { id: breweryPost.id } },
|
description,
|
||||||
postedBy: { connect: { id: user.id } },
|
});
|
||||||
type: { connect: { id: beerType.id } },
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Promise.all(beerPostPromises);
|
|
||||||
|
await prisma.beerPost.createMany({ data: beerPostData });
|
||||||
|
return prisma.beerPost.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBeerPosts;
|
export default createNewBeerPosts;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { User, BeerType } from '@prisma/client';
|
import { User } from '@prisma/client';
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
|
|
||||||
interface CreateNewBeerTypesArgs {
|
interface CreateNewBeerTypesArgs {
|
||||||
@@ -9,10 +9,17 @@ interface CreateNewBeerTypesArgs {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BeerTypeData {
|
||||||
|
name: string;
|
||||||
|
postedById: string;
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBeerTypes = async ({ joinData }: CreateNewBeerTypesArgs) => {
|
const createNewBeerTypes = async ({ joinData }: CreateNewBeerTypesArgs) => {
|
||||||
const { users } = joinData;
|
const { users } = joinData;
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const beerTypePromises: Promise<BeerType>[] = [];
|
|
||||||
|
const beerTypeData: BeerTypeData[] = [];
|
||||||
|
|
||||||
const types = [
|
const types = [
|
||||||
'IPA',
|
'IPA',
|
||||||
@@ -39,14 +46,16 @@ const createNewBeerTypes = async ({ joinData }: CreateNewBeerTypesArgs) => {
|
|||||||
types.forEach((type) => {
|
types.forEach((type) => {
|
||||||
const user = users[Math.floor(Math.random() * users.length)];
|
const user = users[Math.floor(Math.random() * users.length)];
|
||||||
const createdAt = faker.date.past(1);
|
const createdAt = faker.date.past(1);
|
||||||
beerTypePromises.push(
|
|
||||||
prisma.beerType.create({
|
beerTypeData.push({
|
||||||
data: { name: type, postedBy: { connect: { id: user.id } }, createdAt },
|
name: type,
|
||||||
}),
|
postedById: user.id,
|
||||||
);
|
createdAt,
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(beerTypePromises);
|
await prisma.beerType.createMany({ data: beerTypeData, skipDuplicates: true });
|
||||||
|
return prisma.beerType.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBeerTypes;
|
export default createNewBeerTypes;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { BreweryPost, BreweryImage, User } from '@prisma/client';
|
import { BreweryPost, User } from '@prisma/client';
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
|
|
||||||
interface CreateBreweryImagesArgs {
|
interface CreateBreweryImagesArgs {
|
||||||
@@ -11,34 +11,42 @@ interface CreateBreweryImagesArgs {
|
|||||||
users: User[];
|
users: User[];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
interface BreweryImageData {
|
||||||
|
path: string;
|
||||||
|
alt: string;
|
||||||
|
caption: string;
|
||||||
|
breweryPostId: string;
|
||||||
|
postedById: string;
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBreweryImages = async ({
|
const createNewBreweryImages = async ({
|
||||||
numberOfImages,
|
numberOfImages,
|
||||||
joinData: { breweryPosts, users },
|
joinData: { breweryPosts, users },
|
||||||
}: CreateBreweryImagesArgs) => {
|
}: CreateBreweryImagesArgs) => {
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const createdAt = faker.date.past(1);
|
const createdAt = faker.date.past(1);
|
||||||
const breweryImagesPromises: Promise<BreweryImage>[] = [];
|
const breweryImageData: BreweryImageData[] = [];
|
||||||
|
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfImages; i++) {
|
for (let i = 0; i < numberOfImages; i++) {
|
||||||
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
|
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
|
||||||
const user = users[Math.floor(Math.random() * users.length)];
|
const user = users[Math.floor(Math.random() * users.length)];
|
||||||
|
|
||||||
breweryImagesPromises.push(
|
breweryImageData.push({
|
||||||
prisma.breweryImage.create({
|
path: 'https://picsum.photos/5000/5000',
|
||||||
data: {
|
alt: 'Placeholder brewery image.',
|
||||||
path: 'https://picsum.photos/5000/5000',
|
caption: 'Placeholder brewery image caption.',
|
||||||
alt: 'Placeholder brewery image.',
|
breweryPostId: breweryPost.id,
|
||||||
caption: 'Placeholder brewery image caption.',
|
postedById: user.id,
|
||||||
breweryPost: { connect: { id: breweryPost.id } },
|
createdAt,
|
||||||
postedBy: { connect: { id: user.id } },
|
});
|
||||||
createdAt,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Promise.all(breweryImagesPromises);
|
await prisma.breweryImage.createMany({
|
||||||
};
|
data: breweryImageData,
|
||||||
|
});
|
||||||
|
|
||||||
|
return prisma.breweryImage.findMany();
|
||||||
|
};
|
||||||
export default createNewBreweryImages;
|
export default createNewBreweryImages;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
// eslint-disable-next-line import/no-extraneous-dependencies
|
// eslint-disable-next-line import/no-extraneous-dependencies
|
||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { BreweryComment, BreweryPost, User } from '@prisma/client';
|
import { BreweryPost, User } from '@prisma/client';
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
|
|
||||||
interface CreateNewBreweryPostCommentsArgs {
|
interface CreateNewBreweryPostCommentsArgs {
|
||||||
@@ -11,32 +11,40 @@ interface CreateNewBreweryPostCommentsArgs {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BreweryPostCommentData {
|
||||||
|
content: string;
|
||||||
|
postedById: string;
|
||||||
|
breweryPostId: string;
|
||||||
|
rating: number;
|
||||||
|
createdAt: Date;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBreweryPostComments = async ({
|
const createNewBreweryPostComments = async ({
|
||||||
numberOfComments,
|
numberOfComments,
|
||||||
joinData,
|
joinData,
|
||||||
}: CreateNewBreweryPostCommentsArgs) => {
|
}: CreateNewBreweryPostCommentsArgs) => {
|
||||||
const { breweryPosts, users } = joinData;
|
const { breweryPosts, users } = joinData;
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const breweryCommentPromises: Promise<BreweryComment>[] = [];
|
const breweryPostCommentData: BreweryPostCommentData[] = [];
|
||||||
const createdAt = faker.date.past(1);
|
const createdAt = faker.date.past(1);
|
||||||
|
const rating = Math.floor(Math.random() * 5) + 1;
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfComments; i++) {
|
for (let i = 0; i < numberOfComments; i++) {
|
||||||
const content = faker.lorem.lines(5);
|
const content = faker.lorem.lines(5);
|
||||||
const user = users[Math.floor(Math.random() * users.length)];
|
const user = users[Math.floor(Math.random() * users.length)];
|
||||||
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
|
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
|
||||||
breweryCommentPromises.push(
|
|
||||||
prisma.breweryComment.create({
|
breweryPostCommentData.push({
|
||||||
data: {
|
content,
|
||||||
content,
|
createdAt,
|
||||||
postedBy: { connect: { id: user.id } },
|
rating,
|
||||||
breweryPost: { connect: { id: breweryPost.id } },
|
postedById: user.id,
|
||||||
rating: Math.floor(Math.random() * 5) + 1,
|
breweryPostId: breweryPost.id,
|
||||||
createdAt,
|
});
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Promise.all(breweryCommentPromises);
|
await prisma.breweryComment.createMany({ data: breweryPostCommentData });
|
||||||
|
|
||||||
|
return prisma.breweryComment.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBreweryPostComments;
|
export default createNewBreweryPostComments;
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
import type { BreweryPost, BreweryPostLike, User } from '@prisma/client';
|
import type { BreweryPost, User } from '@prisma/client';
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
|
|
||||||
|
interface BreweryPostLikeData {
|
||||||
|
breweryPostId: string;
|
||||||
|
likedById: string;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBreweryPostLikes = async ({
|
const createNewBreweryPostLikes = async ({
|
||||||
joinData: { breweryPosts, users },
|
joinData: { breweryPosts, users },
|
||||||
numberOfLikes,
|
numberOfLikes,
|
||||||
@@ -11,23 +16,22 @@ const createNewBreweryPostLikes = async ({
|
|||||||
};
|
};
|
||||||
numberOfLikes: number;
|
numberOfLikes: number;
|
||||||
}) => {
|
}) => {
|
||||||
const breweryPostLikePromises: Promise<BreweryPostLike>[] = [];
|
const breweryPostLikeData: BreweryPostLikeData[] = [];
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfLikes; i++) {
|
for (let i = 0; i < numberOfLikes; i++) {
|
||||||
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
|
const breweryPost = breweryPosts[Math.floor(Math.random() * breweryPosts.length)];
|
||||||
const user = users[Math.floor(Math.random() * users.length)];
|
const user = users[Math.floor(Math.random() * users.length)];
|
||||||
|
|
||||||
breweryPostLikePromises.push(
|
breweryPostLikeData.push({
|
||||||
DBClient.instance.breweryPostLike.create({
|
breweryPostId: breweryPost.id,
|
||||||
data: {
|
likedById: user.id,
|
||||||
breweryPost: { connect: { id: breweryPost.id } },
|
});
|
||||||
likedBy: { connect: { id: user.id } },
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
await DBClient.instance.breweryPostLike.createMany({
|
||||||
|
data: breweryPostLikeData,
|
||||||
|
});
|
||||||
|
|
||||||
return Promise.all(breweryPostLikePromises);
|
return DBClient.instance.breweryPostLike.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBreweryPostLikes;
|
export default createNewBreweryPostLikes;
|
||||||
|
|||||||
@@ -11,6 +11,15 @@ interface CreateNewBreweryPostsArgs {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface BreweryData {
|
||||||
|
name: string;
|
||||||
|
locationId: string;
|
||||||
|
description: string;
|
||||||
|
postedById: string;
|
||||||
|
createdAt: Date;
|
||||||
|
dateEstablished: Date;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewBreweryPosts = async ({
|
const createNewBreweryPosts = async ({
|
||||||
numberOfPosts,
|
numberOfPosts,
|
||||||
joinData,
|
joinData,
|
||||||
@@ -18,7 +27,7 @@ const createNewBreweryPosts = async ({
|
|||||||
const { users, locations } = joinData;
|
const { users, locations } = joinData;
|
||||||
|
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const breweryPromises = [];
|
const breweryData: BreweryData[] = [];
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfPosts; i++) {
|
for (let i = 0; i < numberOfPosts; i++) {
|
||||||
const name = `${faker.commerce.productName()} Brewing Company`;
|
const name = `${faker.commerce.productName()} Brewing Company`;
|
||||||
@@ -30,20 +39,18 @@ const createNewBreweryPosts = async ({
|
|||||||
const createdAt = faker.date.past(1);
|
const createdAt = faker.date.past(1);
|
||||||
const dateEstablished = faker.date.past(40);
|
const dateEstablished = faker.date.past(40);
|
||||||
|
|
||||||
breweryPromises.push(
|
breweryData.push({
|
||||||
prisma.breweryPost.create({
|
name,
|
||||||
data: {
|
locationId: location.id,
|
||||||
name,
|
description,
|
||||||
description,
|
postedById: user.id,
|
||||||
createdAt,
|
createdAt,
|
||||||
dateEstablished,
|
dateEstablished,
|
||||||
postedBy: { connect: { id: user.id } },
|
});
|
||||||
location: { connect: { id: location.id } },
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Promise.all(breweryPromises);
|
await prisma.breweryPost.createMany({ data: breweryData, skipDuplicates: true });
|
||||||
|
|
||||||
|
return prisma.breweryPost.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewBreweryPosts;
|
export default createNewBreweryPosts;
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/* eslint-disable import/no-extraneous-dependencies */
|
/* eslint-disable import/no-extraneous-dependencies */
|
||||||
import { faker } from '@faker-js/faker';
|
import { faker } from '@faker-js/faker';
|
||||||
import { User, Location } from '@prisma/client';
|
import { User } from '@prisma/client';
|
||||||
import { GeocodeFeature } from '@mapbox/mapbox-sdk/services/geocoding';
|
import { GeocodeFeature } from '@mapbox/mapbox-sdk/services/geocoding';
|
||||||
import DBClient from '../../DBClient';
|
import DBClient from '../../DBClient';
|
||||||
import geocode from '../../../config/mapbox/geocoder';
|
import geocode from '../../../config/mapbox/geocoder';
|
||||||
@@ -12,6 +12,15 @@ interface CreateNewLocationsArgs {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface LocationData {
|
||||||
|
city: string;
|
||||||
|
stateOrProvince?: string;
|
||||||
|
country?: string;
|
||||||
|
coordinates: number[];
|
||||||
|
address: string;
|
||||||
|
postedById: string;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewLocations = async ({
|
const createNewLocations = async ({
|
||||||
numberOfLocations,
|
numberOfLocations,
|
||||||
joinData,
|
joinData,
|
||||||
@@ -33,31 +42,31 @@ const createNewLocations = async ({
|
|||||||
|
|
||||||
const geocodedLocations = await Promise.all(geocodePromises);
|
const geocodedLocations = await Promise.all(geocodePromises);
|
||||||
|
|
||||||
const locationPromises: Promise<Location>[] = [];
|
const locationData: LocationData[] = [];
|
||||||
|
|
||||||
geocodedLocations.forEach((geodata) => {
|
geocodedLocations.forEach((geodata) => {
|
||||||
|
const randomUser = joinData.users[Math.floor(Math.random() * joinData.users.length)];
|
||||||
|
|
||||||
const city = geodata.text;
|
const city = geodata.text;
|
||||||
const user = joinData.users[Math.floor(Math.random() * joinData.users.length)];
|
const postedById = randomUser.id;
|
||||||
const stateOrProvince = geodata.context?.find((c) => c.id.startsWith('region'))?.text;
|
const stateOrProvince = geodata.context?.find((c) => c.id.startsWith('region'))?.text;
|
||||||
const country = geodata.context?.find((c) => c.id.startsWith('country'))?.text;
|
const country = geodata.context?.find((c) => c.id.startsWith('country'))?.text;
|
||||||
const coordinates = geodata.center;
|
const coordinates = geodata.center;
|
||||||
const address = geodata.place_name;
|
const address = geodata.place_name;
|
||||||
|
|
||||||
locationPromises.push(
|
locationData.push({
|
||||||
prisma.location.create({
|
city,
|
||||||
data: {
|
stateOrProvince,
|
||||||
city,
|
country,
|
||||||
stateOrProvince,
|
coordinates,
|
||||||
country,
|
address,
|
||||||
coordinates,
|
postedById,
|
||||||
address,
|
});
|
||||||
postedBy: { connect: { id: user.id } },
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return Promise.all(locationPromises);
|
await prisma.location.createMany({ data: locationData, skipDuplicates: true });
|
||||||
|
|
||||||
|
return prisma.location.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewLocations;
|
export default createNewLocations;
|
||||||
|
|||||||
@@ -8,55 +8,42 @@ interface CreateNewUsersArgs {
|
|||||||
numberOfUsers: number;
|
numberOfUsers: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface UserData {
|
||||||
|
firstName: string;
|
||||||
|
lastName: string;
|
||||||
|
email: string;
|
||||||
|
username: string;
|
||||||
|
dateOfBirth: Date;
|
||||||
|
createdAt: Date;
|
||||||
|
hash: string;
|
||||||
|
}
|
||||||
|
|
||||||
const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
|
const createNewUsers = async ({ numberOfUsers }: CreateNewUsersArgs) => {
|
||||||
const prisma = DBClient.instance;
|
const prisma = DBClient.instance;
|
||||||
const userPromises = [];
|
|
||||||
|
|
||||||
const hashedPasswords = await Promise.all(
|
const hashedPasswords = await Promise.all(
|
||||||
Array.from({ length: numberOfUsers }, () => argon2.hash(faker.internet.password())),
|
Array.from({ length: numberOfUsers }, () => argon2.hash(faker.internet.password())),
|
||||||
);
|
);
|
||||||
|
|
||||||
const takenEmails: string[] = [];
|
const data: UserData[] = [];
|
||||||
const takenUsernames: string[] = [];
|
|
||||||
|
|
||||||
// eslint-disable-next-line no-plusplus
|
// eslint-disable-next-line no-plusplus
|
||||||
for (let i = 0; i < numberOfUsers; i++) {
|
for (let i = 0; i < numberOfUsers; i++) {
|
||||||
const randomValue = crypto.randomBytes(10).toString('hex');
|
const randomValue = crypto.randomBytes(4).toString('hex');
|
||||||
const firstName = faker.name.firstName();
|
const firstName = faker.name.firstName();
|
||||||
const lastName = faker.name.lastName();
|
const lastName = faker.name.lastName();
|
||||||
const username = `${firstName[0]}.${lastName}.${randomValue}`;
|
const username = `${firstName[0]}.${lastName}.${randomValue}`;
|
||||||
const email = faker.internet.email(firstName, randomValue, 'example.com');
|
const email = faker.internet.email(firstName, randomValue, 'example.com');
|
||||||
|
|
||||||
const usernameTaken = takenUsernames.includes(username);
|
|
||||||
const emailTaken = takenEmails.includes(email);
|
|
||||||
|
|
||||||
if (usernameTaken || emailTaken) {
|
|
||||||
i -= 1;
|
|
||||||
// eslint-disable-next-line no-continue
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
takenEmails.push(email);
|
|
||||||
takenUsernames.push(username);
|
|
||||||
|
|
||||||
const hash = hashedPasswords[i];
|
const hash = hashedPasswords[i];
|
||||||
const dateOfBirth = faker.date.birthdate({ mode: 'age', min: 19 });
|
const dateOfBirth = faker.date.birthdate({ mode: 'age', min: 19 });
|
||||||
const createdAt = faker.date.past(1);
|
const createdAt = faker.date.past(1);
|
||||||
userPromises.push(
|
|
||||||
prisma.user.create({
|
const user = { firstName, lastName, email, username, dateOfBirth, createdAt, hash };
|
||||||
data: {
|
data.push(user);
|
||||||
firstName,
|
|
||||||
lastName,
|
|
||||||
email,
|
|
||||||
username,
|
|
||||||
dateOfBirth,
|
|
||||||
createdAt,
|
|
||||||
hash,
|
|
||||||
},
|
|
||||||
}),
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
return Promise.all(userPromises);
|
|
||||||
|
await prisma.user.createMany({ data, skipDuplicates: true });
|
||||||
|
return prisma.user.findMany();
|
||||||
};
|
};
|
||||||
|
|
||||||
export default createNewUsers;
|
export default createNewUsers;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { performance } from 'perf_hooks';
|
import { performance } from 'perf_hooks';
|
||||||
|
import { exit } from 'process';
|
||||||
import logger from '../../config/pino/logger';
|
|
||||||
|
|
||||||
import cleanDatabase from './clean/cleanDatabase';
|
import cleanDatabase from './clean/cleanDatabase';
|
||||||
|
|
||||||
@@ -15,6 +14,7 @@ import createNewBreweryPosts from './create/createNewBreweryPosts';
|
|||||||
import createNewUsers from './create/createNewUsers';
|
import createNewUsers from './create/createNewUsers';
|
||||||
import createNewBreweryPostLikes from './create/createNewBreweryPostLikes';
|
import createNewBreweryPostLikes from './create/createNewBreweryPostLikes';
|
||||||
import createNewLocations from './create/createNewLocations';
|
import createNewLocations from './create/createNewLocations';
|
||||||
|
import logger from '../../config/pino/logger';
|
||||||
|
|
||||||
(async () => {
|
(async () => {
|
||||||
try {
|
try {
|
||||||
@@ -22,36 +22,30 @@ import createNewLocations from './create/createNewLocations';
|
|||||||
|
|
||||||
logger.info('Clearing database.');
|
logger.info('Clearing database.');
|
||||||
await cleanDatabase();
|
await cleanDatabase();
|
||||||
|
|
||||||
logger.info('Database cleared successfully, preparing to seed.');
|
logger.info('Database cleared successfully, preparing to seed.');
|
||||||
|
|
||||||
const users = await createNewUsers({ numberOfUsers: 1000 });
|
const users = await createNewUsers({ numberOfUsers: 10000 });
|
||||||
logger.info('Users created successfully.');
|
logger.info('Users created successfully.');
|
||||||
console.log(users);
|
|
||||||
|
|
||||||
const locations = await createNewLocations({
|
const locations = await createNewLocations({
|
||||||
numberOfLocations: 1500,
|
numberOfLocations: 150,
|
||||||
joinData: { users },
|
joinData: { users },
|
||||||
});
|
});
|
||||||
logger.info('Locations created successfully.');
|
logger.info('Locations created successfully.');
|
||||||
|
|
||||||
const [breweryPosts, beerTypes] = await Promise.all([
|
const [breweryPosts, beerTypes] = await Promise.all([
|
||||||
createNewBreweryPosts({ numberOfPosts: 1300, joinData: { users, locations } }),
|
createNewBreweryPosts({ numberOfPosts: 130, joinData: { users, locations } }),
|
||||||
createNewBeerTypes({ joinData: { users } }),
|
createNewBeerTypes({ joinData: { users } }),
|
||||||
]);
|
]);
|
||||||
logger.info('Brewery posts and beer types created successfully.');
|
logger.info('Brewery posts and beer types created successfully.');
|
||||||
|
|
||||||
const beerPosts = await createNewBeerPosts({
|
const beerPosts = await createNewBeerPosts({
|
||||||
numberOfPosts: 200,
|
numberOfPosts: 200,
|
||||||
joinData: { breweryPosts, beerTypes, users },
|
joinData: { breweryPosts, beerTypes, users },
|
||||||
});
|
});
|
||||||
logger.info('Beer posts created successfully.');
|
logger.info('Beer posts created successfully.');
|
||||||
const [
|
|
||||||
beerPostComments,
|
const [beerPostComments, breweryPostComments] = await Promise.all([
|
||||||
breweryPostComments,
|
|
||||||
beerPostLikes,
|
|
||||||
beerImages,
|
|
||||||
breweryImages,
|
|
||||||
] = await Promise.all([
|
|
||||||
createNewBeerPostComments({
|
createNewBeerPostComments({
|
||||||
numberOfComments: 45000,
|
numberOfComments: 45000,
|
||||||
joinData: { beerPosts, users },
|
joinData: { beerPosts, users },
|
||||||
@@ -60,6 +54,10 @@ import createNewLocations from './create/createNewLocations';
|
|||||||
numberOfComments: 45000,
|
numberOfComments: 45000,
|
||||||
joinData: { breweryPosts, users },
|
joinData: { breweryPosts, users },
|
||||||
}),
|
}),
|
||||||
|
]);
|
||||||
|
logger.info('Created beer post comments and brewery post comments.');
|
||||||
|
|
||||||
|
const [beerPostLikes, breweryPostLikes] = await Promise.all([
|
||||||
createNewBeerPostLikes({
|
createNewBeerPostLikes({
|
||||||
numberOfLikes: 10000,
|
numberOfLikes: 10000,
|
||||||
joinData: { beerPosts, users },
|
joinData: { beerPosts, users },
|
||||||
@@ -68,43 +66,43 @@ import createNewLocations from './create/createNewLocations';
|
|||||||
numberOfLikes: 10000,
|
numberOfLikes: 10000,
|
||||||
joinData: { breweryPosts, users },
|
joinData: { breweryPosts, users },
|
||||||
}),
|
}),
|
||||||
|
]);
|
||||||
|
logger.info('Created beer post likes, and brewery post likes.');
|
||||||
|
|
||||||
|
const [beerImages, breweryImages] = await Promise.all([
|
||||||
createNewBeerImages({
|
createNewBeerImages({
|
||||||
numberOfImages: 1000,
|
numberOfImages: 100000,
|
||||||
joinData: { beerPosts, users },
|
joinData: { beerPosts, users },
|
||||||
}),
|
}),
|
||||||
createNewBreweryImages({
|
createNewBreweryImages({
|
||||||
numberOfImages: 1000,
|
numberOfImages: 100000,
|
||||||
joinData: { breweryPosts, users },
|
joinData: { breweryPosts, users },
|
||||||
}),
|
}),
|
||||||
]);
|
]);
|
||||||
|
logger.info('Created beer images and brewery images.');
|
||||||
logger.info(
|
|
||||||
'Beer post comments, brewery post comments, beer post likes, beer images, and brewery images created successfully.',
|
|
||||||
);
|
|
||||||
|
|
||||||
const end = performance.now();
|
const end = performance.now();
|
||||||
const timeElapsed = (end - start) / 1000;
|
const timeElapsed = (end - start) / 1000;
|
||||||
|
|
||||||
logger.info('Database seeded successfully.');
|
logger.info('Database seeded successfully.');
|
||||||
|
|
||||||
logger.info({
|
logger.info({
|
||||||
numberOfUsers: users.length,
|
numberOfUsers: users.length,
|
||||||
numberOfBreweryPosts: breweryPosts.length,
|
numberOfBreweryPosts: breweryPosts.length,
|
||||||
numberOfBeerPosts: beerPosts.length,
|
numberOfBeerPosts: beerPosts.length,
|
||||||
numberOfBeerTypes: beerTypes.length,
|
numberOfBeerTypes: beerTypes.length,
|
||||||
numberOfBeerPostLikes: beerPostLikes.length,
|
numberOfBeerPostLikes: beerPostLikes.length,
|
||||||
|
numberofBreweryPostLikes: breweryPostLikes.length,
|
||||||
numberOfBeerPostComments: beerPostComments.length,
|
numberOfBeerPostComments: beerPostComments.length,
|
||||||
numberOfBreweryPostComments: breweryPostComments.length,
|
numberOfBreweryPostComments: breweryPostComments.length,
|
||||||
numberOfBeerImages: beerImages.length,
|
numberOfBeerImages: beerImages.length,
|
||||||
numberOfBreweryImages: breweryImages.length,
|
numberOfBreweryImages: breweryImages.length,
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.info(`Database seeded in ${timeElapsed.toFixed(2)} seconds.`);
|
logger.info(`Database seeded in ${timeElapsed.toFixed(2)} seconds.`);
|
||||||
|
|
||||||
process.exit(0);
|
exit(0);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error('Error seeding database.');
|
logger.error('Error seeding database.');
|
||||||
logger.error(error);
|
logger.error(error);
|
||||||
process.exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user