From 9fcfbecdbbf9caf6feac1e766ea018f2651f580f Mon Sep 17 00:00:00 2001 From: razzanYoni <13521087@mahasiswa.itb.ac.id> Date: Tue, 14 Nov 2023 22:27:04 +0700 Subject: [PATCH] feat : add ftp functionality --- src/controllers/premium-album-controller.ts | 18 +++++++++--- src/routers/premium-album-router.ts | 5 +++- src/services/premium-album-service.ts | 31 +++++++-------------- 3 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/controllers/premium-album-controller.ts b/src/controllers/premium-album-controller.ts index caf1fb9..0a27da6 100644 --- a/src/controllers/premium-album-controller.ts +++ b/src/controllers/premium-album-controller.ts @@ -2,6 +2,7 @@ import { NextFunction, Request, Response } from "express"; import * as PremiumAlbumService from "../services/premium-album-service"; import { generateResponse } from "../utils/response"; import { StatusCodes } from "http-status-codes"; +import {ErrorType, StandardError} from "../errors/standard-error"; const createPremiumAlbum = async ( req: Request, @@ -10,8 +11,11 @@ const createPremiumAlbum = async ( ): Promise<void> => { try { const data = req.body; - const coverFile = req.file; - const responseData = await PremiumAlbumService.createPremiumAlbum(data, coverFile); + if (!req.file) { + throw new StandardError(ErrorType.FILE_NOT_VALID); + } + data.coverFilename = req.file.filename; + const responseData = await PremiumAlbumService.createPremiumAlbum(data); generateResponse(res, StatusCodes.OK, responseData); } catch (err) { next(err); @@ -45,12 +49,18 @@ const updatePremiumAlbum = async ( try { const premiumAlbumId = Number(req.params.premiumAlbumId); const data = req.body; - const coverFile = req.file; + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + if (req.files && req.files[0]) { + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + data.coverFilename = req.files[0].filename; + } const updatedPremiumAlbum = await PremiumAlbumService.updatePremiumAlbum( data, premiumAlbumId, - coverFile ); generateResponse(res, StatusCodes.OK, updatedPremiumAlbum); } catch (err) { diff --git a/src/routers/premium-album-router.ts b/src/routers/premium-album-router.ts index ad0384d..47264a0 100644 --- a/src/routers/premium-album-router.ts +++ b/src/routers/premium-album-router.ts @@ -2,14 +2,16 @@ import express, { Router } from "express"; import * as PremiumAlbumController from "../controllers/premium-album-controller"; import { handleStandardError } from "../middlewares/handle-standard-error"; import { verifyToken } from "../middlewares/verify-token"; +import {uploadCover} from "../utils/file-processing"; const premiumAlbumRouter: Router = express.Router(); premiumAlbumRouter.post( "/api/premium-album", verifyToken, + uploadCover.single("coverFile"), PremiumAlbumController.createPremiumAlbum, - handleStandardError, + handleStandardError ); premiumAlbumRouter.get( @@ -22,6 +24,7 @@ premiumAlbumRouter.get( premiumAlbumRouter.patch( "/api/premium-album/:premiumAlbumId", verifyToken, + uploadCover.any(), PremiumAlbumController.updatePremiumAlbum, handleStandardError, ); diff --git a/src/services/premium-album-service.ts b/src/services/premium-album-service.ts index 1f2edc2..740cfa4 100644 --- a/src/services/premium-album-service.ts +++ b/src/services/premium-album-service.ts @@ -1,29 +1,26 @@ -import { PremiumAlbum, Prisma } from "@prisma/client"; +import {PremiumAlbum, Prisma} from "@prisma/client"; 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 {createPremiumAlbumSchema, searchPremiumAlbumSchema, deletePremiumAlbumSchema, updatePremiumAlbumSchema} from "../validation/premium-album-validation"; -import { saveFile } from "../utils/FileProcessing"; +import { + createPremiumAlbumSchema, + deletePremiumAlbumSchema, + searchPremiumAlbumSchema, + updatePremiumAlbumSchema +} from "../validation/premium-album-validation"; const createPremiumAlbum = async ( data: Prisma.PremiumAlbumCreateInput, - coverFile: Express.Multer.File | undefined, ): Promise<PremiumAlbum> => { validate(createPremiumAlbumSchema, data) - if (!coverFile) { - throw new StandardError(ErrorType.FILE_NOT_VALID); - } - - const coverFileName = await saveFile(coverFile); - return prismaClient.premiumAlbum.create({ data: { albumName: data.albumName, releaseDate: data.releaseDate, genre: data.genre, artist: data.artist, - coverFilename: coverFileName, + coverFilename: data.coverFilename, }, }); }; @@ -83,9 +80,8 @@ const searchPremiumAlbum = async (reqQuery: { const updatePremiumAlbum = async ( inputData: Prisma.PremiumAlbumUpdateInput, premiumAlbumId: number, - coverFile: Express.Multer.File | undefined, ): Promise<PremiumAlbum> => { - validate(updatePremiumAlbumSchema, {premiumAlbumId, ...inputData}) + validate(updatePremiumAlbumSchema, { premiumAlbumId, ...inputData}) const albumCount = await prismaClient.premiumAlbum.count({ where: { @@ -97,13 +93,6 @@ const updatePremiumAlbum = async ( throw new StandardError(ErrorType.ALBUM_NOT_FOUND); } - if (!coverFile) { - throw new StandardError(ErrorType.INPUT_DATA_NOT_VALID); - } - - const coverFileName = await saveFile(coverFile); - inputData.coverFilename = coverFileName; - return prismaClient.premiumAlbum.update({ where: { albumId: premiumAlbumId, -- GitLab