diff --git a/package-lock.json b/package-lock.json index d0db80d..754092f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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": { diff --git a/src/controllers/images/beer-images/index.ts b/src/controllers/images/beer-images/index.ts index 208d249..0a1d5c1 100644 --- a/src/controllers/images/beer-images/index.ts +++ b/src/controllers/images/beer-images/index.ts @@ -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, diff --git a/src/controllers/images/brewery-images/index.ts b/src/controllers/images/brewery-images/index.ts index c7b5bee..a7a4a3c 100644 --- a/src/controllers/images/brewery-images/index.ts +++ b/src/controllers/images/brewery-images/index.ts @@ -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, diff --git a/src/controllers/likes/beer-posts-likes/index.ts b/src/controllers/likes/beer-posts-likes/index.ts index c37e953..0211164 100644 --- a/src/controllers/likes/beer-posts-likes/index.ts +++ b/src/controllers/likes/beer-posts-likes/index.ts @@ -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, diff --git a/src/controllers/likes/beer-style-likes/index.ts b/src/controllers/likes/beer-style-likes/index.ts index 1b18ea3..f8f75dc 100644 --- a/src/controllers/likes/beer-style-likes/index.ts +++ b/src/controllers/likes/beer-style-likes/index.ts @@ -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>, ) => { 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.', diff --git a/src/controllers/likes/brewery-post-likes/index.ts b/src/controllers/likes/brewery-post-likes/index.ts index d09ac56..9839030 100644 --- a/src/controllers/likes/brewery-post-likes/index.ts +++ b/src/controllers/likes/brewery-post-likes/index.ts @@ -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: { - breweryPostId: id, - likedById: user.id, - }, + 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 }, }); }; diff --git a/src/services/images/beer-image/index.ts b/src/services/images/beer-image/index.ts index 16e5a63..faf8956 100644 --- a/src/services/images/beer-image/index.ts +++ b/src/services/images/beer-image/index.ts @@ -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, }) => { diff --git a/src/services/images/brewery-image/index.ts b/src/services/images/brewery-image/index.ts index 22d8d28..ac91450 100644 --- a/src/services/images/brewery-image/index.ts +++ b/src/services/images/brewery-image/index.ts @@ -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,15 +52,16 @@ 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 }) => { - const deleted = await DBClient.instance.breweryImage.delete({ - where: { id: breweryImageId }, - select: { path: true, id: true }, - }); - const { path } = deleted; - await cloudinary.uploader.destroy(path); - }; +export const deleteBreweryImageService: DeleteBreweryImageFromDBAndStorage = async ({ + breweryImageId, +}) => { + const deleted = await DBClient.instance.breweryImage.delete({ + where: { id: breweryImageId }, + select: { path: true, id: true }, + }); + const { path } = deleted; + await cloudinary.uploader.destroy(path); +}; /** * Updates the brewery image metadata in the database. @@ -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, }) => { diff --git a/src/services/likes/beer-post-like/createBeerPostLike.ts b/src/services/likes/beer-post-like/createBeerPostLike.ts deleted file mode 100644 index 14a18b7..0000000 --- a/src/services/likes/beer-post-like/createBeerPostLike.ts +++ /dev/null @@ -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; -} - -const createBeerPostLike = async ({ id, user }: CreateBeerPostLikeArgs) => - DBClient.instance.beerPostLike.create({ - data: { beerPost: { connect: { id } }, likedBy: { connect: { id: user.id } } }, - }); - -export default createBeerPostLike; diff --git a/src/services/likes/beer-post-like/findBeerPostLikeById.ts b/src/services/likes/beer-post-like/findBeerPostLikeById.ts deleted file mode 100644 index 11e2789..0000000 --- a/src/services/likes/beer-post-like/findBeerPostLikeById.ts +++ /dev/null @@ -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; diff --git a/src/services/likes/beer-post-like/getBeerPostLikeCount.ts b/src/services/likes/beer-post-like/getBeerPostLikeCount.ts deleted file mode 100644 index 57886cc..0000000 --- a/src/services/likes/beer-post-like/getBeerPostLikeCount.ts +++ /dev/null @@ -1,6 +0,0 @@ -import DBClient from '@/prisma/DBClient'; - -const getBeerPostLikeCountByBeerPostId = async ({ beerPostId }: { beerPostId: string }) => - DBClient.instance.beerPostLike.count({ where: { beerPostId } }); - -export default getBeerPostLikeCountByBeerPostId; diff --git a/src/services/likes/beer-post-like/index.ts b/src/services/likes/beer-post-like/index.ts new file mode 100644 index 0000000..bb0908c --- /dev/null +++ b/src/services/likes/beer-post-like/index.ts @@ -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 } }); diff --git a/src/services/likes/beer-post-like/removeBeerPostLikeById.ts b/src/services/likes/beer-post-like/removeBeerPostLikeById.ts deleted file mode 100644 index 2a6e3e7..0000000 --- a/src/services/likes/beer-post-like/removeBeerPostLikeById.ts +++ /dev/null @@ -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; diff --git a/src/services/likes/beer-post-like/schema/BeerPostLikeSchema.ts b/src/services/likes/beer-post-like/schema/BeerPostLikeSchema.ts new file mode 100644 index 0000000..e849f1c --- /dev/null +++ b/src/services/likes/beer-post-like/schema/BeerPostLikeSchema.ts @@ -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; diff --git a/src/services/likes/beer-post-like/types/index.ts b/src/services/likes/beer-post-like/types/index.ts new file mode 100644 index 0000000..200fba5 --- /dev/null +++ b/src/services/likes/beer-post-like/types/index.ts @@ -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; +type ReturnSchema = z.infer; + +export type CreateBeerPostLike = (args: { + beerPostId: string; + likedById: User['id']; +}) => Promise; + +export type FindBeerPostLikeById = (args: { + beerPostId: string; + likedById: User['id']; +}) => Promise; + +export type RemoveBeerPostLike = (args: { + beerPostLikeId: string; +}) => Promise; + +export type GetBeerPostLikeCount = (args: { beerPostId: string }) => Promise; diff --git a/src/services/likes/beer-style-like/createBeerStyleLike.ts b/src/services/likes/beer-style-like/createBeerStyleLike.ts deleted file mode 100644 index e4c1813..0000000 --- a/src/services/likes/beer-style-like/createBeerStyleLike.ts +++ /dev/null @@ -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; -} -const createBeerStyleLike = async ({ beerStyleId, user }: CreateBeerStyleLikeArgs) => { - return DBClient.instance.beerStyleLike.create({ - data: { - beerStyleId, - likedById: user.id, - }, - }); -}; - -export default createBeerStyleLike; diff --git a/src/services/likes/beer-style-like/findBeerStyleLikeById.ts b/src/services/likes/beer-style-like/findBeerStyleLikeById.ts deleted file mode 100644 index b9ec621..0000000 --- a/src/services/likes/beer-style-like/findBeerStyleLikeById.ts +++ /dev/null @@ -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; diff --git a/src/services/likes/beer-style-like/getBeerStyleLikeCount.ts b/src/services/likes/beer-style-like/getBeerStyleLikeCount.ts deleted file mode 100644 index 7ba4061..0000000 --- a/src/services/likes/beer-style-like/getBeerStyleLikeCount.ts +++ /dev/null @@ -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; diff --git a/src/services/likes/beer-style-like/index.ts b/src/services/likes/beer-style-like/index.ts new file mode 100644 index 0000000..003953f --- /dev/null +++ b/src/services/likes/beer-style-like/index.ts @@ -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 } }); diff --git a/src/services/likes/beer-style-like/removeBeerStyleLikeById.ts b/src/services/likes/beer-style-like/removeBeerStyleLikeById.ts deleted file mode 100644 index 164eee4..0000000 --- a/src/services/likes/beer-style-like/removeBeerStyleLikeById.ts +++ /dev/null @@ -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; diff --git a/src/services/likes/beer-style-like/schema/BeerStyleLikeSchema.ts b/src/services/likes/beer-style-like/schema/BeerStyleLikeSchema.ts new file mode 100644 index 0000000..93ce932 --- /dev/null +++ b/src/services/likes/beer-style-like/schema/BeerStyleLikeSchema.ts @@ -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; diff --git a/src/services/likes/beer-style-like/types/index.ts b/src/services/likes/beer-style-like/types/index.ts new file mode 100644 index 0000000..877a742 --- /dev/null +++ b/src/services/likes/beer-style-like/types/index.ts @@ -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; +type ReturnSchema = z.infer; + +export type CreateBeerStyleLike = (args: { + beerStyleId: string; + likedById: User['id']; +}) => Promise; + +export type FindBeerStyleLike = (args: { + beerStyleId: string; + likedById: User['id']; +}) => Promise; + +export type RemoveBeerStyleLike = (args: { + beerStyleLikeId: string; +}) => Promise; + +export type GetBeerStyleLikeCount = (args: { beerStyleId: string }) => Promise; diff --git a/src/services/likes/brewery-post-like/index.ts b/src/services/likes/brewery-post-like/index.ts new file mode 100644 index 0000000..123d61a --- /dev/null +++ b/src/services/likes/brewery-post-like/index.ts @@ -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 } }); diff --git a/src/services/likes/brewery-post-like/schema/BreweryPostLikeSchema.ts b/src/services/likes/brewery-post-like/schema/BreweryPostLikeSchema.ts new file mode 100644 index 0000000..754ff31 --- /dev/null +++ b/src/services/likes/brewery-post-like/schema/BreweryPostLikeSchema.ts @@ -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; diff --git a/src/services/likes/brewery-post-like/types/index.ts b/src/services/likes/brewery-post-like/types/index.ts new file mode 100644 index 0000000..f3d0581 --- /dev/null +++ b/src/services/likes/brewery-post-like/types/index.ts @@ -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; +type ReturnSchema = z.infer; + +export type CreateBreweryPostLike = (args: { + breweryPostId: string; + likedById: User['id']; +}) => Promise; + +export type FindBreweryPostLike = (args: { + breweryPostId: string; + likedById: User['id']; +}) => Promise; + +export type RemoveBreweryPostLike = (args: { + breweryPostLikeId: string; +}) => Promise; + +export type GetBreweryPostLikeCount = (args: { + breweryPostId: string; +}) => Promise;