Skip to content
Snippets Groups Projects
Commit 992ce308 authored by Razzan Yoni's avatar Razzan Yoni
Browse files

feat : add auth validation

parent a758f802
Branches
Tags
1 merge request!2Dev
import { PremiumAlbum, PremiumSong, Prisma } from "@prisma/client"; import { PremiumSong, Prisma } from "@prisma/client";
import prismaClient from "../cores/db"; import prismaClient from "../cores/db";
import { ErrorType, StandardError } from "../errors/standard-error"; import { ErrorType, StandardError } from "../errors/standard-error";
import {validate} from "../validation/validation";
import {
addNewSongSchema, deletePremiumSongSchema,
getAllSongFromAlbumSchema, updatePremiumSongSchema
} from "../validation/premium-song-validation";
const addNewSong = async ( const addNewSong = async (
data: Prisma.PremiumSongCreateInput, data: Prisma.PremiumSongCreateInput,
premiumAlbumId: number premiumAlbumId: number
): Promise<PremiumSong> => { ): Promise<PremiumSong> => {
validate(addNewSongSchema, { premiumAlbumId, ...data});
return prismaClient.premiumSong.create({ return prismaClient.premiumSong.create({
data: { data: {
albumId: premiumAlbumId, albumId: premiumAlbumId,
...@@ -22,6 +29,7 @@ const addNewSong = async ( ...@@ -22,6 +29,7 @@ const addNewSong = async (
const getAllSongFromAlbum = async ( const getAllSongFromAlbum = async (
premiumAlbumId: number premiumAlbumId: number
): Promise<PremiumSong[]> => { ): Promise<PremiumSong[]> => {
validate(getAllSongFromAlbumSchema, { premiumAlbumId })
return prismaClient.premiumSong.findMany({ return prismaClient.premiumSong.findMany({
where: { where: {
albumId: premiumAlbumId albumId: premiumAlbumId
...@@ -30,10 +38,23 @@ const getAllSongFromAlbum = async ( ...@@ -30,10 +38,23 @@ const getAllSongFromAlbum = async (
} }
const updatePremiumSong = async ( const updatePremiumSong = async (
inputData: Prisma.PremiumSongCreateInput, inputData: Prisma.PremiumSongUpdateInput,
premiumAlbumId: number, premiumAlbumId: number,
premiumSongId: number premiumSongId: number
): Promise<PremiumSong> => { ): Promise<PremiumSong> => {
validate(updatePremiumSongSchema, { premiumAlbumId, premiumSongId, ...inputData })
const songCount = await prismaClient.premiumSong.count({
where: {
songId: premiumSongId,
albumId: premiumAlbumId
}
});
if (songCount != 1) {
throw new StandardError(ErrorType.SONG_NOT_FOUND);
}
return prismaClient.premiumSong.update({ return prismaClient.premiumSong.update({
where: { where: {
songId: premiumSongId, songId: premiumSongId,
...@@ -47,6 +68,19 @@ const deletePremiumSong = async ( ...@@ -47,6 +68,19 @@ const deletePremiumSong = async (
premiumAlbumId: number, premiumAlbumId: number,
premiumSongId: number premiumSongId: number
): Promise<PremiumSong> => { ): Promise<PremiumSong> => {
validate(deletePremiumSongSchema, { premiumAlbumId })
const songCount = await prismaClient.premiumSong.count({
where: {
songId: premiumSongId,
albumId: premiumAlbumId
}
})
if (songCount != 1) {
throw new StandardError(ErrorType.SONG_NOT_FOUND);
}
return prismaClient.premiumSong.delete({ return prismaClient.premiumSong.delete({
where: { where: {
songId: premiumSongId, songId: premiumSongId,
......
import { z } from "zod";
const addNewSongSchema = z.object({
albumId: z.number().int().min(1),
title: z.string().min(1).max(255),
artist: z.string().min(1).max(255),
album: z.string().min(1).max(255),
discNumber: z.optional(z.number().int().min(1)).nullable(),
songNumber: z.optional(z.number().int().min(1)),
duration: z.optional(z.number().int().min(1)),
audioFilename: z.string().min(1).max(255),
});
const getAllSongFromAlbumSchema = z.object({
albumId: z.number().int().min(1),
});
const updatePremiumSongSchema = z.object({
albumId: z.number().int().min(1),
songId: z.number().int().min(1),
title: z.optional(z.string().min(1).max(255)),
artist: z.optional(z.string().min(1).max(255)),
album: z.optional(z.string().min(1).max(255)),
discNumber: z.optional(z.number().int().min(1)).nullable(),
songNumber: z.optional(z.number().int().min(1)),
duration: z.optional(z.number().int().min(1)),
audioFilename: z.optional(z.string().min(1).max(255)),
});
const deletePremiumSongSchema = z.object({
albumId: z.number().int().min(1),
songId: z.number().int().min(1),
});
export {
addNewSongSchema,
getAllSongFromAlbumSchema,
updatePremiumSongSchema,
deletePremiumSongSchema,
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment