@cbm-common/provider-repository
v0.0.1
Published
This project was generated using [Angular CLI](https://github.com/angular/angular-cli) version 20.1.0.
Readme
ProviderRepository
This project was generated using Angular CLI version 20.1.0.
Code scaffolding
Angular CLI includes powerful code scaffolding tools. To generate a new component, run:
ng generate component component-nameFor a complete list of available schematics (such as components, directives, or pipes), run:
ng generate --helpBuilding
To build the library, run:
Provider Repository (mf-cbm-common — provider-repository)
Documento de la librería provider-repository.
Descripción
provider-repository es una librería Angular que expone un módulo y servicios para gestionar proveedores a través de un API REST.
Estado del API público
- Módulo:
CbmProviderModule— exportaforRoot(config)que produce unProvidercon{ baseUrl }. - Token:
PROVIDER_MODULE_CONFIG— inyectable con la configuración{ baseUrl: string }. - Servicio:
CbmProviderService— implementa las llamadas HTTP necesarias y está registrado conprovidedIn: 'root'. - Repositorio:
CbmProviderRepository— wrapper que delega en el servicio y expone la API pública.
Instalación (desarrollo)
La librería forma parte del monorepo mf-cbm-common. Para trabajar localmente use los comandos habituales del workspace.
Construir la librería
Para compilar la librería use el CLI de Angular desde la raíz del workspace:
ng build provider-repositoryUso — configurar e importar
- Registrar la configuración en el módulo raíz de la aplicación consumidora:
import { CbmProviderModule } from 'mf-cbm-common/provider-repository';
@NgModule({
imports: [
CbmProviderModule.forRoot({
baseUrl: 'https://api.example.com/providers'
}),
],
})
export class AppModule {}- Inyectar el repositorio en un componente/servicio consumidor:
import { Component } from '@angular/core';
import { CbmProviderRepository } from 'provider-repository';
@Component({ /* ... */ })
export class DemoComponent {
constructor(private repo: CbmProviderRepository) {
this.repo.list({ page: 1, per_page: 20 }).subscribe(res => console.log(res));
}
}API pública resumida
- CbmProviderModule.forRoot(config: { baseUrl: string }) -> Provider
- PROVIDER_MODULE_CONFIG: InjectionToken<{ baseUrl: string }>
- CbmProviderService
- list(params: CbmProviderModel.ListParams): Observable<CbmProviderModel.ListResponse>
- getOne(id: string): Observable<CbmProviderModel.GetOneResponse>
- getOneByDocumentNumber(documentNumber: string)
- save/update/changeStatus/delete/restore
- downloadTemplate(): Observable<HttpResponse>
- uploadProvidersByExcel(formData: FormData): Observable<HttpResponse>
- CbmProviderRepository: adapter que expone los mismos métodos que el servicio.
Modelos
Los tipos están en src/lib/provider.model.ts. Revisar las interfaces ListParams, ListResponse, GetOneResponse, etc.
Notas de migración y patrón aplicado
Se ha aplicado el patrón de user-repository:
- Módulo con
InjectionTokenyforRootque devuelve unProviderconbaseUrl. - Servicio usa
HttpCliente inyecta el token para construir URLs. - Repositorio disponible mediante
providedIn: 'root'.
Pruebas
Ejecute los tests desde la raíz del workspace:
ng testPublicación
- Compilar la librería:
ng build provider-repository - Publicar la carpeta
dist/provider-repositorysegún el flujo del proyecto.
Contacto y mantenimiento
Si necesitas ampliar la API o añadir nuevos endpoints, abre un issue o PR en el repositorio principal con cambios y tests asociados.
Licencia
Revisa la licencia en el repositorio raíz.
Detalle técnico (contrato corto)
- Propósito: proporcionar una API cliente reutilizable para gestionar proveedores (CRUD, import/export, restauración).
- Entrada principal: configuración del módulo { baseUrl: string }.
- Salidas: Observables que emiten los modelos tipados definidos en
src/lib/provider.model.ts. - Modo de errores: las llamadas HTTP devuelven errores estándar de HttpClient (4xx/5xx); la librería no transforma errores automáticamente.
API — resumen de métodos (firma y comportamiento)
Los siguientes métodos están expuestos por CbmProviderService y CbmProviderRepository (el repositorio delega en el servicio):
- list(params: CbmProviderModel.ListParams): Observable<CbmProviderModel.ListResponse>
- Lista proveedores con filtros paginados.
- getOne(id: string): Observable<CbmProviderModel.GetOneResponse>
- Recupera un proveedor por su id.
- getOneByDocumentNumber(documentNumber: string): Observable<CbmProviderModel.GetOneByDocumentNumberResponse>
- Recupera un proveedor por número de documento.
- save(data: CbmProviderModel.SaveBody): Observable<CbmProviderModel.ConfirmResponse>
- Crea un nuevo proveedor.
- update(id: string, data: CbmProviderModel.UpdateBody): Observable<CbmProviderModel.ConfirmResponse>
- Actualiza un proveedor existente.
- changeStatus(id: string, data: CbmProviderModel.ChangeStatusBody): Observable<CbmProviderModel.ConfirmResponse>
- Cambia el estado (enable/disable) de un proveedor.
- updateManagement(id: string, data: CbmProviderModel.UpdateManagementBody): Observable<CbmProviderModel.ConfirmResponse>
- Actualiza datos de gestión/administración del proveedor.
- delete(id: string): Observable<CbmProviderModel.ConfirmResponse>
- Elimina un proveedor (dependiente del backend: soft/hard delete según implementación del server).
- restore(id: string): Observable<CbmProviderModel.ConfirmResponse>
- Restaura un proveedor eliminado (si el backend soporta restauración).
- downloadTemplate(): Observable<HttpResponse>
- Descarga la plantilla Excel para carga masiva.
- uploadProvidersByExcel(data: FormData): Observable<HttpResponse>
- Sube un Excel con proveedores para carga masiva; devuelve un blob con el resultado/report.
Dónde están los tipos
Todos los tipos y shapes se encuentran en projects/provider-repository/src/lib/provider.model.ts y son las fuentes de verdad para firmas y propiedades. Evita usar any en el código consumidor; importa y usa esos tipos.
Cómo integrar la librería (ejemplos)
- Registrar la configuración del módulo en la aplicación consumidora (sin prefijo
@cbm-common/):
import { CbmProviderModule } from 'provider-repository';
@NgModule({
imports: [
CbmProviderModule.forRoot({ baseUrl: 'https://api.miapp.com/providers' }),
],
})
export class AppModule {}- Inyectar el repositorio en un componente/servicio:
import { Component } from '@angular/core';
import { CbmProviderRepository } from 'provider-repository';
@Component({ /* ... */ })
export class DemoComponent {
constructor(private repo: CbmProviderRepository) {
this.repo.list({ page: 1, per_page: 20 }).subscribe(r => console.log(r));
}
}Consideraciones y casos límite
- Timeouts / reintentos: la librería no implementa reintentos ni timeouts por defecto; deja ese comportamiento al consumidor mediante operadores RxJS o interceptores HTTP globales.
- Autenticación: si tu API requiere tokens, registra un interceptor a nivel de aplicación o usa la infraestructura de interceptores del workspace. El módulo no inyecta autenticación automáticamente.
- Respuesta parcial/estructura cambiante: verifica
successydatadelListResponseantes de consumir. - Grandes ficheros Excel: el upload/download usa Blob; maneja streams y memoria en el cliente según el tamaño.
Notas de migración (qué cambió con respecto al patrón antiguo)
- El módulo ahora expone un
InjectionToken(PROVIDER_MODULE_CONFIG) yforRoot(config)que devuelve unProvidercon la configuración (no registra interceptores o servicios automáticamente desdeforRoot). - El servicio principal usa
HttpCliente inyecta el token para construir las URLs base. - El repositorio está registrado con
providedIn: 'root'y actúa como adaptador del servicio.
Comandos útiles
Desde la raíz del workspace:
# Compilar solo la librería
npx ng build provider-repository --configuration development
# Compilar todo el workspace
npx ng build
# Ejecutar tests (si están configurados)
npx ng test --watch=falsePublicación
- Compilar la librería:
npx ng build provider-repository - Publicar la carpeta
dist/provider-repositorysegún el flujo del proyecto (npm publish/private registry).
Soporte y mantenimiento
Para cambios en la API (nuevos endpoints o cambios en modelos):
- Añade/actualiza tipos en
provider.model.ts. - Añade métodos en
provider.service.tsy exponlos enprovider.repository.ts. - Añade tests unitarios que verifiquen la construcción de requests y el mapping de respuestas.
Contacto
Abrir un issue o un pull-request en el repositorio principal con la descripción del cambio y ejemplos de uso.
