add task module

This commit is contained in:
Sergey Krylov 2025-06-03 07:22:39 +03:00
parent e447aef063
commit 930068c7e6
11 changed files with 147 additions and 47 deletions

View File

@ -22,6 +22,7 @@
"dependencies": { "dependencies": {
"@nestjs/common": "^11.0.1", "@nestjs/common": "^11.0.1",
"@nestjs/core": "^11.0.1", "@nestjs/core": "^11.0.1",
"@nestjs/mapped-types": "*",
"@nestjs/platform-express": "^11.0.1", "@nestjs/platform-express": "^11.0.1",
"reflect-metadata": "^0.2.2", "reflect-metadata": "^0.2.2",
"rxjs": "^7.8.1" "rxjs": "^7.8.1"

View File

@ -1,22 +0,0 @@
import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';
describe('AppController', () => {
let appController: AppController;
beforeEach(async () => {
const app: TestingModule = await Test.createTestingModule({
controllers: [AppController],
providers: [AppService],
}).compile();
appController = app.get<AppController>(AppController);
});
describe('root', () => {
it('should return "Hello World!"', () => {
expect(appController.getHello()).toBe('Hello World!');
});
});
});

View File

@ -1,12 +0,0 @@
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Get()
getHello(): string {
return this.appService.getHello();
}
}

View File

@ -1,10 +1,9 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { AppController } from './app.controller'; import { TaskModule } from './task/task.module';
import { AppService } from './app.service';
@Module({ @Module({
imports: [], imports: [TaskModule],
controllers: [AppController], controllers: [],
providers: [AppService], providers: [],
}) })
export class AppModule {} export class AppModule {}

View File

@ -1,8 +0,0 @@
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}

View File

@ -0,0 +1,3 @@
export class CreateTaskDto {
title: string;
}

View File

@ -0,0 +1,4 @@
export class UpdateTaskDto {
title: string;
isCompleted: boolean;
}

View File

@ -0,0 +1,51 @@
import {
Body,
Controller,
Delete,
Get,
Param,
Patch,
Post,
Put,
} from '@nestjs/common';
import { CreateTaskDto } from './dto/create-task.dto';
import { UpdateTaskDto } from './dto/update-task.dto';
import { TaskService } from './task.service';
@Controller('task')
export class TaskController {
constructor(private readonly taskService: TaskService) {}
@Get('all')
findAll() {
return this.taskService.findAll();
}
@Get('by-id/:id')
findById(
@Param('id')
id: string,
) {
return this.taskService.findById(Number(id));
}
@Post()
create(@Body() dto: CreateTaskDto) {
return this.taskService.create(dto);
}
@Put(':id')
update(@Param('id') id: string, @Body() dto: UpdateTaskDto) {
return this.taskService.update(Number(id), dto);
}
@Patch(':id')
patchUpdate(@Param('id') id: string, @Body() dto: Partial<UpdateTaskDto>) {
return this.taskService.patchTask(Number(id), dto);
}
@Delete(':id')
delete(@Param('id') id: string) {
return this.taskService.delete(Number(id));
}
}

9
src/task/task.module.ts Normal file
View File

@ -0,0 +1,9 @@
import { Module } from '@nestjs/common';
import { TaskService } from './task.service';
import { TaskController } from './task.controller';
@Module({
controllers: [TaskController],
providers: [TaskService],
})
export class TaskModule {}

70
src/task/task.service.ts Normal file
View File

@ -0,0 +1,70 @@
import { Injectable, NotFoundException } from '@nestjs/common';
import { CreateTaskDto } from './dto/create-task.dto';
import { UpdateTaskDto } from './dto/update-task.dto';
@Injectable()
export class TaskService {
private tasks = [
{
id: 1,
title: 'Learn Nestjs',
isCompleted: false,
},
{
id: 2,
title: 'Build API',
isCompleted: true,
},
];
findAll() {
return this.tasks;
}
findById(id: number) {
const task = this.tasks.find((task) => task.id === id);
if (!task) {
throw new NotFoundException(`Not found task with id ${id}`);
}
return task;
}
create(dto: CreateTaskDto) {
const { title } = dto;
const newTask = {
id: this.tasks.length + 1,
title,
isCompleted: false,
};
this.tasks.push(newTask);
return newTask;
}
update(id: number, dto: UpdateTaskDto) {
const task = this.findById(id);
const { isCompleted, title } = dto;
task.isCompleted = isCompleted;
task.title = title;
return task;
}
patchTask(id: number, dto: Partial<UpdateTaskDto>) {
const task = this.findById(id);
Object.assign(task, dto);
return task;
}
delete(id: number) {
const task = this.findById(id);
this.tasks = this.tasks.filter((t) => t !== task);
return task;
}
}

View File

@ -1008,6 +1008,11 @@
path-to-regexp "8.2.0" path-to-regexp "8.2.0"
tslib "2.8.1" tslib "2.8.1"
"@nestjs/mapped-types@*":
version "2.1.0"
resolved "https://registry.yarnpkg.com/@nestjs/mapped-types/-/mapped-types-2.1.0.tgz#b9b536b7c3571567aa1d0223db8baa1a51505a19"
integrity sha512-W+n+rM69XsFdwORF11UqJahn4J3xi4g/ZEOlJNL6KoW5ygWSmBB2p0S2BZ4FQeS/NDH72e6xIcu35SfJnE8bXw==
"@nestjs/platform-express@^11.0.1": "@nestjs/platform-express@^11.0.1":
version "11.1.2" version "11.1.2"
resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.2.tgz#e4b2671c74876ff399f50b7a7f36cb4b4c9e35ec" resolved "https://registry.yarnpkg.com/@nestjs/platform-express/-/platform-express-11.1.2.tgz#e4b2671c74876ff399f50b7a7f36cb4b4c9e35ec"