@cbm-common/client-branch-repository
v0.0.1
Published
Documentación técnica y guía rápida para la librería `client-branch-repository` del mono-repo.
Readme
client-branch-repository
Documentación técnica y guía rápida para la librería client-branch-repository del mono-repo.
Objetivo
Esta librería encapsula las operaciones HTTP relacionadas con las "client branches" (ramas de cliente). Proporciona:
- Un módulo configurable (
CbmClientBranchModule.forRoot({ baseUrl })) para inyectar la URL base de la API. - Un
HttpServiceextendido que permite registrar interceptores locales (CLIENT_BRANCH_HTTP_INTERCEPTORS). - Un servicio (
CbmClientBranchService) que construye y ejecuta las llamadas HTTP. - Un repositorio (
CbmClientBranchRepository) que expone la API para consumo por la aplicación.
El diseño replica el patrón usado por user-repository y otras librerías del repositorio, para mantener coherencia en la configuración, inyección y uso de interceptores.
Instalación e importación
Importar y configurar el módulo en el AppModule o en el módulo de la feature:
import { CbmClientBranchModule } from '@mf-cbm-common/client-branch-repository';
@NgModule({
imports: [
CbmClientBranchModule.forRoot({ baseUrl: 'https://api.example.com/client-branch' }),
],
})
export class AppModule {}La llamada a forRoot inyecta internamente el token CLIENT_BRANCH_MODULE_CONFIG con la configuración proporcionada.
Archivos relevantes y responsabilidades
client-branch.module.ts- Define la interfaz
ICbmClientBranchModuleConfigy el tokenCLIENT_BRANCH_MODULE_CONFIG. - Expone
forRoot(config)para inyectar configuración.
- Define la interfaz
http.service.ts- Declara
CLIENT_BRANCH_HTTP_INTERCEPTORS(InjectionToken). ClientBranchHttpServiceextiendeHttpClienty arma una cadena de interceptores registrada bajo el token.ClientBranchAuthInterceptor(stub) incluido como ejemplo; puedes reemplazarlo o extenderlo para añadir headers/auth.
- Declara
client-branch.service.ts- Servicio que depende de
HttpClienty del tokenCLIENT_BRANCH_MODULE_CONFIGpara componer URLs. - Método
list(params)de ejemplo que usaconfig.baseUrl.
- Servicio que depende de
client-branch.repository.ts- Repositorio que delega en el servicio, expuesto para el consumo de la app.
API pública (ejemplos de uso)
Inyecta el repositorio y usa sus métodos:
import { Component } from '@angular/core';
import { CbmClientBranchRepository } from '@mf-cbm-common/client-branch-repository';
@Component({ selector: 'app-sample', template: '' })
export class SampleComponent {
constructor(private repo: CbmClientBranchRepository) {}
fetch() {
this.repo.list({ page: 1 }).subscribe({
next: res => console.log('OK', res),
error: err => console.error('ERR', err),
});
}
}CbmClientBranchService expone métodos que retornan Observable<T> y el repositorio simplemente delega.
Interceptores y personalización
La librería permite registrar interceptores específicos usando el token CLIENT_BRANCH_HTTP_INTERCEPTORS.
Ejemplo de registro (en el módulo de la app):
import { CLIENT_BRANCH_HTTP_INTERCEPTORS } from '@mf-cbm-common/client-branch-repository';
providers: [
{ provide: CLIENT_BRANCH_HTTP_INTERCEPTORS, useClass: MyAuthInterceptor, multi: true },
]El ClientBranchHttpService montará la cadena de interceptores y la usará para las peticiones realizadas a través de él.
Desarrollo y build
Compilar localmente:
# desde la raíz del repo
ng build client-branch-repositoryPublicar (si aplica):
cd dist/client-branch-repository
npm publishBuenas prácticas y notas
- Mantén
baseUrlconciso (sin trailing slash) y construye rutas relativas enCbmClientBranchServicesi necesitas endpoints adicionales. - Usa interceptores para cross-cutting concerns (auth, logging, transformaciones de respuesta).
- Si necesitas configuración más avanzada (por ejemplo carga asíncrona de configuración), puedo añadir
forRootAsync.
Soporte y siguientes pasos sugeridos
- Puedo adaptar
forRootpara que, además de inyectar el token, registreClientBranchHttpServicee interceptores por defecto si lo prefieres. - Puedo añadir ejemplos de testing unitario para
CbmClientBranchServiceyClientBranchHttpService.
Si quieres que haga alguno de los pasos anteriores ahora (p. ej. ng build o añadir forRoot que registre providers), indícalo y lo realizo.
