Jesús Rodríguez (@Foxandxss)
Agenda
¿Qué es Enterprise?
Un proyecto Enterprise más que por complejidad de dominio, sería un proyecto donde se involucran a muchas personas y muchas areas diferentes.
¿Qué problemas existen?
Monorepos
Monorepo - Angular
¿Cómo conseguimos esto?
Nrwl - NX
Nx - Aplicaciones
Se pueden añadir extras si nos hiciera falta
Nx - Librerías
¿Ventajas?
DEMO
Modo mock
// environment.mock.ts
mockServices: true
// app.module.ts
imports: [environment.mockServices ? MockServicesModule : []]
// https://github.com/angular/in-memory-web-apiTrazas del router
// environment.mock.ts
logRouter: false
// app-routing.module.ts
imports: [RouterModule.forRoot(routes, { enableTracing: environment.logRouter })]Trazas HTTP
@Injectable()
export class LoggingHttpInterceptor implements HttpInterceptor {
requestId = 0;
constructor(private logger: LoggerService) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return environment.logHttp ? this.interceptLogging(request, next) : next.handle(request);
}
private interceptLogging(request: HttpRequest<any>, next: HttpHandler) {
const id = this.requestId += 1;
this.logRequest(id, request);
return next.handle(request).pipe(
tap(response => this.logResponse(id, request, response)),
);
}
private logRequest(id: number, req: HttpRequest<any>) {
const m = `%c>>> (#${id}) ${req.method} ${req.url}`;
const c = 'color: green; font-style: italic; font-weight: bold;';
this.logger.log(m, c, req);
}
private logResponse(id: number, req: HttpRequest<any>, response: any) {
const m = `%c<<< (#${id}) ${req.method} ${req.url}`;
const c = 'color: blue; font-style: italic;';
this.logger.log(m, c, response);
}
}Trazas Auth
private eventsSubject = new BehaviorSubject('Auth created');
...
this.events$ = this.eventsSubject.asObservable();
...
this.events$.subscribe(event => environment.logAuth && this.logger.log('Auth Tracing: ' + event));
...
logEvent(event: string) {
this.eventsSubject.next(event);
}Enlaces
¿Preguntas?