@cbm-common/client-repository
v0.0.1
Published
"name": "@cbm-common/client-repository"
Readme
ClientRepository
"name": "@cbm-common/client-repository"
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:
@cbm-common/client-repository
Documentación en español para la librería client-repository que exporta el repositorio y servicio para gestionar clientes.
Resumen
Esta librería provee un servicio y un repository para interactuar con el backend de clientes. Está pensada para usarse en aplicaciones Angular (Controlador por servicios) y ofrece métodos para listar, obtener, crear, actualizar, validar y realizar operaciones de import/export relacionadas con clientes.
Características principales
- Servicio HTTP basado en
HttpClientque construye las rutas usandoconfig.baseUrldel módulo. - Interfaz
ICbmClientRepositoryque define la API pública esperada por consumidores. - Tipos detallados en
CbmClientModel(listas, respuestas y payloads). - Módulo que expone un token de configuración
CLIENT_MODULE_CONFIGpara inyectarbaseUrl.
Instalación
Si el paquete está publicado en tu registro npm:
npm install client-repository(En este monorepo probablemente importes desde la build local o desde dist/.)
Configuración del módulo
El módulo exporta CLIENT_MODULE_CONFIG y una función forRoot que devuelve un provider (patrón usado en este repo). El token espera un objeto con la forma:
export interface ICbmClientModuleConfig {
baseUrl: string;
}Ejemplo de registro en un módulo de aplicación:
import { CbmClientModule, CLIENT_MODULE_CONFIG } from 'client-repository';
@NgModule({
imports: [
// ...
],
providers: [
CbmClientModule.forRoot({ baseUrl: 'https://api.miapp.com/clients' }),
],
})
export class AppModule {}API pública (servicio y repository)
La librería define la interfaz ICbmClientRepository con los principales métodos que también implementa CbmClientService:
- list(params: CbmClientModel.ListParams): Observable<CbmClientModel.ListResponse>
- getOne(id: string): Observable<CbmClientModel.GetOneResponse>
- getOneByDocumentNumber(documentNumber: string): Observable<CbmClientModel.GetOneResponse>
- save(data: CbmClientModel.SaveBody): Observable<CbmClientModel.ConfirmResponse>
- update(id: string, data: CbmClientModel.UpdateBody): Observable<CbmClientModel.ConfirmResponse>
- downloadTemplateExcel(): Observable<HttpResponse>
- uploadClientsByExcel(data: FormData): Observable<HttpResponse>
- validateDocumentNumber(documentType: string, documentNumber: string): Observable<CbmClientModel.ConfirmResponse>
- validate(id: string): Observable<CbmClientModel.ConfirmResponse>
- restore(id: string): Observable<CbmClientModel.ConfirmResponse>
Los tipos usados en la API están definidos en CbmClientModel (archivo client.model.ts). Ejemplos de los tipos principales:
CbmClientModel.ListParams— parámetros de paginación y filtros (page, size, document_number, category_client_id, etc.).CbmClientModel.ListResponse— estructura paginada conitems: ListResponse.Item[].CbmClientModel.GetOneResponse— respuesta condatadel cliente.CbmClientModel.SaveBody/UpdateBody— payloads para crear/actualizar.CbmClientModel.ConfirmResponse— respuesta estándar consuccessymessage.
Ejemplo de uso (consumir repository desde un componente)
Ejemplo simple usando CbmClientRepository (que delega en el servicio):
import { Component, DestroyRef, OnInit, signal } from '@angular/core';
import { firstValueFrom } from 'rxjs';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { CbmClientRepository, CbmClientModel } from 'client-repository';
@Component({ /* ... */ })
export class MiComponente implements OnInit {
listData = signal<CbmClientModel.ListResponse | {}>({});
constructor(private repo: CbmClientRepository, private destroyRef: DestroyRef) {}
async ngOnInit() {
const list$ = this.repo.list({ page: 1, size: 20 }).pipe(takeUntilDestroyed(this.destroyRef));
const res = await firstValueFrom(list$);
this.listData.set(res);
}
}Notas sobre rutas y endpoints
El servicio construye las URLs usando config.baseUrl. Por ejemplo, la llamada a getOne(id) realizará una petición GET a ${baseUrl}/${id}. Asegúrate de que baseUrl no contenga la barra final (o que el backend soporte ambas variantes).
Consideraciones sobre tipos
- Los tipos están definidos y documentados en
client.model.ts. No usesanyen consumidores; importa los tipos desde la librería cuando los necesites.
Errores comunes y solución rápida
- Si obtienes errores de importación, verifica que
public-api.tsexporteCbmClientModel,CbmClientRepositoryyCbmClientService. - Si las peticiones no funcionan, confirma que
CLIENT_MODULE_CONFIGfue registrado con la URL correcta. - Para pruebas locales sin publicar el paquete, usa
ng build client-repositoryy referencia los artefactos o importa directamente desde el path del proyecto si tu monorepo lo permite.
Pruebas
Ejecuta las pruebas del workspace con:
ng testBuild y publicación
Para construir la librería dentro del monorepo:
ng build client-repositoryPara publicar (si corresponde):
cd dist/client-repository
npm publishContribuciones
Para cambios en la API o nuevos endpoints, abre un issue y crea un PR con pruebas unitarias y ejemplos de uso.
Contacto
Revisa los fuentes en projects/client-repository/src/lib para detalles de implementación: client.module.ts, client.service.ts, client.repository.ts, client.model.ts.
Documentación creada a partir de los archivos fuente disponibles en este repositorio.
