Merhaba,

 

Bu yazıda NestJS üzerinde MongoDB ve Swagger kullanımından bahsedeceğim.

 

İlk olarak bir NestJS projesi oluşturuyoruz:

nest new nest-mongo-swagger-sample

 

Gerekli paketleri kuruyoruz:

npm i @nestjs/mongoose mongoose @nestjs/swagger swagger-ui-express

 

MongoDB'yi kolaylık olması adına Docker üzerinden çalıştırıyoruz:

docker run -d -p 27017:27017 --name mongodb mongo:latest

 

Projede basitçe users modülü oluşturup CRUD işlemleri yapacağız. Modülü oluşturuyoruz:

nest g module users

 

app.module.ts dosyasını açıp MongoDB'yi ve users modülünü import ediyoruz:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';
import { UsersModule } from './users/users.module';

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost:27017/test'),
    UsersModule
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

 

src/users klasörü içerisine users.model.ts dosyası oluşturuyoruz:

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { ApiProperty, ApiTags } from '@nestjs/swagger';
import { Document } from 'mongoose';

export type UserDocument = User & Document;

@Schema()
@ApiTags('users')
export class User {
  @Prop()
  @ApiProperty()
  name: string;

  @Prop()
  @ApiProperty()
  email: string;

  @Prop()
  @ApiProperty()
  password: string;
}

export const UserSchema = SchemaFactory.createForClass(User);

 

users için service dosyasını oluşturuyoruz:

nest g service users

 

users.service.ts:

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User, UserDocument } from './users.model';

@Injectable()
export class UsersService {
  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}

  create(user: User): Promise<User> {
    return this.userModel.create(user);
  }

  findAll() {
    return this.userModel.find();
  }

  findOne(id: string) {
    return this.userModel.findById(id);
  }

  update(id: string, user: User) {
    return this.userModel.findByIdAndUpdate(id, user);
  }

  remove(id: string) {
    return this.userModel.findByIdAndDelete(id);
  }
}

 

users için controller dosyasını oluşturuyoruz:

nest g controller users

 

users.controller.ts:

import { 
  Controller, 
  Post, 
  Get, 
  Body,
  Patch,
  Param,
  Delete
} from '@nestjs/common';
import { User } from './users.model';
import { UsersService } from './users.service';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Post()
  create(@Body() createUserDto: User) {
    return this.usersService.create(createUserDto);
  }

  @Get()
  findAll() {
    return this.usersService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    return this.usersService.findOne(id);
  }

  @Patch(':id')
  update(@Param('id') id: string, @Body() updateUserDto: User) {
    return this.usersService.update(id, updateUserDto);
  }

  @Delete(':id')
  remove(@Param('id') id: string) {
    return this.usersService.remove(id);
  }
}

 

users.module.ts dosyasını açıp import işlemlerini yapıyoruz:

import { Module } from '@nestjs/common';
import { UsersController } from './users.controller';
import { UsersService } from './users.service';
import { MongooseModule } from '@nestjs/mongoose';
import { User, UserSchema } from './users.model';

@Module({
  imports: [
    MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])
  ],
  controllers: [UsersController],
  providers: [UsersService]
})
export class UsersModule {}

 

Son olarak main.ts dosyasını açıp Swagger'ı ayarlıyoruz:

import { NestFactory } from '@nestjs/core';
import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  
  const config = new DocumentBuilder()
    .setTitle('Users example')
    .setDescription('The users API description')
    .setVersion('1.0')
    .build();
  const document = SwaggerModule.createDocument(app, config);
  SwaggerModule.setup('api', app, document);

  await app.listen(3000);
}
bootstrap();

 

Projeyi ayağa kaldırıyoruz:

npm run start

 

http://localhost:3000/api linkine gittiğimizde bizi Swagger arayüzü karşılıyor:

 

Artık bu arayüz üzerinden API testlerini yapabilirsiniz.

 

Projenin kaynak kodlarına buradan ulaşabilirsiniz.

 

Umarım yararlı olmuştur.

 

İyi çalışmalar.