from typing import Annotated

from nestipy.common import Controller, Get, Post, Put, Delete
from nestipy.ioc import Inject, Body, Param

from .{{name|lower}}_dto import Create{{name|capitalize}}Dto, Update{{name|capitalize}}Dto
from .{{name|lower}}_service import {{name|capitalize}}Service


@Controller('{{name|lower}}s')
class {{name|capitalize}}Controller:

    {{name|lower}}_service:  Annotated[{{name|capitalize}}Service, Inject()]

    @Get()
    async def list(self) -> str:
        return await self.{{name|lower}}_service.list()

    @Post()
    async def create(self, data: Annotated[Create{{name|capitalize}}Dto, Body()]) -> str:
        return await self.{{name|lower}}_service.create(data)

    @Put('/{{'{id}'}}')
    async def update(self, {{name|lower}}_id: Annotated[int, Param('id')], data: Annotated[Update{{name|capitalize}}Dto, Body()]) -> str:
        return await self.{{name|lower}}_service.update({{name|lower}}_id, data)

    @Delete('/{{'{id}'}}')
    async def delete(self, {{name|lower}}_id: Annotated[int,Param('id')] ) -> None:
        return await self.{{name|lower}}_service.delete({{name|lower}}_id)
