Refactor: update like services

This commit is contained in:
Aaron William Po
2023-12-13 12:38:00 -05:00
parent fdbadb63dc
commit 0de4697e77
25 changed files with 484 additions and 212 deletions

133
package-lock.json generated
View File

@@ -16,7 +16,7 @@
"@mapbox/search-js-core": "^1.0.0-beta.17",
"@mapbox/search-js-react": "^1.0.0-beta.17",
"@next/bundle-analyzer": "^14.0.3",
"@prisma/client": "^5.6.0",
"@prisma/client": "^5.7.0",
"@react-email/components": "^0.0.11",
"@react-email/render": "^0.0.9",
"@react-email/tailwind": "^0.0.12",
@@ -79,7 +79,7 @@
"prettier": "^3.0.0",
"prettier-plugin-jsdoc": "^1.0.2",
"prettier-plugin-tailwindcss": "^0.5.7",
"prisma": "^5.6.0",
"prisma": "^5.7.0",
"tailwindcss": "^3.3.3",
"tailwindcss-animate": "^1.0.6",
"ts-node": "^10.9.1",
@@ -1633,13 +1633,10 @@
"integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg=="
},
"node_modules/@prisma/client": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.6.0.tgz",
"integrity": "sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==",
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.7.0.tgz",
"integrity": "sha512-cZmglCrfNbYpzUtz7HscVHl38e9CrUs31nrVoGUK1nIPXGgt8hT4jj2s657UXcNdQ/jBUxDgGmHyu2Nyrq1txg==",
"hasInstallScript": true,
"dependencies": {
"@prisma/engines-version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee"
},
"engines": {
"node": ">=16.13"
},
@@ -1652,17 +1649,50 @@
}
}
},
"node_modules/@prisma/debug": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.7.0.tgz",
"integrity": "sha512-tZ+MOjWlVvz1kOEhNYMa4QUGURY+kgOUBqLHYIV8jmCsMuvA1tWcn7qtIMLzYWCbDcQT4ZS8xDgK0R2gl6/0wA==",
"devOptional": true
},
"node_modules/@prisma/engines": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz",
"integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==",
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.7.0.tgz",
"integrity": "sha512-TkOMgMm60n5YgEKPn9erIvFX2/QuWnl3GBo6yTRyZKk5O5KQertXiNnrYgSLy0SpsKmhovEPQb+D4l0SzyE7XA==",
"devOptional": true,
"hasInstallScript": true
"hasInstallScript": true,
"dependencies": {
"@prisma/debug": "5.7.0",
"@prisma/engines-version": "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9",
"@prisma/fetch-engine": "5.7.0",
"@prisma/get-platform": "5.7.0"
}
},
"node_modules/@prisma/engines-version": {
"version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz",
"integrity": "sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw=="
"version": "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9.tgz",
"integrity": "sha512-V6tgRVi62jRwTm0Hglky3Scwjr/AKFBFtS+MdbsBr7UOuiu1TKLPc6xfPiyEN1+bYqjEtjxwGsHgahcJsd1rNg==",
"devOptional": true
},
"node_modules/@prisma/fetch-engine": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.7.0.tgz",
"integrity": "sha512-zIn/qmO+N/3FYe7/L9o+yZseIU8ivh4NdPKSkQRIHfg2QVTVMnbhGoTcecbxfVubeTp+DjcbjS0H9fCuM4W04w==",
"devOptional": true,
"dependencies": {
"@prisma/debug": "5.7.0",
"@prisma/engines-version": "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9",
"@prisma/get-platform": "5.7.0"
}
},
"node_modules/@prisma/get-platform": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.7.0.tgz",
"integrity": "sha512-ZeV/Op4bZsWXuw5Tg05WwRI8BlKiRFhsixPcAM+5BKYSiUZiMKIi713tfT3drBq8+T0E1arNZgYSA9QYcglWNA==",
"devOptional": true,
"dependencies": {
"@prisma/debug": "5.7.0"
}
},
"node_modules/@radix-ui/react-compose-refs": {
"version": "1.0.1",
@@ -8532,13 +8562,13 @@
}
},
"node_modules/prisma": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-5.6.0.tgz",
"integrity": "sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==",
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-5.7.0.tgz",
"integrity": "sha512-0rcfXO2ErmGAtxnuTNHQT9ztL0zZheQjOI/VNJzdq87C3TlGPQtMqtM+KCwU6XtmkoEr7vbCQqA7HF9IY0ST+Q==",
"devOptional": true,
"hasInstallScript": true,
"dependencies": {
"@prisma/engines": "5.6.0"
"@prisma/engines": "5.7.0"
},
"bin": {
"prisma": "build/index.js"
@@ -11853,23 +11883,54 @@
"integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg=="
},
"@prisma/client": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.6.0.tgz",
"integrity": "sha512-mUDefQFa1wWqk4+JhKPYq8BdVoFk9NFMBXUI8jAkBfQTtgx8WPx02U2HB/XbAz3GSUJpeJOKJQtNvaAIDs6sug==",
"requires": {
"@prisma/engines-version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee"
}
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.7.0.tgz",
"integrity": "sha512-cZmglCrfNbYpzUtz7HscVHl38e9CrUs31nrVoGUK1nIPXGgt8hT4jj2s657UXcNdQ/jBUxDgGmHyu2Nyrq1txg==",
"requires": {}
},
"@prisma/engines": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.6.0.tgz",
"integrity": "sha512-Mt2q+GNJpU2vFn6kif24oRSBQv1KOkYaterQsi0k2/lA+dLvhRX6Lm26gon6PYHwUM8/h8KRgXIUMU0PCLB6bw==",
"@prisma/debug": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.7.0.tgz",
"integrity": "sha512-tZ+MOjWlVvz1kOEhNYMa4QUGURY+kgOUBqLHYIV8jmCsMuvA1tWcn7qtIMLzYWCbDcQT4ZS8xDgK0R2gl6/0wA==",
"devOptional": true
},
"@prisma/engines": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.7.0.tgz",
"integrity": "sha512-TkOMgMm60n5YgEKPn9erIvFX2/QuWnl3GBo6yTRyZKk5O5KQertXiNnrYgSLy0SpsKmhovEPQb+D4l0SzyE7XA==",
"devOptional": true,
"requires": {
"@prisma/debug": "5.7.0",
"@prisma/engines-version": "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9",
"@prisma/fetch-engine": "5.7.0",
"@prisma/get-platform": "5.7.0"
}
},
"@prisma/engines-version": {
"version": "5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.6.0-32.e95e739751f42d8ca026f6b910f5a2dc5adeaeee.tgz",
"integrity": "sha512-UoFgbV1awGL/3wXuUK3GDaX2SolqczeeJ5b4FVec9tzeGbSWJboPSbT0psSrmgYAKiKnkOPFSLlH6+b+IyOwAw=="
"version": "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9.tgz",
"integrity": "sha512-V6tgRVi62jRwTm0Hglky3Scwjr/AKFBFtS+MdbsBr7UOuiu1TKLPc6xfPiyEN1+bYqjEtjxwGsHgahcJsd1rNg==",
"devOptional": true
},
"@prisma/fetch-engine": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.7.0.tgz",
"integrity": "sha512-zIn/qmO+N/3FYe7/L9o+yZseIU8ivh4NdPKSkQRIHfg2QVTVMnbhGoTcecbxfVubeTp+DjcbjS0H9fCuM4W04w==",
"devOptional": true,
"requires": {
"@prisma/debug": "5.7.0",
"@prisma/engines-version": "5.7.0-41.79fb5193cf0a8fdbef536e4b4a159cad677ab1b9",
"@prisma/get-platform": "5.7.0"
}
},
"@prisma/get-platform": {
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.7.0.tgz",
"integrity": "sha512-ZeV/Op4bZsWXuw5Tg05WwRI8BlKiRFhsixPcAM+5BKYSiUZiMKIi713tfT3drBq8+T0E1arNZgYSA9QYcglWNA==",
"devOptional": true,
"requires": {
"@prisma/debug": "5.7.0"
}
},
"@radix-ui/react-compose-refs": {
"version": "1.0.1",
@@ -16765,12 +16826,12 @@
"integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg=="
},
"prisma": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-5.6.0.tgz",
"integrity": "sha512-EEaccku4ZGshdr2cthYHhf7iyvCcXqwJDvnoQRAJg5ge2Tzpv0e2BaMCp+CbbDUwoVTzwgOap9Zp+d4jFa2O9A==",
"version": "5.7.0",
"resolved": "https://registry.npmjs.org/prisma/-/prisma-5.7.0.tgz",
"integrity": "sha512-0rcfXO2ErmGAtxnuTNHQT9ztL0zZheQjOI/VNJzdq87C3TlGPQtMqtM+KCwU6XtmkoEr7vbCQqA7HF9IY0ST+Q==",
"devOptional": true,
"requires": {
"@prisma/engines": "5.6.0"
"@prisma/engines": "5.7.0"
}
},
"process": {

View File

@@ -1,7 +1,7 @@
import ServerError from '@/config/util/ServerError';
import {
addBeerImagesToDB,
deleteBeerImageFromDBAndStorage,
addBeerImagesService,
deleteBeerImageService,
} from '@/services/images/beer-image';
import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema';
import { NextApiResponse } from 'next';
@@ -19,7 +19,7 @@ export const processBeerImageData = async (
throw new ServerError('No images uploaded', 400);
}
const beerImages = await addBeerImagesToDB({
const beerImages = await addBeerImagesService({
beerPostId: req.query.id,
userId: user!.id,
body,
@@ -41,7 +41,7 @@ export const deleteBeerImageData = async (
) => {
const { id } = req.query;
await deleteBeerImageFromDBAndStorage({ beerImageId: id });
await deleteBeerImageService({ beerImageId: id });
res.status(200).json({
success: true,

View File

@@ -3,7 +3,7 @@ import ServerError from '@/config/util/ServerError';
import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema';
import { NextApiResponse } from 'next';
import { z } from 'zod';
import { addBreweryImagesToDB } from '@/services/images/brewery-image';
import { addBreweryImagesService } from '@/services/images/brewery-image';
import { UploadImagesRequest } from '../types';
// eslint-disable-next-line import/prefer-default-export
@@ -17,7 +17,7 @@ export const processBreweryImageData = async (
throw new ServerError('No images uploaded', 400);
}
const breweryImages = await addBreweryImagesToDB({
const breweryImages = await addBreweryImagesService({
breweryPostId: req.query.id,
userId: user!.id,
body,

View File

@@ -4,11 +4,14 @@ import ServerError from '@/config/util/ServerError';
import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema';
import { NextApiResponse, NextApiRequest } from 'next';
import { z } from 'zod';
import createBeerPostLike from '@/services/likes/beer-post-like/createBeerPostLike';
import findBeerPostLikeById from '@/services/likes/beer-post-like/findBeerPostLikeById';
import getBeerPostLikeCountByBeerPostId from '@/services/likes/beer-post-like/getBeerPostLikeCount';
import removeBeerPostLikeById from '@/services/likes/beer-post-like/removeBeerPostLikeById';
import { getBeerPostById } from '@/services/posts/beer-post';
import {
findBeerPostLikeByIdService,
createBeerPostLikeService,
removeBeerPostLikeService,
getBeerPostLikeCountService,
} from '@/services/likes/beer-post-like';
import { LikeRequest } from '../types';
export const sendBeerPostLikeRequest = async (
@@ -23,26 +26,30 @@ export const sendBeerPostLikeRequest = async (
throw new ServerError('Could not find a beer post with that id.', 404);
}
const alreadyLiked = await findBeerPostLikeById({
const liked = await findBeerPostLikeByIdService({
beerPostId: beer.id,
likedById: user.id,
});
const jsonResponse = {
success: true as const,
message: '',
statusCode: 200 as const,
};
if (liked) {
await removeBeerPostLikeService({ beerPostLikeId: liked.id });
res.status(200).json({
success: true,
message: 'Successfully unliked beer post.',
statusCode: 200,
payload: { liked: false },
});
if (alreadyLiked) {
await removeBeerPostLikeById({ beerLikeId: alreadyLiked.id });
jsonResponse.message = 'Successfully unliked beer post';
} else {
await createBeerPostLike({ id, user });
jsonResponse.message = 'Successfully liked beer post';
return;
}
res.status(200).json(jsonResponse);
await createBeerPostLikeService({ beerPostId: beer.id, likedById: user.id });
res.status(200).json({
success: true,
message: 'Successfully liked beer post.',
statusCode: 200,
payload: { liked: true },
});
};
export const getBeerPostLikeCount = async (
@@ -51,7 +58,7 @@ export const getBeerPostLikeCount = async (
) => {
const id = req.query.id as string;
const likeCount = await getBeerPostLikeCountByBeerPostId({ beerPostId: id });
const likeCount = await getBeerPostLikeCountService({ beerPostId: id });
res.status(200).json({
success: true,
@@ -68,7 +75,10 @@ export const checkIfBeerPostIsLiked = async (
const user = req.user!;
const beerPostId = req.query.id as string;
const alreadyLiked = await findBeerPostLikeById({ beerPostId, likedById: user.id });
const alreadyLiked = await findBeerPostLikeByIdService({
beerPostId,
likedById: user.id,
});
res.status(200).json({
success: true,

View File

@@ -1,13 +1,16 @@
import ServerError from '@/config/util/ServerError';
import createBeerStyleLike from '@/services/likes/beer-style-like/createBeerStyleLike';
import findBeerStyleLikeById from '@/services/likes/beer-style-like/findBeerStyleLikeById';
import getBeerStyleLikeCount from '@/services/likes/beer-style-like/getBeerStyleLikeCount';
import removeBeerStyleLikeById from '@/services/likes/beer-style-like/removeBeerStyleLikeById';
import getBeerStyleById from '@/services/posts/beer-style-post/getBeerStyleById';
import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema';
import { NextApiResponse, NextApiRequest } from 'next';
import { z } from 'zod';
import { UserExtendedNextApiRequest } from '@/config/auth/types';
import {
createBeerStyleLikeService,
findBeerStyleLikeService,
getBeerStyleLikeCountService,
removeBeerStyleLikeService,
} from '@/services/likes/beer-style-like';
import { LikeRequest } from '../types';
export const sendBeerStyleLikeRequest = async (
@@ -22,20 +25,20 @@ export const sendBeerStyleLikeRequest = async (
throw new ServerError('Could not find a beer style with that id.', 404);
}
const beerStyleLike = await findBeerStyleLikeById({
const beerStyleLike = await findBeerStyleLikeService({
beerStyleId: beerStyle.id,
likedById: user.id,
});
if (beerStyleLike) {
await removeBeerStyleLikeById({ beerStyleLikeId: beerStyleLike.id });
await removeBeerStyleLikeService({ beerStyleLikeId: beerStyleLike.id });
res.status(200).json({
message: 'Successfully unliked beer style.',
success: true,
statusCode: 200,
});
} else {
await createBeerStyleLike({ beerStyleId: beerStyle.id, user });
await createBeerStyleLikeService({ beerStyleId: beerStyle.id, likedById: user.id });
res.status(200).json({
message: 'Successfully liked beer style.',
success: true,
@@ -49,7 +52,7 @@ export const getBeerStyleLikeCountRequest = async (
res: NextApiResponse<z.infer<typeof APIResponseValidationSchema>>,
) => {
const id = req.query.id as string;
const likeCount = await getBeerStyleLikeCount({ beerStyleId: id });
const likeCount = await getBeerStyleLikeCountService({ beerStyleId: id });
res.status(200).json({
success: true,
@@ -66,7 +69,10 @@ export const checkIfBeerStyleIsLiked = async (
const user = req.user!;
const beerStyleId = req.query.id as string;
const alreadyLiked = await findBeerStyleLikeById({ beerStyleId, likedById: user.id });
const alreadyLiked = await findBeerStyleLikeService({
beerStyleId,
likedById: user.id,
});
res.status(200).json({
success: true,
message: alreadyLiked ? 'Beer style is liked.' : 'Beer style is not liked.',

View File

@@ -1,6 +1,12 @@
import { UserExtendedNextApiRequest } from '@/config/auth/types';
import ServerError from '@/config/util/ServerError';
import DBClient from '@/prisma/DBClient';
import {
createBreweryPostLikeService,
findBreweryPostLikeService,
getBreweryPostLikeCountService,
removeBreweryPostLikeService,
} from '@/services/likes/brewery-post-like';
import APIResponseValidationSchema from '@/validation/APIResponseValidationSchema';
import { NextApiResponse, NextApiRequest } from 'next';
import { z } from 'zod';
@@ -20,29 +26,31 @@ export const sendBreweryPostLikeRequest = async (
throw new ServerError('Could not find a brewery post with that id', 404);
}
const alreadyLiked = await DBClient.instance.breweryPostLike.findFirst({
where: { breweryPostId: breweryPost.id, likedById: user.id },
const like = await findBreweryPostLikeService({
breweryPostId: breweryPost.id,
likedById: user.id,
});
const jsonResponse = {
success: true as const,
message: '',
statusCode: 200 as const,
};
if (like) {
await removeBreweryPostLikeService({ breweryPostLikeId: like.id });
res.status(200).json({
success: true,
message: 'Successfully removed like from brewery post.',
statusCode: 200,
});
if (alreadyLiked) {
await DBClient.instance.breweryPostLike.delete({
where: { id: alreadyLiked.id },
});
jsonResponse.message = 'Successfully unliked brewery post';
} else {
await DBClient.instance.breweryPostLike.create({
data: { breweryPostId: breweryPost.id, likedById: user.id },
});
jsonResponse.message = 'Successfully liked brewery post';
return;
}
res.status(200).json(jsonResponse);
await createBreweryPostLikeService({
breweryPostId: breweryPost.id,
likedById: user.id,
});
res.status(200).json({
success: true,
message: 'Successfully liked brewery post.',
statusCode: 200,
});
};
export const getBreweryPostLikeCount = async (
@@ -59,8 +67,8 @@ export const getBreweryPostLikeCount = async (
throw new ServerError('Could not find a brewery post with that id', 404);
}
const likeCount = await DBClient.instance.breweryPostLike.count({
where: { breweryPostId: breweryPost.id },
const likeCount = await getBreweryPostLikeCountService({
breweryPostId: breweryPost.id,
});
res.status(200).json({
@@ -78,17 +86,15 @@ export const getBreweryPostLikeStatus = async (
const user = req.user!;
const id = req.query.id as string;
const alreadyLiked = await DBClient.instance.breweryPostLike.findFirst({
where: {
const liked = await findBreweryPostLikeService({
breweryPostId: id,
likedById: user.id,
},
});
res.status(200).json({
success: true,
message: alreadyLiked ? 'Brewery post is liked.' : 'Brewery post is not liked.',
message: liked ? 'Brewery post is liked.' : 'Brewery post is not liked.',
statusCode: 200,
payload: { isLiked: !!alreadyLiked },
payload: { isLiked: !!liked },
});
};

View File

@@ -19,7 +19,7 @@ import {
* @param options.userId - The ID of the user.
* @returns A promise that resolves to an array of created beer images.
*/
export const addBeerImagesToDB: AddBeerImagesToDB = ({
export const addBeerImagesService: AddBeerImagesToDB = ({
body,
files,
beerPostId,
@@ -51,7 +51,7 @@ export const addBeerImagesToDB: AddBeerImagesToDB = ({
* @param options - The options for deleting a beer image.
* @param options.beerImageId - The ID of the beer image.
*/
export const deleteBeerImageFromDBAndStorage: DeleteBeerImageFromDBAndStorage = async ({
export const deleteBeerImageService: DeleteBeerImageFromDBAndStorage = async ({
beerImageId,
}) => {
const deleted = await DBClient.instance.beerImage.delete({
@@ -73,7 +73,7 @@ export const deleteBeerImageFromDBAndStorage: DeleteBeerImageFromDBAndStorage =
* @returns A promise that resolves to the updated beer image.
*/
export const updateBeerImageMetadata: UpdateBeerImageMetadata = async ({
export const updateBeerImageService: UpdateBeerImageMetadata = async ({
beerImageId,
body,
}) => {

View File

@@ -20,7 +20,7 @@ import {
* @returns A promise that resolves to an array of created brewery images.
*/
export const addBreweryImagesToDB: AddBreweryImagesToDB = ({
export const addBreweryImagesService: AddBreweryImagesToDB = ({
body,
files,
breweryPostId,
@@ -52,8 +52,9 @@ export const addBreweryImagesToDB: AddBreweryImagesToDB = ({
* @param options - The options for deleting a brewery image.
* @param options.breweryImageId - The ID of the brewery image.
*/
export const deleteBreweryImageFromDBAndStorage: DeleteBreweryImageFromDBAndStorage =
async ({ breweryImageId }) => {
export const deleteBreweryImageService: DeleteBreweryImageFromDBAndStorage = async ({
breweryImageId,
}) => {
const deleted = await DBClient.instance.breweryImage.delete({
where: { id: breweryImageId },
select: { path: true, id: true },
@@ -72,7 +73,7 @@ export const deleteBreweryImageFromDBAndStorage: DeleteBreweryImageFromDBAndStor
* @param options.body.caption - The caption for the brewery image.
* @returns A promise that resolves to the updated brewery image.
*/
export const updateBreweryImageMetadata: UpdateBreweryImageMetadata = async ({
export const updateBreweryImageService: UpdateBreweryImageMetadata = async ({
breweryImageId,
body,
}) => {

View File

@@ -1,15 +0,0 @@
import DBClient from '@/prisma/DBClient';
import { z } from 'zod';
import GetUserSchema from '../../users/auth/schema/GetUserSchema';
interface CreateBeerPostLikeArgs {
id: string;
user: z.infer<typeof GetUserSchema>;
}
const createBeerPostLike = async ({ id, user }: CreateBeerPostLikeArgs) =>
DBClient.instance.beerPostLike.create({
data: { beerPost: { connect: { id } }, likedBy: { connect: { id: user.id } } },
});
export default createBeerPostLike;

View File

@@ -1,14 +0,0 @@
import DBClient from '@/prisma/DBClient';
interface FindBeerPostLikeByIdArgs {
beerPostId: string;
likedById: string;
}
const findBeerPostLikeById = async ({
beerPostId,
likedById,
}: FindBeerPostLikeByIdArgs) =>
DBClient.instance.beerPostLike.findFirst({ where: { beerPostId, likedById } });
export default findBeerPostLikeById;

View File

@@ -1,6 +0,0 @@
import DBClient from '@/prisma/DBClient';
const getBeerPostLikeCountByBeerPostId = async ({ beerPostId }: { beerPostId: string }) =>
DBClient.instance.beerPostLike.count({ where: { beerPostId } });
export default getBeerPostLikeCountByBeerPostId;

View File

@@ -0,0 +1,60 @@
import DBClient from '@/prisma/DBClient';
import {
CreateBeerPostLike,
FindBeerPostLikeById,
GetBeerPostLikeCount,
RemoveBeerPostLike,
} from './types';
/**
* Creates a new beer post like.
*
* @param params - The parameters object for creating the beer post like.
* @param params.beerPostId - The ID of the beer post.
* @param params.likedById - The ID of the user who will like the beer post.
* @returns A promise that resolves to the newly created beer post like.
*/
export const createBeerPostLikeService: CreateBeerPostLike = async ({
beerPostId,
likedById,
}) =>
DBClient.instance.beerPostLike.create({
data: {
beerPost: { connect: { id: beerPostId } },
likedBy: { connect: { id: likedById } },
},
});
/**
* Retrieves a beer post like by ID.
*
* @param params - The parameters object for retrieving the beer post like.
* @param params.beerPostId - The ID of the beer post.
* @param params.likedById - The ID of the user who liked the beer post.
* @returns A promise that resolves to the beer post like.
*/
export const findBeerPostLikeByIdService: FindBeerPostLikeById = async ({
beerPostId,
likedById,
}) => DBClient.instance.beerPostLike.findFirst({ where: { beerPostId, likedById } });
/**
* Removes a beer post like.
*
* @param params - The parameters object for removing the beer post like.
* @param params.beerPostLikeId - The ID of the beer post like to remove.
* @returns A promise that resolves to the removed beer post like.
*/
export const removeBeerPostLikeService: RemoveBeerPostLike = async ({ beerPostLikeId }) =>
DBClient.instance.beerPostLike.delete({ where: { id: beerPostLikeId } });
/**
* Retrieves the number of likes for a beer post.
*
* @param params - The parameters object for retrieving the number of likes for a beer
* post.
* @param params.beerPostId - The ID of the beer post.
* @returns A promise that resolves to the number of likes for a beer post.
*/
export const getBeerPostLikeCountService: GetBeerPostLikeCount = async ({ beerPostId }) =>
DBClient.instance.beerPostLike.count({ where: { beerPostId } });

View File

@@ -1,10 +0,0 @@
import DBClient from '@/prisma/DBClient';
interface RemoveBeerPostLikeArgs {
beerLikeId: string;
}
const removeBeerPostLikeById = async ({ beerLikeId }: RemoveBeerPostLikeArgs) =>
DBClient.instance.beerPostLike.delete({ where: { id: beerLikeId } });
export default removeBeerPostLikeById;

View File

@@ -0,0 +1,11 @@
import { z } from 'zod';
const BeerPostLikeSchema = z.object({
id: z.string().cuid(),
beerPostId: z.string().cuid(),
likedById: z.string().cuid(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date().nullable(),
});
export default BeerPostLikeSchema;

View File

@@ -0,0 +1,23 @@
import GetUserSchema from '@/services/users/auth/schema/GetUserSchema';
import { z } from 'zod';
import BeerPostLikeSchema from '../schema/BeerPostLikeSchema';
type User = z.infer<typeof GetUserSchema>;
type ReturnSchema = z.infer<typeof BeerPostLikeSchema>;
export type CreateBeerPostLike = (args: {
beerPostId: string;
likedById: User['id'];
}) => Promise<ReturnSchema>;
export type FindBeerPostLikeById = (args: {
beerPostId: string;
likedById: User['id'];
}) => Promise<ReturnSchema | null>;
export type RemoveBeerPostLike = (args: {
beerPostLikeId: string;
}) => Promise<ReturnSchema>;
export type GetBeerPostLikeCount = (args: { beerPostId: string }) => Promise<number>;

View File

@@ -1,18 +0,0 @@
import { z } from 'zod';
import DBClient from '@/prisma/DBClient';
import GetUserSchema from '@/services/users/auth/schema/GetUserSchema';
interface CreateBeerStyleLikeArgs {
beerStyleId: string;
user: z.infer<typeof GetUserSchema>;
}
const createBeerStyleLike = async ({ beerStyleId, user }: CreateBeerStyleLikeArgs) => {
return DBClient.instance.beerStyleLike.create({
data: {
beerStyleId,
likedById: user.id,
},
});
};
export default createBeerStyleLike;

View File

@@ -1,16 +0,0 @@
import DBClient from '@/prisma/DBClient';
interface FindBeerStyleLikeByIdArgs {
beerStyleId: string;
likedById: string;
}
const findBeerStyleLikeById = async ({
beerStyleId,
likedById,
}: FindBeerStyleLikeByIdArgs) => {
return DBClient.instance.beerStyleLike.findFirst({
where: { beerStyleId, likedById },
});
};
export default findBeerStyleLikeById;

View File

@@ -1,10 +0,0 @@
import DBClient from '@/prisma/DBClient';
interface GetBeerStyleLikeCountArgs {
beerStyleId: string;
}
const getBeerStyleLikeCount = async ({ beerStyleId }: GetBeerStyleLikeCountArgs) => {
return DBClient.instance.beerStyleLike.count({ where: { beerStyleId } });
};
export default getBeerStyleLikeCount;

View File

@@ -0,0 +1,63 @@
import DBClient from '@/prisma/DBClient';
import {
CreateBeerStyleLike,
FindBeerStyleLike,
GetBeerStyleLikeCount,
RemoveBeerStyleLike,
} from './types';
/**
* Creates a new beer style like.
*
* @param params - The parameters object for creating the beer style like.
* @param params.beerStyleId - The ID of the beer style.
* @param params.likedById - The ID of the user who will like the beer style.
* @returns A promise that resolves to the newly created beer style like.
*/
export const createBeerStyleLikeService: CreateBeerStyleLike = async ({
beerStyleId,
likedById,
}) =>
DBClient.instance.beerStyleLike.create({
data: {
beerStyle: { connect: { id: beerStyleId } },
likedBy: { connect: { id: likedById } },
},
});
/**
* Retrieves a beer style like by ID.
*
* @param params - The parameters object for retrieving the beer style like.
* @param params.beerStyleId - The ID of the beer style.
* @param params.likedById - The ID of the user who liked the beer style.
* @returns A promise that resolves to the beer style like.
*/
export const findBeerStyleLikeService: FindBeerStyleLike = async ({
beerStyleId,
likedById,
}) => DBClient.instance.beerStyleLike.findFirst({ where: { beerStyleId, likedById } });
/**
* Removes a beer style like.
*
* @param params - The parameters object for removing the beer style like.
* @param params.beerStyleLikeId - The ID of the beer style like to remove.
* @returns A promise that resolves to the removed beer style like.
*/
export const removeBeerStyleLikeService: RemoveBeerStyleLike = async ({
beerStyleLikeId,
}) => DBClient.instance.beerStyleLike.delete({ where: { id: beerStyleLikeId } });
/**
* Retrieves the number of likes for a beer style.
*
* @param params - The parameters object for retrieving the number of likes for a beer
* style.
* @param params.beerStyleId - The ID of the beer style.
* @returns A promise that resolves to the number of likes for a beer style.
*/
export const getBeerStyleLikeCountService: GetBeerStyleLikeCount = async ({
beerStyleId,
}) => DBClient.instance.beerStyleLike.count({ where: { beerStyleId } });

View File

@@ -1,12 +0,0 @@
import DBClient from '@/prisma/DBClient';
interface RemoveBeerStyleLikeByIdArgs {
beerStyleLikeId: string;
}
const removeBeerStyleLikeById = async ({
beerStyleLikeId,
}: RemoveBeerStyleLikeByIdArgs) => {
return DBClient.instance.beerStyleLike.delete({ where: { id: beerStyleLikeId } });
};
export default removeBeerStyleLikeById;

View File

@@ -0,0 +1,11 @@
import { z } from 'zod';
const BeerStyleLikeSchema = z.object({
id: z.string().cuid(),
beerStyleId: z.string().cuid(),
likedById: z.string().cuid(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date().nullable(),
});
export default BeerStyleLikeSchema;

View File

@@ -0,0 +1,23 @@
import GetUserSchema from '@/services/users/auth/schema/GetUserSchema';
import { z } from 'zod';
import BeerStyleLikeSchema from '../schema/BeerStyleLikeSchema';
type User = z.infer<typeof GetUserSchema>;
type ReturnSchema = z.infer<typeof BeerStyleLikeSchema>;
export type CreateBeerStyleLike = (args: {
beerStyleId: string;
likedById: User['id'];
}) => Promise<ReturnSchema>;
export type FindBeerStyleLike = (args: {
beerStyleId: string;
likedById: User['id'];
}) => Promise<ReturnSchema | null>;
export type RemoveBeerStyleLike = (args: {
beerStyleLikeId: string;
}) => Promise<ReturnSchema>;
export type GetBeerStyleLikeCount = (args: { beerStyleId: string }) => Promise<number>;

View File

@@ -0,0 +1,63 @@
import DBClient from '@/prisma/DBClient';
import {
CreateBreweryPostLike,
FindBreweryPostLike,
GetBreweryPostLikeCount,
RemoveBreweryPostLike,
} from './types';
/**
* Creates a new brewery post like.
*
* @param params - The parameters object for creating the brewery post like.
* @param params.breweryPostId - The ID of the brewery post.
* @param params.likedById - The ID of the user who will like the brewery post.
* @returns A promise that resolves to the newly created brewery post like.
*/
export const createBreweryPostLikeService: CreateBreweryPostLike = async ({
breweryPostId,
likedById,
}) =>
DBClient.instance.breweryPostLike.create({
data: {
breweryPost: { connect: { id: breweryPostId } },
likedBy: { connect: { id: likedById } },
},
});
/**
* Retrieves a brewery post like by ID.
*
* @param params - The parameters object for retrieving the brewery post like.
* @param params.breweryPostId - The ID of the brewery post.
* @param params.likedById - The ID of the user who liked the brewery post.
* @returns A promise that resolves to the brewery post like.
*/
export const findBreweryPostLikeService: FindBreweryPostLike = async ({
breweryPostId,
likedById,
}) =>
DBClient.instance.breweryPostLike.findFirst({ where: { breweryPostId, likedById } });
/**
* Removes a brewery post like.
*
* @param params - The parameters object for removing the brewery post like.
* @param params.breweryPostLikeId - The ID of the brewery post like to remove.
* @returns A promise that resolves to the removed brewery post like.
*/
export const removeBreweryPostLikeService: RemoveBreweryPostLike = async ({
breweryPostLikeId,
}) => DBClient.instance.breweryPostLike.delete({ where: { id: breweryPostLikeId } });
/**
* Retrieves the number of likes for a brewery post.
*
* @param params - The parameters object for retrieving the number of likes for a brewery
* @param params.breweryPostId - The ID of the brewery post.
* @returns A promise that resolves to the number of likes for a brewery post.
*/
export const getBreweryPostLikeCountService: GetBreweryPostLikeCount = async ({
breweryPostId,
}) => DBClient.instance.breweryPostLike.count({ where: { breweryPostId } });

View File

@@ -0,0 +1,11 @@
import { z } from 'zod';
const BreweryPostLikeSchema = z.object({
id: z.string().cuid(),
breweryPostId: z.string().cuid(),
likedById: z.string().cuid(),
createdAt: z.coerce.date(),
updatedAt: z.coerce.date().nullable(),
});
export default BreweryPostLikeSchema;

View File

@@ -0,0 +1,24 @@
import GetUserSchema from '@/services/users/auth/schema/GetUserSchema';
import { z } from 'zod';
import BreweryPostLikeSchema from '../schema/BreweryPostLikeSchema';
type User = z.infer<typeof GetUserSchema>;
type ReturnSchema = z.infer<typeof BreweryPostLikeSchema>;
export type CreateBreweryPostLike = (args: {
breweryPostId: string;
likedById: User['id'];
}) => Promise<ReturnSchema>;
export type FindBreweryPostLike = (args: {
breweryPostId: string;
likedById: User['id'];
}) => Promise<ReturnSchema | null>;
export type RemoveBreweryPostLike = (args: {
breweryPostLikeId: string;
}) => Promise<ReturnSchema>;
export type GetBreweryPostLikeCount = (args: {
breweryPostId: string;
}) => Promise<number>;