Skip to content

Instantly share code, notes, and snippets.

View paulodutra's full-sized avatar

Paulo Dutra paulodutra

View GitHub Profile
@paulodutra
paulodutra / mysql-database-config.ts
Last active August 11, 2024 16:55
Mysql database config Typeorm Nestjs
import { registerAs } from '@nestjs/config';
import { TypeOrmModuleOptions } from '@nestjs/typeorm';
export const mysqlDatabaseConfig = registerAs(
'database.mysql',
(): TypeOrmModuleOptions => ({
type: 'mysql',
host: process.env.DB_HOST,
username: process.env.DB_USERNAME,
password: process.env.DB_PASSWORD,
@paulodutra
paulodutra / database-module.ts
Last active August 11, 2024 16:56
Database Dynamic module nestjs
import { DynamicModule, Module } from '@nestjs/common';
import { MysqlModule } from './mysql/mysql.module';
import { InMemoryModule } from './in-memory/in-memory.module';
@Module({
imports: [MysqlModule, InMemoryModule],
})
export class DatabaseModule {
static forRoot(): DynamicModule {
const isTestEnv = process.env.NODE_ENV === 'test';
import { MigrationInterface, QueryRunner, Table } from 'typeorm';
export class CreateTaskTable1722825209848 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: 'task',
columns: [
{
name: 'id',
@paulodutra
paulodutra / task-seed-service.ts
Last active August 11, 2024 17:03
Faker js seed for task table
import { Injectable } from '@nestjs/common';
import { EntityManager } from 'typeorm';
import { faker } from '@faker-js/faker';
import { Task } from '@/infrastructure/database/entities/task.entity';
@Injectable()
export class TaskSeedService {
private done = [0, 1];
constructor(private readonly entityManager: EntityManager) {}
@paulodutra
paulodutra / task.entity.ts
Last active August 11, 2024 16:59
Task entity typeorm
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';
@Entity()
export class Task {
@PrimaryGeneratedColumn()
id: number;
@Column()
name: string;
@paulodutra
paulodutra / task.repository.ts
Last active August 11, 2024 17:04
Task repository
import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Task } from '../entities/task.entity';
@Injectable()
export class TaskRepository {
constructor(
@InjectRepository(Task)
private repository: Repository<Task>,
@paulodutra
paulodutra / in-memory.module.ts
Last active August 11, 2024 17:06
InMemory Database module with providers and exports
import { Module } from '@nestjs/common';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { inMemoryDatabaseConfig } from '@/main/config/database/in-memory-database.config';
import { TaskRepository } from '@/infrastructure/database/repositories/task.repository';
import { TaskSeedService } from '@/infrastructure/database/seeds/task-seed-service';
import { Task } from '@/infrastructure/database/entities/task.entity';
@Module({
imports: [
@paulodutra
paulodutra / mysql.module.ts
Last active August 11, 2024 17:07
Mysql Database module with providers and exports
import { Module } from '@nestjs/common';
import { TypeOrmModule, TypeOrmModuleOptions } from '@nestjs/typeorm';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { mysqlDatabaseConfig } from '@/main/config/database/mysql-database.config';
import { TaskRepository } from '@/infrastructure/database/repositories/task.repository';
import { TaskSeedService } from '@/infrastructure/database/seeds/task-seed-service';
import { Task } from '@/infrastructure/database/entities/task.entity';
@Module({
imports: [
@paulodutra
paulodutra / task.service.ts
Created August 7, 2024 22:31
Configuration of test module to run the migration and seed before run the test cases.
import { Test, TestingModule } from '@nestjs/testing';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Connection } from 'typeorm';
import { TaskSeedService } from '../../infrastructure/database/seeds/task-seed-service';
import { TaskService } from './task.service';
import { Task } from '../../infrastructure/database/entities/task.entity';
import { DatabaseModule } from '../../infrastructure/database/database.module';
describe('TaskService', () => {
let service: TaskService;
@paulodutra
paulodutra / task.controller.ts
Created August 12, 2024 01:57
The method of controller that filter the tasks.
import { Controller, Get, Query, Req, Res, HttpStatus } from '@nestjs/common';
import type { Request, Response } from 'express';
import { TaskService } from '@/modules/task/task.service';
@Controller('tasks')
export class TaskController {
constructor(private readonly taskService: TaskService) {}
@Get()
async searchTaskByState(