From 80cdcda93c385a8f5c1e22c7b84740f5d8119ef1 Mon Sep 17 00:00:00 2001 From: Elias Schneider Date: Wed, 12 Oct 2022 00:38:38 +0200 Subject: [PATCH] feat: put db and uploads in same folder --- .gitignore | 2 +- Dockerfile | 4 ---- backend/prisma/schema.prisma | 2 +- backend/src/file/file.controller.ts | 2 +- backend/src/file/file.service.ts | 15 ++++++++------- backend/src/main.ts | 2 +- backend/src/prisma/prisma.service.ts | 2 +- backend/src/share/share.service.ts | 2 +- docker-compose.yml | 3 +-- 9 files changed, 15 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 23c1afd..fbae843 100644 --- a/.gitignore +++ b/.gitignore @@ -35,6 +35,6 @@ yarn-error.log* /frontend/public/sw.* # project specific -/backend/uploads/ +/backend/data/ /data/ /backend/prisma/pingvin-share.db* diff --git a/Dockerfile b/Dockerfile index 9de6356..6106887 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,10 +13,6 @@ COPY ./backend . RUN npx prisma generate RUN npm run build - - - - FROM node:18 AS runner WORKDIR /opt/app/frontend ENV NODE_ENV=production diff --git a/backend/prisma/schema.prisma b/backend/prisma/schema.prisma index 447154f..31f749e 100644 --- a/backend/prisma/schema.prisma +++ b/backend/prisma/schema.prisma @@ -4,7 +4,7 @@ generator client { datasource db { provider = "sqlite" - url = "file:./pingvin-share.db" + url = "file:../data/pingvin-share.db" } model User { diff --git a/backend/src/file/file.controller.ts b/backend/src/file/file.controller.ts index b5e2d4b..b822223 100644 --- a/backend/src/file/file.controller.ts +++ b/backend/src/file/file.controller.ts @@ -27,7 +27,7 @@ export class FileController { @UseGuards(JwtGuard, ShareOwnerGuard) @UseInterceptors( FileInterceptor("file", { - dest: "./uploads/_temp/", + dest: "./data/uploads/_temp/", }) ) async create( diff --git a/backend/src/file/file.service.ts b/backend/src/file/file.service.ts index da34b24..6388f6c 100644 --- a/backend/src/file/file.service.ts +++ b/backend/src/file/file.service.ts @@ -8,7 +8,6 @@ import { JwtService } from "@nestjs/jwt"; import { randomUUID } from "crypto"; import * as fs from "fs"; import * as mime from "mime-types"; -import { join } from "path"; import { PrismaService } from "src/prisma/prisma.service"; @Injectable() @@ -29,10 +28,12 @@ export class FileService { const fileId = randomUUID(); - await fs.promises.mkdir(`./uploads/shares/${shareId}`, { recursive: true }); + await fs.promises.mkdir(`./data/uploads/shares/${shareId}`, { + recursive: true, + }); fs.promises.rename( - `./uploads/_temp/${file.filename}`, - `./uploads/shares/${shareId}/${fileId}` + `./data/uploads/_temp/${file.filename}`, + `./data/uploads/shares/${shareId}/${fileId}` ); return await this.prisma.file.create({ @@ -53,7 +54,7 @@ export class FileService { if (!fileMetaData) throw new NotFoundException("File not found"); const file = fs.createReadStream( - join(process.cwd(), `uploads/shares/${shareId}/${fileId}`) + `./data/uploads/shares/${shareId}/${fileId}` ); return { @@ -67,14 +68,14 @@ export class FileService { } async deleteAllFiles(shareId: string) { - await fs.promises.rm(`./uploads/shares/${shareId}`, { + await fs.promises.rm(`./data/uploads/shares/${shareId}`, { recursive: true, force: true, }); } getZip(shareId: string) { - return fs.createReadStream(`./uploads/shares/${shareId}/archive.zip`); + return fs.createReadStream(`./data/uploads/shares/${shareId}/archive.zip`); } getFileDownloadUrl(shareId: string, fileId: string) { diff --git a/backend/src/main.ts b/backend/src/main.ts index aee6a33..e1666df 100644 --- a/backend/src/main.ts +++ b/backend/src/main.ts @@ -7,7 +7,7 @@ async function bootstrap() { app.useGlobalPipes(new ValidationPipe()); app.useGlobalInterceptors(new ClassSerializerInterceptor(app.get(Reflector))); - await fs.promises.mkdir("./uploads/_temp", { recursive: true }); + await fs.promises.mkdir("./data/uploads/_temp", { recursive: true }); app.setGlobalPrefix("api"); await app.listen(8080); diff --git a/backend/src/prisma/prisma.service.ts b/backend/src/prisma/prisma.service.ts index ab18ebc..364ece7 100644 --- a/backend/src/prisma/prisma.service.ts +++ b/backend/src/prisma/prisma.service.ts @@ -8,7 +8,7 @@ export class PrismaService extends PrismaClient { super({ datasources: { db: { - url: "file:./pingvin-share.db", + url: "file:../data/pingvin-share.db", }, }, }); diff --git a/backend/src/share/share.service.ts b/backend/src/share/share.service.ts index d15dc52..a8c4c4b 100644 --- a/backend/src/share/share.service.ts +++ b/backend/src/share/share.service.ts @@ -57,7 +57,7 @@ export class ShareService { } async createZip(shareId: string) { - const path = `./uploads/shares/${shareId}`; + const path = `./data/uploads/shares/${shareId}`; const files = await this.prisma.file.findMany({ where: { shareId } }); const archive = archiver("zip", { diff --git a/docker-compose.yml b/docker-compose.yml index 683ec5d..8c98edb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -12,5 +12,4 @@ services: - MAX_FILE_SIZE=${MAX_FILE_SIZE} - JWT_SECRET=${JWT_SECRET} volumes: - - "${PWD}/data/uploads:/opt/app/backend/uploads" - - "${PWD}/data/pingvin-share.db:/opt/app/backend/prisma/pingvin-share.db" + - "${PWD}/data:/opt/app/backend/data"