Publicado en

Nestjs aplicación de matricula a curso – Parte II

Toca escribir la funcionalidad del código de servicios y controladores.

Considera que la tablas:

  • Alumno = No depende de nadie
  • Docente = No depende de nadie
  • Curso = Depende de Docente
  • Matricula = Depende de Alumno y Curso.

Así que lo mejor es empezar con alumno

Empezamos por Entities y los DTOs,

Entities:

export class Alumno {
    id!: number;
    nombre!: string;
    apellido!: string;
    dni!: string;
    email!: string;
    createdAt!: Date;
}

DTOs

export class CreateAlumnoDto {
    nombre!: string;
    apellido!: string;
    dni!: string;
    email!: string;    
}

Actualizar extiende parcial (PartialType) así que no es necesario definir, ya que incluye los datos de CreateAlumnoDto.

import { PartialType } from '@nestjs/mapped-types';
import { CreateAlumnoDto } from './create-alumno.dto';

export class UpdateAlumnoDto extends PartialType(CreateAlumnoDto) {  
}

Ahora si hay que elaborar el servicio.

import { Injectable, NotFoundException } from '@nestjs/common';
import { CreateAlumnoDto } from './dto/create-alumno.dto';
import { UpdateAlumnoDto } from './dto/update-alumno.dto';

import { PrismaService } from '../prisma/prisma.service';

@Injectable()
export class AlumnoService {

  constructor(private prisma: PrismaService){}

  create(data: CreateAlumnoDto) {
    return this.prisma.alumno.create({ data })
  }

  findAll() {
    return this.prisma.alumno.findMany();
  }

  async findOne(id: number) {
    const alumno = await this.prisma.alumno.findUnique({ where: {id} });
    if (!alumno) throw new NotFoundException('Alumno ${id} no fue encontrado');
    return alumno;
  }

  async update(id: number, data: UpdateAlumnoDto) {
    await this.findOne(id);
    return this.prisma.alumno.update({where: {id}, data});
  }

  async remove(id: number) {
    await this.findOne(id);
    return this.prisma.alumno.delete({where: {id} });
  }
}

finalmente, el controlador practicamente, ya viene implementado.

import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common';
import { AlumnoService } from './alumno.service';
import { CreateAlumnoDto } from './dto/create-alumno.dto';
import { UpdateAlumnoDto } from './dto/update-alumno.dto';

@Controller('alumno')
export class AlumnoController {
  constructor(private readonly alumnoService: AlumnoService) {}

  @Post()
  create(@Body() createAlumnoDto: CreateAlumnoDto) {
    return this.alumnoService.create(createAlumnoDto);
  }

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

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

  @Patch(':id')
  update(@Param('id') id: string, @Body() updateAlumnoDto: UpdateAlumnoDto) {
    return this.alumnoService.update(+id, updateAlumnoDto);
  }

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

Ejecutemos el proyecto.

npm run start:dev

Registro un alumno con el Invoke-WebRequest

Invoke-WebRequest -Uri http://localhost:3000/alumno -Method POST -Headers @{"Content-Type"="application/json"} -Body '{"nombre":"Jeff","apellido":"Santillan","dni":"12345678","email":"jeff@gmail.com"}'

Recuperamos los alumnos registrados.

Invoke-WebRequest -Uri http://localhost:3000/alumno -Method GET

Ya estamos haciendo uso de nuestra base de datos sqlite con prisma.

¡Saludos!

Un comentario en «Nestjs aplicación de matricula a curso – Parte II»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *