refactor(backend): refactor backend code
This commit is contained in:
@@ -2,3 +2,4 @@ DB_PATH=./config/db.sqlite
|
|||||||
FE_PATH=../frontend/browser
|
FE_PATH=../frontend/browser
|
||||||
DOWNLOADS_PATH=./downloads
|
DOWNLOADS_PATH=./downloads
|
||||||
FORMAT=mp3
|
FORMAT=mp3
|
||||||
|
PORT=3000
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
import { Test, TestingModule } from '@nestjs/testing';
|
import { Test, TestingModule } from '@nestjs/testing';
|
||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { AppService } from './app.service';
|
|
||||||
|
|
||||||
describe('AppController', () => {
|
describe('AppController', () => {
|
||||||
let appController: AppController;
|
let appController: AppController;
|
||||||
@@ -8,7 +7,7 @@ describe('AppController', () => {
|
|||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
const app: TestingModule = await Test.createTestingModule({
|
const app: TestingModule = await Test.createTestingModule({
|
||||||
controllers: [AppController],
|
controllers: [AppController],
|
||||||
providers: [AppService],
|
providers: [],
|
||||||
}).compile();
|
}).compile();
|
||||||
|
|
||||||
appController = app.get<AppController>(AppController);
|
appController = app.get<AppController>(AppController);
|
||||||
|
|||||||
@@ -2,43 +2,49 @@ import { Module } from '@nestjs/common';
|
|||||||
import { AppController } from './app.controller';
|
import { AppController } from './app.controller';
|
||||||
import { ScheduleModule } from '@nestjs/schedule';
|
import { ScheduleModule } from '@nestjs/schedule';
|
||||||
import { ServeStaticModule } from '@nestjs/serve-static';
|
import { ServeStaticModule } from '@nestjs/serve-static';
|
||||||
import {ConfigModule, ConfigService} from "@nestjs/config";
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||||||
import {TypeOrmModule} from '@nestjs/typeorm';
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||||
import {TrackEntity} from "./track/track.entity";
|
import { TrackEntity } from './track/track.entity';
|
||||||
import {TrackModule} from "./track/track.module";
|
import { TrackModule } from './track/track.module';
|
||||||
import {PlaylistModule} from "./playlist/playlist.module";
|
import { PlaylistModule } from './playlist/playlist.module';
|
||||||
import {PlaylistEntity} from "./playlist/playlist.entity";
|
import { PlaylistEntity } from './playlist/playlist.entity';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import {EnviromentEnum} from "./enviroment.enum";
|
import { EnvironmentEnum } from './environmentEnum';
|
||||||
|
|
||||||
@Module({
|
@Module({
|
||||||
imports: [
|
imports: [
|
||||||
ConfigModule.forRoot(),
|
ConfigModule.forRoot(),
|
||||||
ScheduleModule.forRoot(),
|
ScheduleModule.forRoot(),
|
||||||
TypeOrmModule.forRootAsync({
|
TypeOrmModule.forRootAsync({
|
||||||
imports:[ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: async (configService: ConfigService) => ({
|
useFactory: async (configService: ConfigService) => ({
|
||||||
type: 'sqlite',
|
type: 'sqlite',
|
||||||
database: resolve(__dirname, configService.get<string>(EnviromentEnum.DB_PATH)),
|
database: resolve(
|
||||||
|
__dirname,
|
||||||
|
configService.get<string>(EnvironmentEnum.DB_PATH),
|
||||||
|
),
|
||||||
entities: [TrackEntity, PlaylistEntity],
|
entities: [TrackEntity, PlaylistEntity],
|
||||||
synchronize: true,
|
synchronize: true,
|
||||||
}),
|
}),
|
||||||
inject: [ConfigService]
|
inject: [ConfigService],
|
||||||
}),
|
}),
|
||||||
ServeStaticModule.forRootAsync({
|
ServeStaticModule.forRootAsync({
|
||||||
imports:[ConfigModule],
|
imports: [ConfigModule],
|
||||||
useFactory: async (configService: ConfigService) => ([{
|
useFactory: async (configService: ConfigService) => [
|
||||||
rootPath: resolve(__dirname, configService.get<string>(EnviromentEnum.FE_PATH)),
|
{
|
||||||
|
rootPath: resolve(
|
||||||
|
__dirname,
|
||||||
|
configService.get<string>(EnvironmentEnum.FE_PATH),
|
||||||
|
),
|
||||||
exclude: ['/api/(.*)'],
|
exclude: ['/api/(.*)'],
|
||||||
}]),
|
},
|
||||||
inject: [ConfigService]
|
],
|
||||||
|
inject: [ConfigService],
|
||||||
}),
|
}),
|
||||||
TrackModule,
|
TrackModule,
|
||||||
PlaylistModule,
|
PlaylistModule,
|
||||||
],
|
],
|
||||||
controllers: [
|
controllers: [AppController],
|
||||||
AppController,
|
|
||||||
],
|
|
||||||
providers: [],
|
providers: [],
|
||||||
})
|
})
|
||||||
export class AppModule {}
|
export class AppModule {}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
export enum EnviromentEnum {
|
export enum EnvironmentEnum {
|
||||||
DB_PATH = 'DB_PATH',
|
DB_PATH = 'DB_PATH',
|
||||||
FE_PATH = 'FE_PATH',
|
FE_PATH = 'FE_PATH',
|
||||||
DOWNLOADS_PATH = 'DOWNLOADS_PATH',
|
DOWNLOADS_PATH = 'DOWNLOADS_PATH',
|
||||||
@@ -6,8 +6,12 @@ import { resolve } from 'path';
|
|||||||
async function bootstrap() {
|
async function bootstrap() {
|
||||||
const app = await NestFactory.create(AppModule);
|
const app = await NestFactory.create(AppModule);
|
||||||
app.setGlobalPrefix('api');
|
app.setGlobalPrefix('api');
|
||||||
await app.listen(3000);
|
await app.listen(process.env.PORT || 3000);
|
||||||
}
|
}
|
||||||
bootstrap();
|
bootstrap();
|
||||||
|
|
||||||
|
if (!process.env.DOWNLOADS_PATH) {
|
||||||
|
throw new Error('DOWNLOADS_PATH environment variable is missing');
|
||||||
|
}
|
||||||
const folderName = resolve(__dirname, process.env.DOWNLOADS_PATH);
|
const folderName = resolve(__dirname, process.env.DOWNLOADS_PATH);
|
||||||
!fs.existsSync(folderName) && fs.mkdirSync(folderName);
|
!fs.existsSync(folderName) && fs.mkdirSync(folderName);
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { Injectable } from '@nestjs/common';
|
import { Injectable } from '@nestjs/common';
|
||||||
import { ConfigService } from '@nestjs/config';
|
import { ConfigService } from '@nestjs/config';
|
||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { EnviromentEnum } from '../enviroment.enum';
|
import { EnvironmentEnum } from '../environmentEnum';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class UtilsService {
|
export class UtilsService {
|
||||||
@@ -11,7 +11,7 @@ export class UtilsService {
|
|||||||
return resolve(
|
return resolve(
|
||||||
__dirname,
|
__dirname,
|
||||||
'..',
|
'..',
|
||||||
this.configService.get<string>(EnviromentEnum.DOWNLOADS_PATH),
|
this.configService.get<string>(EnvironmentEnum.DOWNLOADS_PATH),
|
||||||
name,
|
name,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import { resolve } from 'path';
|
|||||||
import { WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
|
import { WebSocketGateway, WebSocketServer } from '@nestjs/websockets';
|
||||||
import { Server } from 'socket.io';
|
import { Server } from 'socket.io';
|
||||||
import * as ffmpeg from 'fluent-ffmpeg';
|
import * as ffmpeg from 'fluent-ffmpeg';
|
||||||
import { EnviromentEnum } from '../enviroment.enum';
|
import { EnvironmentEnum } from '../environmentEnum';
|
||||||
import {UtilsService} from "../shared/utils.service";
|
import { UtilsService } from '../shared/utils.service';
|
||||||
|
|
||||||
enum WsTrackOperation {
|
enum WsTrackOperation {
|
||||||
New = 'trackNew',
|
New = 'trackNew',
|
||||||
@@ -138,7 +138,7 @@ export class TrackService {
|
|||||||
}).on('error', (err) => reject(err));
|
}).on('error', (err) => reject(err));
|
||||||
ffmpeg(audio)
|
ffmpeg(audio)
|
||||||
.outputOptions(ffmpegOptions)
|
.outputOptions(ffmpegOptions)
|
||||||
.format(this.configService.get<string>(EnviromentEnum.FORMAT))
|
.format(this.configService.get<string>(EnvironmentEnum.FORMAT))
|
||||||
.on('error', (err) => reject(err))
|
.on('error', (err) => reject(err))
|
||||||
.pipe(
|
.pipe(
|
||||||
fs
|
fs
|
||||||
@@ -150,7 +150,7 @@ export class TrackService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrackFileName(track: TrackEntity): string {
|
getTrackFileName(track: TrackEntity): string {
|
||||||
return `${track.artist} - ${track.name.replace('/', '')}.${this.configService.get<string>(EnviromentEnum.FORMAT)}`;
|
return `${track.artist} - ${track.name.replace('/', '')}.${this.configService.get<string>(EnvironmentEnum.FORMAT)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
getFolderName(track: TrackEntity, playlist: PlaylistEntity): string {
|
getFolderName(track: TrackEntity, playlist: PlaylistEntity): string {
|
||||||
|
|||||||
Reference in New Issue
Block a user