refactor: enhance module exports and imports across services

Refactor multiple modules to improve dependency management by adding missing imports (e.g., `AuthModule`, `CryptoModule`) and ensuring essential services and repositories are exported. Update Dockerfile for better build and runtime efficiency, improve CORS handling, and enhance validation with updates to DTOs. Include package.json refinements for dependency organization.
This commit is contained in:
Mathis HERRIOT
2026-01-14 16:36:59 +01:00
parent bd9dd140ab
commit 37a23390d5
15 changed files with 98 additions and 47 deletions

View File

@@ -1,4 +1,4 @@
import { Module } from "@nestjs/common";
import { forwardRef, Module } from "@nestjs/common";
import { AuthModule } from "../auth/auth.module";
import { CryptoModule } from "../crypto/crypto.module";
import { DatabaseModule } from "../database/database.module";
@@ -7,9 +7,9 @@ import { ApiKeysService } from "./api-keys.service";
import { ApiKeysRepository } from "./repositories/api-keys.repository";
@Module({
imports: [DatabaseModule, AuthModule, CryptoModule],
imports: [DatabaseModule, forwardRef(() => AuthModule), CryptoModule],
controllers: [ApiKeysController],
providers: [ApiKeysService, ApiKeysRepository],
exports: [ApiKeysService],
exports: [ApiKeysService, ApiKeysRepository],
})
export class ApiKeysModule {}

View File

@@ -17,6 +17,6 @@ import { RbacRepository } from "./repositories/rbac.repository";
],
controllers: [AuthController],
providers: [AuthService, RbacService, RbacRepository],
exports: [AuthService, RbacService],
exports: [AuthService, RbacService, RbacRepository],
})
export class AuthModule {}

View File

@@ -1,10 +1,21 @@
import { IsEmail, IsNotEmpty, IsString, MinLength } from "class-validator";
import {
IsEmail,
IsNotEmpty,
IsString,
MaxLength,
MinLength,
} from "class-validator";
export class RegisterDto {
@IsString()
@IsNotEmpty()
@MaxLength(32)
username!: string;
@IsString()
@MaxLength(32)
displayName?: string;
@IsEmail()
email!: string;

View File

@@ -1,13 +1,15 @@
import { Module } from "@nestjs/common";
import { AuthModule } from "../auth/auth.module";
import { CryptoModule } from "../crypto/crypto.module";
import { DatabaseModule } from "../database/database.module";
import { CategoriesController } from "./categories.controller";
import { CategoriesService } from "./categories.service";
import { CategoriesRepository } from "./repositories/categories.repository";
@Module({
imports: [DatabaseModule],
imports: [DatabaseModule, AuthModule, CryptoModule],
controllers: [CategoriesController],
providers: [CategoriesService, CategoriesRepository],
exports: [CategoriesService],
exports: [CategoriesService, CategoriesRepository],
})
export class CategoriesModule {}

View File

@@ -1,10 +1,20 @@
import { Global, Module } from "@nestjs/common";
import { forwardRef, Global, Module } from "@nestjs/common";
import { ContentsModule } from "../contents/contents.module";
import { DatabaseModule } from "../database/database.module";
import { ReportsModule } from "../reports/reports.module";
import { SessionsModule } from "../sessions/sessions.module";
import { UsersModule } from "../users/users.module";
import { PurgeService } from "./services/purge.service";
@Global()
@Module({
imports: [DatabaseModule],
imports: [
DatabaseModule,
forwardRef(() => SessionsModule),
forwardRef(() => ReportsModule),
forwardRef(() => UsersModule),
forwardRef(() => ContentsModule),
],
providers: [PurgeService],
exports: [PurgeService],
})

View File

@@ -12,5 +12,6 @@ import { ContentsRepository } from "./repositories/contents.repository";
imports: [DatabaseModule, S3Module, AuthModule, CryptoModule, MediaModule],
controllers: [ContentsController],
providers: [ContentsService, ContentsRepository],
exports: [ContentsRepository],
})
export class ContentsModule {}

View File

@@ -1,13 +1,15 @@
import { Module } from "@nestjs/common";
import { AuthModule } from "../auth/auth.module";
import { CryptoModule } from "../crypto/crypto.module";
import { DatabaseModule } from "../database/database.module";
import { FavoritesController } from "./favorites.controller";
import { FavoritesService } from "./favorites.service";
import { FavoritesRepository } from "./repositories/favorites.repository";
@Module({
imports: [DatabaseModule],
imports: [DatabaseModule, AuthModule, CryptoModule],
controllers: [FavoritesController],
providers: [FavoritesService, FavoritesRepository],
exports: [FavoritesService],
exports: [FavoritesService, FavoritesRepository],
})
export class FavoritesModule {}

View File

@@ -24,14 +24,31 @@ async function bootstrap() {
}
// Sécurité
app.use(helmet());
app.enableCors({
origin:
configService.get("NODE_ENV") === "production"
? [configService.get("DOMAIN_NAME") as string]
: true,
credentials: true,
});
app.use(
helmet({
crossOriginResourcePolicy: { policy: "cross-origin" },
}),
);
const corsEnabled = Boolean(configService.get<boolean>("ENABLE_CORS"));
if (corsEnabled) {
const domainName = configService.get<string>("CORS_DOMAIN_NAME");
app.enableCors({
origin: (origin, callback) => {
if (!origin || domainName === "*") {
callback(null, true);
return;
}
const allowedOrigins = domainName?.split(",").map((o) => o.trim()) || [];
if (allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(null, false);
}
},
credentials: true,
});
}
// Validation Globale
app.useGlobalPipes(
@@ -49,4 +66,4 @@ async function bootstrap() {
await app.listen(port);
logger.log(`Application is running on: http://localhost:${port}`);
}
bootstrap();
bootstrap().then();

View File

@@ -5,7 +5,7 @@ import {
Logger,
} from "@nestjs/common";
import { ConfigService } from "@nestjs/config";
import * as NodeClam from "clamscan";
import NodeClam from "clamscan";
import type {
IMediaService,
MediaProcessingResult,

View File

@@ -1,4 +1,4 @@
import { Module } from "@nestjs/common";
import { forwardRef, Module } from "@nestjs/common";
import { AuthModule } from "../auth/auth.module";
import { CryptoModule } from "../crypto/crypto.module";
import { DatabaseModule } from "../database/database.module";
@@ -7,8 +7,9 @@ import { ReportsService } from "./reports.service";
import { ReportsRepository } from "./repositories/reports.repository";
@Module({
imports: [DatabaseModule, AuthModule, CryptoModule],
imports: [DatabaseModule, forwardRef(() => AuthModule), CryptoModule],
controllers: [ReportsController],
providers: [ReportsService, ReportsRepository],
exports: [ReportsRepository, ReportsService],
})
export class ReportsModule {}

View File

@@ -7,6 +7,6 @@ import { SessionsService } from "./sessions.service";
@Module({
imports: [DatabaseModule, CryptoModule],
providers: [SessionsService, SessionsRepository],
exports: [SessionsService],
exports: [SessionsService, SessionsRepository],
})
export class SessionsModule {}

View File

@@ -1,13 +1,15 @@
import { Module } from "@nestjs/common";
import { AuthModule } from "../auth/auth.module";
import { CryptoModule } from "../crypto/crypto.module";
import { DatabaseModule } from "../database/database.module";
import { TagsRepository } from "./repositories/tags.repository";
import { TagsController } from "./tags.controller";
import { TagsService } from "./tags.service";
@Module({
imports: [DatabaseModule],
imports: [DatabaseModule, AuthModule, CryptoModule],
controllers: [TagsController],
providers: [TagsService, TagsRepository],
exports: [TagsService],
exports: [TagsService, TagsRepository],
})
export class TagsModule {}

View File

@@ -10,6 +10,6 @@ import { UsersService } from "./users.service";
imports: [DatabaseModule, CryptoModule, forwardRef(() => AuthModule)],
controllers: [UsersController],
providers: [UsersService, UsersRepository],
exports: [UsersService],
exports: [UsersService, UsersRepository],
})
export class UsersModule {}