mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-02-16 10:42:08 +00:00
Refactor: update like services
This commit is contained in:
133
package-lock.json
generated
133
package-lock.json
generated
@@ -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": {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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.',
|
||||
|
||||
@@ -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 },
|
||||
});
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
}) => {
|
||||
|
||||
@@ -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,
|
||||
}) => {
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -1,6 +0,0 @@
|
||||
import DBClient from '@/prisma/DBClient';
|
||||
|
||||
const getBeerPostLikeCountByBeerPostId = async ({ beerPostId }: { beerPostId: string }) =>
|
||||
DBClient.instance.beerPostLike.count({ where: { beerPostId } });
|
||||
|
||||
export default getBeerPostLikeCountByBeerPostId;
|
||||
60
src/services/likes/beer-post-like/index.ts
Normal file
60
src/services/likes/beer-post-like/index.ts
Normal 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 } });
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
23
src/services/likes/beer-post-like/types/index.ts
Normal file
23
src/services/likes/beer-post-like/types/index.ts
Normal 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>;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
63
src/services/likes/beer-style-like/index.ts
Normal file
63
src/services/likes/beer-style-like/index.ts
Normal 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 } });
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
23
src/services/likes/beer-style-like/types/index.ts
Normal file
23
src/services/likes/beer-style-like/types/index.ts
Normal 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>;
|
||||
63
src/services/likes/brewery-post-like/index.ts
Normal file
63
src/services/likes/brewery-post-like/index.ts
Normal 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 } });
|
||||
@@ -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;
|
||||
24
src/services/likes/brewery-post-like/types/index.ts
Normal file
24
src/services/likes/brewery-post-like/types/index.ts
Normal 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>;
|
||||
Reference in New Issue
Block a user