Refactor code structure for improved readability and maintainability
This commit is contained in:
31
src/app/app.module.ts
Normal file
31
src/app/app.module.ts
Normal file
@ -0,0 +1,31 @@
|
||||
import { Module } from "@nestjs/common";
|
||||
import { TypeOrmModule } from "@nestjs/typeorm";
|
||||
import { ConfigModule } from "@nestjs/config";
|
||||
import { User } from "../entities/user.entity";
|
||||
import { UserService } from "../services/user.service";
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule.forRoot({
|
||||
isGlobal: true,
|
||||
envFilePath: ".env",
|
||||
}),
|
||||
TypeOrmModule.forRoot({
|
||||
type: "mariadb",
|
||||
host: process.env.DB_HOST || "localhost",
|
||||
port: parseInt(process.env.DB_PORT) || 3306,
|
||||
username: process.env.DB_USERNAME || "root",
|
||||
password: process.env.DB_PASSWORD || "",
|
||||
database: process.env.DB_DATABASE || "low_code_engine",
|
||||
entities: [__dirname + "/../**/*.entity{.ts,.js}"],
|
||||
migrations: [__dirname + "/../migrations/*{.ts,.js}"],
|
||||
synchronize: process.env.NODE_ENV === "development",
|
||||
migrationsRun: process.env.NODE_ENV === "production",
|
||||
autoLoadEntities: true,
|
||||
}),
|
||||
TypeOrmModule.forFeature([User]),
|
||||
],
|
||||
controllers: [],
|
||||
providers: [UserService],
|
||||
})
|
||||
export class AppModule {}
|
||||
18
src/data-source.ts
Normal file
18
src/data-source.ts
Normal file
@ -0,0 +1,18 @@
|
||||
import { DataSource } from "typeorm";
|
||||
import { config } from "dotenv";
|
||||
|
||||
// Load environment variables
|
||||
config();
|
||||
|
||||
export default new DataSource({
|
||||
type: "mariadb",
|
||||
host: process.env.DB_HOST || "localhost",
|
||||
port: parseInt(process.env.DB_PORT) || 3306,
|
||||
username: process.env.DB_USERNAME || "root",
|
||||
password: process.env.DB_PASSWORD || "",
|
||||
database: process.env.DB_DATABASE || "low_code_engine",
|
||||
entities: ["src/**/*.entity{.ts,.js}"],
|
||||
migrations: ["src/migrations/*{.ts,.js}"],
|
||||
synchronize: false,
|
||||
logging: false,
|
||||
});
|
||||
31
src/entities/user.entity.ts
Normal file
31
src/entities/user.entity.ts
Normal file
@ -0,0 +1,31 @@
|
||||
import {
|
||||
Entity,
|
||||
PrimaryGeneratedColumn,
|
||||
Column,
|
||||
CreateDateColumn,
|
||||
UpdateDateColumn,
|
||||
} from "typeorm";
|
||||
|
||||
@Entity("users")
|
||||
export class User {
|
||||
@PrimaryGeneratedColumn()
|
||||
id: number;
|
||||
|
||||
@Column({ unique: true })
|
||||
email: string;
|
||||
|
||||
@Column()
|
||||
firstName: string;
|
||||
|
||||
@Column()
|
||||
lastName: string;
|
||||
|
||||
@Column({ default: true })
|
||||
isActive: boolean;
|
||||
|
||||
@CreateDateColumn()
|
||||
createdAt: Date;
|
||||
|
||||
@UpdateDateColumn()
|
||||
updatedAt: Date;
|
||||
}
|
||||
9
src/main.ts
Normal file
9
src/main.ts
Normal file
@ -0,0 +1,9 @@
|
||||
import { NestFactory } from "@nestjs/core";
|
||||
import { AppModule } from "./app/app.module";
|
||||
|
||||
async function bootstrap() {
|
||||
const app = await NestFactory.create(AppModule);
|
||||
await app.listen(3000);
|
||||
}
|
||||
|
||||
bootstrap();
|
||||
15
src/migrations/1757413588655-Init.ts
Normal file
15
src/migrations/1757413588655-Init.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { MigrationInterface, QueryRunner } from "typeorm";
|
||||
|
||||
export class Init1757413588655 implements MigrationInterface {
|
||||
name = 'Init1757413588655'
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`CREATE TABLE \`users\` (\`id\` int NOT NULL AUTO_INCREMENT, \`email\` varchar(255) NOT NULL, \`firstName\` varchar(255) NOT NULL, \`lastName\` varchar(255) NOT NULL, \`isActive\` tinyint NOT NULL DEFAULT 1, \`createdAt\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), \`updatedAt\` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6), UNIQUE INDEX \`IDX_97672ac88f789774dd47f7c8be\` (\`email\`), PRIMARY KEY (\`id\`)) ENGINE=InnoDB`);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(`DROP INDEX \`IDX_97672ac88f789774dd47f7c8be\` ON \`users\``);
|
||||
await queryRunner.query(`DROP TABLE \`users\``);
|
||||
}
|
||||
|
||||
}
|
||||
34
src/services/user.service.ts
Normal file
34
src/services/user.service.ts
Normal file
@ -0,0 +1,34 @@
|
||||
import { Injectable } from "@nestjs/common";
|
||||
import { InjectRepository } from "@nestjs/typeorm";
|
||||
import { Repository } from "typeorm";
|
||||
import { User } from "../entities/user.entity";
|
||||
|
||||
@Injectable()
|
||||
export class UserService {
|
||||
constructor(
|
||||
@InjectRepository(User)
|
||||
private userRepository: Repository<User>
|
||||
) {}
|
||||
|
||||
async findAll(): Promise<User[]> {
|
||||
return this.userRepository.find();
|
||||
}
|
||||
|
||||
async findOne(id: number): Promise<User> {
|
||||
return this.userRepository.findOne({ where: { id } });
|
||||
}
|
||||
|
||||
async create(userData: Partial<User>): Promise<User> {
|
||||
const user = this.userRepository.create(userData);
|
||||
return this.userRepository.save(user);
|
||||
}
|
||||
|
||||
async update(id: number, userData: Partial<User>): Promise<User> {
|
||||
await this.userRepository.update(id, userData);
|
||||
return this.findOne(id);
|
||||
}
|
||||
|
||||
async remove(id: number): Promise<void> {
|
||||
await this.userRepository.delete(id);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user