import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ConfigModule, ConfigService } from '@nestjs/config'; import * as Joi from 'joi'; import {UsersModule} from "./users/user.module"; import {AuthenticationModule} from "./authentication/authentication.module"; import { PostsModule } from './posts/posts.module'; import { CategoriesModule } from './categories/categories.module'; import {FilesModule} from "./files/file.module"; @Module({ imports: [ TypeOrmModule.forRootAsync({ imports: [ConfigModule], inject: [ConfigService], useFactory: (configService: ConfigService) => ({ type: 'postgres', host: configService.get('POSTGRES_HOST'), port: parseInt(configService.get('POSTGRES_PORT', '5432'), 10), username: configService.get('POSTGRES_USER'), password: configService.get('POSTGRES_PASSWORD'), database: configService.get('POSTGRES_DB'), autoLoadEntities: true, ssl: { rejectUnauthorized: false, // Needed for Neon and similar managed DBs }, synchronize: true, // Disable in production }), }), ConfigModule.forRoot({ validationSchema: Joi.object({ JWT_SECRET: Joi.string().required(), JWT_EXPIRATION_TIME: Joi.string().required(), S3_BUCKET: Joi.string().required(), S3_ACCESS_KEY: Joi.string().required(), S3_ENDPOINT: Joi.string().required(), }) }), UsersModule, AuthenticationModule, PostsModule, CategoriesModule, FilesModule, ], controllers: [AppController], providers: [AppService], }) export class AppModule {}