Ir al contenido

Release 3, semana 7

Debe contener en el back:

  1. El endpoint POST de la entidad principal de su módulo funcional: recibe el body, responde 201, e imprime en el log lo que recibió. Todavía no persiste nada.
  2. La prueba en Postman de ese POST, verificando el 201.
  3. La Collection de esa entidad, ya exportada en Semana 6 con la prueba del GET, actualizada con la prueba del POST y vuelta a exportar en collections/<Entidad>.postman_collection.json.
  4. El backend desplegado y corriendo en la máquina virtual individual asignada a cada estudiante.

El Controller depende de la interfaz del repositorio, no de la clase que la implementa. Eso es lo que permite descartar InMemory<Entidad>Repository más adelante (cuando llegue la persistencia real) sin tocar el Controller.

classDiagram
    class ArtistaController {
        -artistaRepository: ArtistaRepository
        +findAll() List
        +crearArtista(artista: ArtistaDTO) ArtistaDTO
    }

    class ArtistaRepository {
        <<interface>>
        +findAll() List
    }

    class InMemoryArtistaRepository {
        +findAll() List
    }
    note for InMemoryArtistaRepository "Se descarta más adelante: se reemplaza<br/>por una implementación con JPA,<br/>sin tocar el Controller"

    ArtistaController ..> ArtistaRepository : inyecta
    InMemoryArtistaRepository ..|> ArtistaRepository : implementa

Debe contener en el front:

  1. Un formulario simple con Reactive Forms para crear un recurso de la entidad principal, de su módulo funcional, incluyendo solo los atributos básicos.
  2. La implementación de la clase XyzService, donde Xyz es el nombre del recurso que se está implementando. La clase debe tener:
    1. La implementación del método create.
    2. El llamado a httpResource para hacer el GET, movido desde el componente XyzListar.
  3. El componente XyzListar y el componente XyzCrear deben inyectar el nuevo servicio y utilizarlo.

Con Xyz = Artista como ejemplo: el servicio queda como única puerta de entrada HTTP, y los dos componentes lo inyectan sin conocerse entre sí.

classDiagram
    class Artista {
        +id: number
        +nombre: string
        +fotoArtistaUrl: string
        +paisOrigen: string
        +fechaNacimiento: string
        +biografia: string
        +albumes: Album[]
    }

    class NuevoArtista {
        +nombre: string
        +fotoArtistaUrl: string
        +paisOrigen: string
        +fechaNacimiento: string
        +biografia: string
    }
    note for NuevoArtista "Igual a Artista, sin id ni albumes<br/>(los asigna el backend)"

    class ArtistaService {
        +artistasResource: HttpResource
        +crear(nuevoArtista: NuevoArtista) Observable
    }

    class ArtistListComponent {
        -artistaService: ArtistaService
    }

    class ArtistCreateComponent {
        -artistaService: ArtistaService
        -artistaForm: FormGroup
        -guardando: Signal
        +guardar() void
        +cancelar() void
    }

    ArtistListComponent ..> ArtistaService : inyecta
    ArtistCreateComponent ..> ArtistaService : inyecta
    ArtistaService ..> Artista : produce
    ArtistaService ..> NuevoArtista : recibe

Formulario para crear un Artista

  1. Formularios reactivos
  2. Http post
  1. Agregar el endpoint POST en el back
  2. Probar el POST con Postman y verificar el 201
  3. Formulario reactivo
  4. Service y Http post
  5. Llamado Http post
  6. Mover el httpResource al servicio y sincronizar el listado