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»