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