From b77956e76c71220914c4b72e38779d25b3764a6e Mon Sep 17 00:00:00 2001 From: raiper34 Date: Sun, 21 Jul 2024 14:24:36 +0200 Subject: [PATCH] building dist and environment paths rework --- .gitignore | 1 + Dockerfile | 4 +++- package.json | 2 +- src/backend/.env.default | 4 ++++ src/backend/.gitignore | 1 + src/backend/package.json | 2 +- src/backend/src/app.module.ts | 5 +++-- src/backend/src/enviroment.enum.ts | 6 ++++++ src/backend/src/main.ts | 2 +- src/backend/src/track/track.controller.ts | 5 +++-- src/backend/src/track/track.service.ts | 7 ++++--- src/backend/tsconfig.json | 2 +- src/frontend/angular.json | 2 +- 13 files changed, 30 insertions(+), 13 deletions(-) create mode 100644 src/backend/.env.default create mode 100644 src/backend/src/enviroment.enum.ts diff --git a/.gitignore b/.gitignore index a0062fb..8191c89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /node_modules +/dist /.idea **/*.sqlite \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 8f6cd08..38b0858 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,11 @@ FROM node:18 -WORKDIR /usr/src/app +WORKDIR /spooty COPY . . +RUN apt-get -y update && apt-get -y upgrade && apt-get install -y --no-install-recommends ffmpeg + RUN npm install RUN npm run build diff --git a/package.json b/package.json index d74763d..11e8fb2 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "start:fe": "npm run start -w frontend", "build:be": "npm run build -w backend", "build:fe": "npm run build -w frontend", - "build": "npm run build:be npm run build:fe", + "build": "npm run build:be && npm run build:fe", "gen:fe": "npm run gen -w frontend", "start": "npm run start:prod -w backend" } diff --git a/src/backend/.env.default b/src/backend/.env.default new file mode 100644 index 0000000..f3a4037 --- /dev/null +++ b/src/backend/.env.default @@ -0,0 +1,4 @@ +DB_PATH=./config/db.sqlite +FE_PATH=../frontend/browser +DOWNLOADS_PATH=./downloads +FORMAT=mp3 \ No newline at end of file diff --git a/src/backend/.gitignore b/src/backend/.gitignore index 4b56acf..e942112 100644 --- a/src/backend/.gitignore +++ b/src/backend/.gitignore @@ -45,6 +45,7 @@ lerna-debug.log* # temp directory .temp .tmp +config # Runtime data pids diff --git a/src/backend/package.json b/src/backend/package.json index 8f75e17..e7ba72c 100644 --- a/src/backend/package.json +++ b/src/backend/package.json @@ -11,7 +11,7 @@ "start": "nest start", "start:dev": "nest start --watch", "start:debug": "nest start --debug --watch", - "start:prod": "node dist/main", + "start:prod": "node ../../dist/backend/main", "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", "test": "jest", "test:watch": "jest --watch", diff --git a/src/backend/src/app.module.ts b/src/backend/src/app.module.ts index 8dea8f4..e4eefdd 100644 --- a/src/backend/src/app.module.ts +++ b/src/backend/src/app.module.ts @@ -9,6 +9,7 @@ import {TrackModule} from "./track/track.module"; import {PlaylistModule} from "./playlist/playlist.module"; import {PlaylistEntity} from "./playlist/playlist.entity"; import { resolve } from 'path'; +import {EnviromentEnum} from "./enviroment.enum"; @Module({ imports: [ @@ -18,7 +19,7 @@ import { resolve } from 'path'; imports:[ConfigModule], useFactory: async (configService: ConfigService) => ({ type: 'sqlite', - database: configService.get('DB'), + database: resolve(__dirname, configService.get(EnviromentEnum.DB_PATH)), entities: [TrackEntity, PlaylistEntity], synchronize: true, }), @@ -27,7 +28,7 @@ import { resolve } from 'path'; ServeStaticModule.forRootAsync({ imports:[ConfigModule], useFactory: async (configService: ConfigService) => ([{ - rootPath: resolve(__dirname, configService.get('FE')), + rootPath: resolve(__dirname, configService.get(EnviromentEnum.FE_PATH)), exclude: ['/api/(.*)'], }]), inject: [ConfigService] diff --git a/src/backend/src/enviroment.enum.ts b/src/backend/src/enviroment.enum.ts new file mode 100644 index 0000000..48c0656 --- /dev/null +++ b/src/backend/src/enviroment.enum.ts @@ -0,0 +1,6 @@ +export enum EnviromentEnum { + DB_PATH = 'DB_PATH', + FE_PATH = 'FE_PATH', + DOWNLOADS_PATH = 'DOWNLOADS_PATH', + FORMAT = 'FORMAT', +} \ No newline at end of file diff --git a/src/backend/src/main.ts b/src/backend/src/main.ts index 94dd11a..84ad2e5 100644 --- a/src/backend/src/main.ts +++ b/src/backend/src/main.ts @@ -9,5 +9,5 @@ async function bootstrap() { await app.listen(3000); } bootstrap(); -const folderName = resolve(__dirname, process.env.DOWNLOADS); +const folderName = resolve(__dirname, process.env.DOWNLOADS_PATH); !fs.existsSync(folderName) && fs.mkdirSync(folderName); diff --git a/src/backend/src/track/track.controller.ts b/src/backend/src/track/track.controller.ts index 4a09e6e..6ace610 100644 --- a/src/backend/src/track/track.controller.ts +++ b/src/backend/src/track/track.controller.ts @@ -5,6 +5,7 @@ import {createReadStream} from "fs"; import { resolve } from 'path'; import type { Response } from 'express'; import {ConfigService} from "@nestjs/config"; +import {EnviromentEnum} from "../enviroment.enum"; @Controller('track') export class TrackController { @@ -26,8 +27,8 @@ export class TrackController { @Get('download/:id') async getFile(@Res({ passthrough: true }) res: Response, @Param('id') id: number): Promise { const track = await this.service.findOne(id); - const fileName = `${track.artist} - ${track.song}.${this.configService.get('FORMAT')}`; - const filePath = createReadStream(resolve(__dirname, '..', this.configService.get('DOWNLOADS'), fileName)); + const fileName = `${track.artist} - ${track.song}.${this.configService.get(EnviromentEnum.FORMAT)}`; + const filePath = createReadStream(resolve(__dirname, '..', this.configService.get(EnviromentEnum.DOWNLOADS_PATH), fileName)); res.set({'Content-Disposition': `attachment; filename="${fileName}`}); return new StreamableFile(filePath); } diff --git a/src/backend/src/track/track.service.ts b/src/backend/src/track/track.service.ts index 5b06d93..3447d29 100644 --- a/src/backend/src/track/track.service.ts +++ b/src/backend/src/track/track.service.ts @@ -14,6 +14,7 @@ import {resolve} from "path"; import {WebSocketGateway, WebSocketServer} from "@nestjs/websockets"; import {Server} from "socket.io"; import * as ffmpeg from 'fluent-ffmpeg'; +import {EnviromentEnum} from "../enviroment.enum"; @WebSocketGateway() @Injectable() @@ -108,13 +109,13 @@ export class TrackService { .on('error', (err) => reject(err)); ffmpeg(audio) .outputOptions('-metadata', `title=${track.song}`, '-metadata', `artist=${track.artist}`) - .format(this.configService.get('FORMAT')) + .format(this.configService.get(EnviromentEnum.FORMAT)) .on('error', (err) => reject(err)) .pipe( fs.createWriteStream( resolve( - __dirname, '..', this.configService.get('DOWNLOADS'), - `${track.artist} - ${track.song.replace('/', '')}.${this.configService.get('FORMAT')}` + __dirname, '..', this.configService.get(EnviromentEnum.DOWNLOADS_PATH), + `${track.artist} - ${track.song.replace('/', '')}.${this.configService.get(EnviromentEnum.FORMAT)}` ) ).on('finish', () => res()).on('error', (err) => reject(err)) ); diff --git a/src/backend/tsconfig.json b/src/backend/tsconfig.json index 95f5641..9b14425 100644 --- a/src/backend/tsconfig.json +++ b/src/backend/tsconfig.json @@ -8,7 +8,7 @@ "allowSyntheticDefaultImports": true, "target": "ES2021", "sourceMap": true, - "outDir": "./dist", + "outDir": "../../dist/backend", "baseUrl": "./", "incremental": true, "skipLibCheck": true, diff --git a/src/frontend/angular.json b/src/frontend/angular.json index 0d387f7..9e0d685 100644 --- a/src/frontend/angular.json +++ b/src/frontend/angular.json @@ -17,7 +17,7 @@ "build": { "builder": "@angular-devkit/build-angular:application", "options": { - "outputPath": "dist/spooty-fe", + "outputPath": "../../dist/frontend", "index": "src/index.html", "browser": "src/main.ts", "polyfills": [