---
# System prepended metadata

title: 2V Modules - code review task

---

# 2V Modules - code review task

## Требования к решению
Решение необходимо оформить в виде ссылки на Google Doc.
Предоставление решения в правильном виде — один из критериев оценки.

## Условие
Разработчика попросили реализовать создание и получение проектов и елементов этих проектов.
Разработчик с задачей справился, ниже предоставлен его код.

## Задание:

Проведите максимально подробный Code Review. Необходимо написать,
с чем вы не согласны и почему.
Исправьте обозначенные ошибки, предоставив свой вариант кода.


```js=
import { Body, Controller, Get, Param, Post } from '@nestjs/common';


export class AppController {
  @Post('projects/create')
  async createProject(@Body() data: any) {
    const project = await db(/* sql */);

    return {
      data: { project },
    };
  }

  @Post('items/create')
  async createItem(@Body() data: any) {
    const item = await db(/* sql */);

    return {
      data: { item },
    };
  }

  @Get('projects/:id')
  async gertProject(@Param('id') id: string) {
    const project = await this.getProjectById(id);

    return {
      data: { project },
    };
  }

  @Get('items/:id')
  async getItem(@Param('id') id: string) {
    const item = await this.getItemById(id);

    return {
      data: { item },
    };
  }

  @Get('project/:projectId/items/:itemId')
  async getProjectItem(@Param('projectId') projectId: string, @Param('id') itemId: string) {
    const item = await this.getItemById(itemId);
    const project = await this.getProjectById(projectId);

    return {
      data: {
        item,
        project,
      },
    };
  }

  private getProjectById(id: string) {
    return db(/* sql */);
  }

  private getItemById(id: string) {
    return db(/* sql */);
  }
}

```