From ed59f1a6fbf4ecaaaa499b25583c6fa7ba089724 Mon Sep 17 00:00:00 2001 From: Alex Ortigosa Date: Fri, 27 Aug 2021 20:40:56 +0200 Subject: [PATCH] =?UTF-8?q?Fin=20secci=C3=B3n=2017?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/app.module.ts | 2 +- src/app/models/hospital.model.ts | 14 +++ src/app/models/medico.model.ts | 17 +++ src/app/pages/mantenimientos/cascaron.txt | 2 +- .../hospitales/hospitales.component.html | 101 ++++++++++++++++ .../hospitales/hospitales.component.ts | 114 ++++++++++++++++++ .../medicos/medico.component.html | 65 ++++++++++ .../medicos/medico.component.ts | 105 ++++++++++++++++ .../medicos/medicos.component.html | 92 +++++++++++++- .../medicos/medicos.component.ts | 93 +++++++++++++- .../usuarios/usuarios.component.html | 7 +- .../usuarios/usuarios.component.ts | 16 ++- src/app/pages/pages-routing.module.ts | 8 +- src/app/pages/pages.module.ts | 14 ++- src/app/pipes/imagen.pipe.ts | 24 ++++ src/app/pipes/pipes.module.ts | 14 +++ src/app/services/busquedas.service.ts | 30 ++++- src/app/services/hospital.service.ts | 55 +++++++++ src/app/services/medico.service.ts | 55 +++++++++ src/app/services/usuario.service.ts | 4 + src/styles.css | 9 ++ 21 files changed, 816 insertions(+), 25 deletions(-) create mode 100644 src/app/models/hospital.model.ts create mode 100644 src/app/models/medico.model.ts create mode 100644 src/app/pages/mantenimientos/hospitales/hospitales.component.html create mode 100644 src/app/pages/mantenimientos/hospitales/hospitales.component.ts create mode 100644 src/app/pages/mantenimientos/medicos/medico.component.html create mode 100644 src/app/pages/mantenimientos/medicos/medico.component.ts create mode 100644 src/app/pipes/imagen.pipe.ts create mode 100644 src/app/pipes/pipes.module.ts create mode 100644 src/app/services/hospital.service.ts create mode 100644 src/app/services/medico.service.ts diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 7ea9564..aa9e802 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -11,7 +11,7 @@ import { PagesModule } from './pages/pages.module'; @NgModule({ declarations: [ AppComponent, - NopagefoundComponent, + NopagefoundComponent ], imports: [ BrowserModule, diff --git a/src/app/models/hospital.model.ts b/src/app/models/hospital.model.ts new file mode 100644 index 0000000..5dc0b50 --- /dev/null +++ b/src/app/models/hospital.model.ts @@ -0,0 +1,14 @@ +interface _hospitalCreator { + _id: string; + nombre: string; + img: string; +} + +export class Hospital { + constructor( + public nombre: string, + public _id?: string, + public img?: string, + public usuario?: _hospitalCreator, + ){} +} \ No newline at end of file diff --git a/src/app/models/medico.model.ts b/src/app/models/medico.model.ts new file mode 100644 index 0000000..011547e --- /dev/null +++ b/src/app/models/medico.model.ts @@ -0,0 +1,17 @@ +import { Hospital } from "./hospital.model"; + +interface _medicoCreator { + _id: string; + nombre: string; + img: string; +} + +export class Medico { + constructor( + public nombre: string, + public _id?: string, + public img?: string, + public usuario?: _medicoCreator, + public hospital?: Hospital + ){} +} \ No newline at end of file diff --git a/src/app/pages/mantenimientos/cascaron.txt b/src/app/pages/mantenimientos/cascaron.txt index 584e75b..6245e78 100644 --- a/src/app/pages/mantenimientos/cascaron.txt +++ b/src/app/pages/mantenimientos/cascaron.txt @@ -47,7 +47,7 @@ Lunar probe project Lunar probe project Lunar probe project - + diff --git a/src/app/pages/mantenimientos/hospitales/hospitales.component.html b/src/app/pages/mantenimientos/hospitales/hospitales.component.html new file mode 100644 index 0000000..0f572f4 --- /dev/null +++ b/src/app/pages/mantenimientos/hospitales/hospitales.component.html @@ -0,0 +1,101 @@ +
+
+
+
+ + + +
+
+
+
+ +
+
+
+

Cargando

+ +

Por favor espere

+
+
+
+ +
+
+
+
+ + +
+
+

Hospitales ({{hospitales.length}})

+
Hospitales registrados en la aplicación
+
+
+
+ +
+
+
+ +
+ + + + + + + + + + + + + + + + +
FotoNombreAcciones
+ + + + + + + + + + +
+
+ + + +
+
+
+
\ No newline at end of file diff --git a/src/app/pages/mantenimientos/hospitales/hospitales.component.ts b/src/app/pages/mantenimientos/hospitales/hospitales.component.ts new file mode 100644 index 0000000..2d4da3a --- /dev/null +++ b/src/app/pages/mantenimientos/hospitales/hospitales.component.ts @@ -0,0 +1,114 @@ +import { Component, Input, OnInit, OnDestroy } from '@angular/core'; + +import { Subscription } from 'rxjs'; +import { delay } from 'rxjs/operators'; +import Swal from 'sweetalert2'; + +import { Hospital } from '../../../models/hospital.model'; +import { HospitalService } from '../../../services/hospital.service'; +import { ModalImagenService } from '../../../services/modal-imagen.service'; +import { BusquedasService } from '../../../services/busquedas.service'; + +@Component({ + selector: 'app-hospitales', + templateUrl: './hospitales.component.html', + styles: [ + ] +}) +export class HospitalesComponent implements OnInit, OnDestroy { + + public hospitales: Hospital[] = []; + public hospitalesTemp: Hospital[] = []; + public cargando: boolean = true; + + private imgSubs!: Subscription; + + + constructor(private _hospitalService: HospitalService, + private _modalImagenService: ModalImagenService, + private _busquedasService: BusquedasService) { } + + ngOnDestroy(): void { + this.imgSubs.unsubscribe(); + } + + ngOnInit(): void { + this.cargarHospitales(); + + this.imgSubs = this._modalImagenService.nuevaImagen + .pipe(delay(200)) + .subscribe(img => this.cargarHospitales()); + } + + cargarHospitales(){ + // Creo que seria mejor actualizar el hospital en el array para evitar demasiadas peticiones http + this.cargando = true; + + this._hospitalService.cargarHospitales() + .subscribe( hospitales => { + this.cargando = false; + this.hospitales = hospitales; + this.hospitalesTemp = this.hospitales + }); + } + + guardarCambios(hospital: Hospital){ + this._hospitalService.actualizarHospital(hospital._id!,hospital.nombre) + .subscribe( resp => { + this.cargarHospitales(); // Creo que seria mejor actualizar el hospital en el array para evitar demasiadas peticiones http + Swal.fire('Actualizado', hospital.nombre, 'success') + }) + } + + eliminarHospital(hospital: Hospital){ + this._hospitalService.borrarHospital(hospital._id!) + .subscribe( resp => { + this.cargarHospitales(); // Creo que seria mejor actualizar el hospital en el array para evitar demasiadas peticiones http + Swal.fire('Borrado', hospital.nombre, 'success') + }) + } + + async abrirSweetAlert(){ + const {value = '', ...valor} = await Swal.fire({ + title: 'Crear hospital', + text: 'Ingrese el nombre del nuevo hospital', + input: 'text', + inputPlaceholder: 'Nombre del hospital', + showCancelButton: true + }) + + // if (valor.isDismissed) return; // SImplemente se arregla asignandole un string vacio a value en la desestructuración + + if (value!.trim().length > 0) { + this._hospitalService.crearHospital(value!) + .subscribe((resp: any) => { + this.hospitales.push(resp.hospital) + }) + } + + // if (url) { + // Swal.fire(`Entered URL: ${url}`) + // } + } + + abrirModal(hospital: Hospital) { + // if (this._usuarioService.usuario.role === 'ADMIN_ROLE'){ + this._modalImagenService.abrirModal('hospitales',hospital._id!,hospital.img); + // } + } + + searchQuery(termino: string){ + + if (termino.length === 0) { + this.hospitales = this.hospitalesTemp + return; + // return this.cargarHospitales(); // Para no complicarse mucho, pero seria mejor guardar los hospitales para tener la referencia local y así evitar hacer una petición extra + } + + this._busquedasService.buscar('hospitales',termino) + .subscribe((resp: Hospital[]) => { + this.hospitales = resp + }) + } + +} diff --git a/src/app/pages/mantenimientos/medicos/medico.component.html b/src/app/pages/mantenimientos/medicos/medico.component.html new file mode 100644 index 0000000..55736ad --- /dev/null +++ b/src/app/pages/mantenimientos/medicos/medico.component.html @@ -0,0 +1,65 @@ +
+
+
+
+

Médico

+
Actualizar información
+
+ +
+ +
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+
+
+
+ +
+
+
+

Hospital

+
{{hospitalSeleccionado.nombre}}
+ + + +
+
+
+ +
\ No newline at end of file diff --git a/src/app/pages/mantenimientos/medicos/medico.component.ts b/src/app/pages/mantenimientos/medicos/medico.component.ts new file mode 100644 index 0000000..c501163 --- /dev/null +++ b/src/app/pages/mantenimientos/medicos/medico.component.ts @@ -0,0 +1,105 @@ +import { Component, OnInit } from '@angular/core'; +import { FormGroup, FormBuilder, Validators } from '@angular/forms'; + +import { Hospital } from 'src/app/models/hospital.model'; + +import { MedicoService } from 'src/app/services/medico.service'; +import { HospitalService } from '../../../services/hospital.service'; +import { Medico } from '../../../models/medico.model'; +import Swal from 'sweetalert2'; +import { Router, ActivatedRoute } from '@angular/router'; +import { interval,pipe } from 'rxjs'; +import { delay } from 'rxjs/operators'; + +@Component({ + selector: 'app-medico', + templateUrl: './medico.component.html', + styles: [ + ] +}) +export class MedicoComponent implements OnInit { + + public medicoForm!: FormGroup; + public hospitales: Hospital[] = []; + + public medicoSeleccionado!: Medico; + public hospitalSeleccionado!: Hospital | undefined; + + constructor(private _fb: FormBuilder, + private _hospitalService: HospitalService, + private _medicoService: MedicoService, + private _router: Router, + private _activatedRoute: ActivatedRoute) { } + + ngOnInit(): void { + + this._activatedRoute.params + .subscribe( ({id}) => this.cargarMedico(id) ); + + // this._medicoService.obtenerMedicoPorId() + this.medicoForm = this._fb.group({ + nombre: ['', Validators.required], + hospital: ['', Validators.required] + }); + + this.cargarHospitales() + + this.medicoForm.get('hospital')?.valueChanges + .subscribe(hospitalId => { + this.hospitalSeleccionado = this.hospitales.find( hospital => hospital._id === hospitalId); + }) + } + + guardarMedico(){ + + const {nombre} = this.medicoForm.value; + + if (this.medicoSeleccionado){ + const data = { + ...this.medicoForm.value, + _id: this.medicoSeleccionado._id + } + this._medicoService.actualizarMedico(data) + .subscribe( resp => { + console.log(resp) + Swal.fire('Médico actualizado',`${nombre} se actualizo correctamente`, 'success'); + }) + } else { + this._medicoService.crearMedico(this.medicoForm.value) + .subscribe( (resp: any) => { + Swal.fire('Médico creado',`${nombre} creado correctamente`, 'success'); + this._router.navigateByUrl(`/dashboard/medico/${resp.medico._id}`); + }) + } + + } + + cargarHospitales(){ + this._hospitalService.cargarHospitales() + .subscribe((hospitales: Hospital[]) => { + this.hospitales = hospitales; + }) + } + + cargarMedico(id: string){ + + if (id === 'nuevo') return + + this._medicoService.obtenerMedicoPorId(id) + .pipe( + delay(200) + ) + .subscribe( (medico: any) => { + const {nombre, hospital:{_id}} = medico; + this.medicoSeleccionado = medico; + this.medicoForm.setValue({nombre, hospital: _id}); + + // My Method + // + // this.medicoForm.reset({nombre: medico.nombre, hospital: medico.hospital?._id}) + }, error => { + return this._router.navigateByUrl(`/dashboard/medicos`); + }); + } + +} diff --git a/src/app/pages/mantenimientos/medicos/medicos.component.html b/src/app/pages/mantenimientos/medicos/medicos.component.html index 2e2ec23..d7e032c 100644 --- a/src/app/pages/mantenimientos/medicos/medicos.component.html +++ b/src/app/pages/mantenimientos/medicos/medicos.component.html @@ -1 +1,91 @@ -

medicos works!

+
+
+
+
+ + + +
+
+
+
+ +
+
+
+

Cargando

+ +

Por favor espere

+
+
+
+ +
+
+
+
+
+
+

Médicos ({{medicos.length}})

+
Médicos registrados en la aplicación
+
+ +
+
+ + + + + + + + + + + + + + + + +
FotoNombreAcciones
+ + {{medico.nombre}} + + + + + + +
+
+ No se ha encontrado ningún médico por ese nombre +
+
+ + +
+
+
+
\ No newline at end of file diff --git a/src/app/pages/mantenimientos/medicos/medicos.component.ts b/src/app/pages/mantenimientos/medicos/medicos.component.ts index 8e338ef..717be77 100644 --- a/src/app/pages/mantenimientos/medicos/medicos.component.ts +++ b/src/app/pages/mantenimientos/medicos/medicos.component.ts @@ -1,4 +1,13 @@ -import { Component, OnInit } from '@angular/core'; +import { Component, OnInit, OnDestroy } from '@angular/core'; +import { Subscription } from 'rxjs'; +import { delay } from 'rxjs/operators'; +import Swal from 'sweetalert2'; + +import { Medico } from '../../../models/medico.model'; + +import { MedicoService } from '../../../services/medico.service'; +import { ModalImagenService } from '../../../services/modal-imagen.service'; +import { BusquedasService } from 'src/app/services/busquedas.service'; @Component({ selector: 'app-medicos', @@ -6,11 +15,89 @@ import { Component, OnInit } from '@angular/core'; styles: [ ] }) -export class MedicosComponent implements OnInit { +export class MedicosComponent implements OnInit, OnDestroy { + + public medicos: Medico[] = []; + public medicosTemp: Medico[] = []; + public cargando: boolean = true; + public noMatches: boolean = false; - constructor() { } + private imgSubs!: Subscription; + + constructor(private _medicosService: MedicoService, + private _modalImagenService: ModalImagenService, + private _busquedasService: BusquedasService) { } + ngOnDestroy(): void { + this.imgSubs.unsubscribe(); + } ngOnInit(): void { + this.cargarMedicos(); + + this.imgSubs = this._modalImagenService.nuevaImagen + .pipe(delay(200)) + .subscribe(img => this.cargarMedicos()); + } + + cargarMedicos(){ + this.cargando = true; + this._medicosService.cargarMedicos() + .subscribe(medicos => { + this.cargando = false; + this.noMatches = false; + this.medicos = medicos; + this.medicosTemp = medicos; + // console.log(resp.medicos) + }) + } + + borrarMedico(id: string, nombre:string){ + Swal.fire({ + title: '¿Borrar médico?', + text: `Esta a punto de borrar a ${nombre}, está seguro? 👀`, + icon: 'question', + showCancelButton: true, + confirmButtonColor: '#3085d6', + cancelButtonColor: '#d33', + confirmButtonText: 'Si, borrar' + }).then((result) => { + if (result.isConfirmed) { + this._medicosService.borrarMedico(id) + .subscribe(resp => { + Swal.fire( + 'Médico borrado', + `El médico ${nombre} ha sido borrado`, + 'success' + ); + this.cargarMedicos(); // Creo que seria mejor actualizar hospitales en el array para evitar demasiadas peticiones http + }) + } + }); + } + + actualizarMedico(){ + + } + + buscarMedico(termino: string){ + + if (termino.length === 0){ + this.medicos = this.medicosTemp; + this.noMatches = false; + return; + } + + this._busquedasService.buscar('medicos',termino) + .subscribe((medicos: Medico[]) => { + if (medicos.length === 0){ + this.noMatches = true; + } + this.medicos = medicos; + }) + } + + abrirModal(medico: Medico){ + this._modalImagenService.abrirModal('medicos',medico._id!,medico.img); } } diff --git a/src/app/pages/mantenimientos/usuarios/usuarios.component.html b/src/app/pages/mantenimientos/usuarios/usuarios.component.html index d8bbe16..e0407e0 100644 --- a/src/app/pages/mantenimientos/usuarios/usuarios.component.html +++ b/src/app/pages/mantenimientos/usuarios/usuarios.component.html @@ -48,7 +48,8 @@
Usuarios registrados en la aplicación
Avatar de usuario {{usuario.email}} @@ -70,9 +71,9 @@
Usuarios registrados en la aplicación
- + diff --git a/src/app/pages/mantenimientos/usuarios/usuarios.component.ts b/src/app/pages/mantenimientos/usuarios/usuarios.component.ts index e92351d..20e2972 100644 --- a/src/app/pages/mantenimientos/usuarios/usuarios.component.ts +++ b/src/app/pages/mantenimientos/usuarios/usuarios.component.ts @@ -34,19 +34,23 @@ export class UsuariosComponent implements OnInit, OnDestroy { } ngOnInit(): void { - this.cargarUsuarios(); + this.cargarUsuarios(); // Creo que seria mejor actualizar hospitales en el array para evitar demasiadas peticiones http this.imgSubs = this._modalImagenService.nuevaImagen .pipe(delay(200)) - .subscribe(img => this.cargarUsuarios()); + .subscribe(img => this.cargarUsuarios()); // Creo que seria mejor actualizar hospitales en el array para evitar demasiadas peticiones http } get myUid(){ return this._usuarioService.uid; } + get myRole(){ + return this._usuarioService.role; + } + cargarUsuarios(){ this.cargando = true; - this._usuarioService.cargarUsuarios(this.desde) + this._usuarioService.cargarUsuarios(this.desde) .subscribe( ({total, usuarios}) => { this.totalUsuarios = total; this.usuarios = usuarios; @@ -69,7 +73,7 @@ export class UsuariosComponent implements OnInit, OnDestroy { this.desde -= valor; } - this.cargarUsuarios(); + this.cargarUsuarios(); } @@ -80,7 +84,7 @@ export class UsuariosComponent implements OnInit, OnDestroy { } this._busquedasService.buscar('usuarios',termino) .subscribe(resultados => { - this.usuarios = resultados; + this.usuarios = resultados as Usuario[]; }) } @@ -108,7 +112,7 @@ export class UsuariosComponent implements OnInit, OnDestroy { `El usuario ${usuario.nombre} ha sido borrado`, 'success' ); - this.cargarUsuarios(); + this.cargarUsuarios(); // Creo que seria mejor actualizar hospitales en el array para evitar demasiadas peticiones http }) } }) diff --git a/src/app/pages/pages-routing.module.ts b/src/app/pages/pages-routing.module.ts index 00eebdf..71fe591 100644 --- a/src/app/pages/pages-routing.module.ts +++ b/src/app/pages/pages-routing.module.ts @@ -15,6 +15,8 @@ import { PerfilComponent } from './perfil/perfil.component'; // Mantenimientos import { UsuariosComponent } from './mantenimientos/usuarios/usuarios.component'; import { MedicosComponent } from './mantenimientos/medicos/medicos.component'; +import { HospitalesComponent } from './mantenimientos/hospitales/hospitales.component'; +import { MedicoComponent } from './mantenimientos/medicos/medico.component'; const routes: Routes = [ { @@ -31,8 +33,10 @@ const routes: Routes = [ { path: 'rxjs', component: RxjsComponent, data: { titulo: 'RxJS' } }, // Mantenimientos - { path: 'usuarios', component: UsuariosComponent, data: { titulo: 'Usuario de aplicación' } }, - { path: 'medicos', component: MedicosComponent, data: { titulo: 'Médicos de aplicación' } }, + { path: 'usuarios', component: UsuariosComponent, data: { titulo: 'Mantenimiento de Usuarios' } }, + { path: 'hospitales', component: HospitalesComponent, data: { titulo: 'Mantenimiento de Hospitales' } }, + { path: 'medicos', component: MedicosComponent, data: { titulo: 'Mantenimiento de Médicos' } }, + { path: 'medico/:id', component: MedicoComponent, data: { titulo: 'Mantenimiento de Médicos' } }, ] } ]; diff --git a/src/app/pages/pages.module.ts b/src/app/pages/pages.module.ts index 19df6e9..59cf237 100644 --- a/src/app/pages/pages.module.ts +++ b/src/app/pages/pages.module.ts @@ -1,11 +1,14 @@ import { NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import { RouterModule } from '@angular/router'; +import { ReactiveFormsModule } from '@angular/forms'; +import { FormsModule } from '@angular/forms'; import { ChartsModule } from 'ng2-charts' import { SharedModule } from '../shared/shared.module'; import { ComponentsModule } from '../components/components.module'; +import { PipesModule } from '../pipes/pipes.module'; import { DashboardComponent } from './dashboard/dashboard.component'; import { Grafica1Component } from './grafica1/grafica1.component'; @@ -15,10 +18,10 @@ import { AccountsSettingsComponent } from './accounts-settings/accounts-settings import { PromesasComponent } from './promesas/promesas.component'; import { RxjsComponent } from './rxjs/rxjs.component'; import { PerfilComponent } from './perfil/perfil.component'; -import { ReactiveFormsModule } from '@angular/forms'; -import { FormsModule } from '@angular/forms'; import { MedicosComponent } from './mantenimientos/medicos/medicos.component'; import { UsuariosComponent } from './mantenimientos/usuarios/usuarios.component'; +import { HospitalesComponent } from './mantenimientos/hospitales/hospitales.component'; +import { MedicoComponent } from './mantenimientos/medicos/medico.component'; @NgModule({ @@ -32,7 +35,9 @@ import { UsuariosComponent } from './mantenimientos/usuarios/usuarios.component' RxjsComponent, PerfilComponent, MedicosComponent, - UsuariosComponent + UsuariosComponent, + HospitalesComponent, + MedicoComponent ], imports: [ CommonModule, @@ -41,7 +46,8 @@ import { UsuariosComponent } from './mantenimientos/usuarios/usuarios.component' SharedModule, ComponentsModule, ReactiveFormsModule, - FormsModule + FormsModule, + PipesModule ], exports: [ DashboardComponent, diff --git a/src/app/pipes/imagen.pipe.ts b/src/app/pipes/imagen.pipe.ts new file mode 100644 index 0000000..c851dc4 --- /dev/null +++ b/src/app/pipes/imagen.pipe.ts @@ -0,0 +1,24 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { environment } from 'src/environments/environment'; + +const base_url = environment.base_url; + +@Pipe({ + name: 'imagen' +}) +export class ImagenPipe implements PipeTransform { + + transform(img: string | undefined, tipo: 'usuarios' | 'medicos' | 'hospitales'): string { + + if (!img){ + return `${base_url}/upload/${tipo}/no-image`; + } else if (img?.includes('https')){ + return img; + } else if (img){ + return `${base_url}/upload/${tipo}/${img}`; + } else { + return `${base_url}/upload/${tipo}/no-image`; + } + } + +} diff --git a/src/app/pipes/pipes.module.ts b/src/app/pipes/pipes.module.ts new file mode 100644 index 0000000..f07aaa5 --- /dev/null +++ b/src/app/pipes/pipes.module.ts @@ -0,0 +1,14 @@ +import { NgModule } from '@angular/core'; + +import { ImagenPipe } from './imagen.pipe'; + + +@NgModule({ + declarations: [ + ImagenPipe + ], + exports: [ + ImagenPipe + ] +}) +export class PipesModule { } diff --git a/src/app/services/busquedas.service.ts b/src/app/services/busquedas.service.ts index 8b28ca5..59717f8 100644 --- a/src/app/services/busquedas.service.ts +++ b/src/app/services/busquedas.service.ts @@ -4,6 +4,9 @@ import { environment } from 'src/environments/environment'; import { map } from 'rxjs/operators'; import { Usuario } from '../models/usuario.model'; +import { Hospital } from '../models/hospital.model'; +import { Medico } from '../models/medico.model'; +import { Observable } from 'rxjs'; const base_url = environment.base_url; @@ -31,11 +34,23 @@ export class BusquedasService { user => new Usuario(user.nombre, user.email,'', user.img, user.google, user.role, user.uid) ) } + + private transformarMedicos(resultados: any[]): Medico[]{ + return resultados; + } + + private transformarHospitales(resultados: any[]): Hospital[]{ + return resultados; + + // No haria falta crear la instancia de Hospital pues no necesita usar sus propiedades en ningun lado mas que en el mantenimiento de hospitales + // + // return resultados.map( + // hospital => new Hospital(hospital.nombre,hospital._id,hospital.img,hospital.usuario) + // ) + } - buscar( - tipo: 'usuarios' | 'medicos' | 'hospitales', - termino: string - ){ + + buscar( tipo: 'usuarios' | 'medicos' | 'hospitales', termino: string ): Observable{ const url = `${base_url}/todo/coleccion/${tipo}/${termino}`; return this._http.get(url, this.headers) .pipe( @@ -43,6 +58,13 @@ export class BusquedasService { switch (tipo) { case 'usuarios': return this.transformarUsuarios(resp.resultados) + + case 'medicos': + return this.transformarMedicos(resp.resultados) + + case 'hospitales': + return this.transformarHospitales(resp.resultados) + default: return []; } diff --git a/src/app/services/hospital.service.ts b/src/app/services/hospital.service.ts new file mode 100644 index 0000000..5d1d498 --- /dev/null +++ b/src/app/services/hospital.service.ts @@ -0,0 +1,55 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { environment } from 'src/environments/environment'; +import { Hospital } from '../models/hospital.model'; +import { map } from 'rxjs/operators'; + +const baseUrl = `${environment.base_url}/hospitales`; + +@Injectable({ + providedIn: 'root' +}) +export class HospitalService { + + constructor(private _http: HttpClient) { } + + get token(): string{ + return localStorage.getItem('token') || ''; + } + + get headers() { + return { + headers: { + 'x-token': this.token + } + } + } + + cargarHospitales(){ + interface Hospitales { ok: boolean, hospitales: Hospital[] } + + return this._http.get(baseUrl,this.headers) + .pipe( + map( (resp: Hospitales) => resp.hospitales ) + ) + + // Above method is cleaner than this + // + // return this._http.get<{ ok: boolean, hospitales: Hospital[] }>(`${baseUrl}/hospitales`,this.headers) + // .pipe( + // map( (resp: { ok: boolean, hospitales: Hospital[] }) => resp.hospitales ) + // ) + } + + crearHospital(nombre: string){ + return this._http.post(baseUrl,{nombre},this.headers); + } + + actualizarHospital(_id: string, nombre: string){ + return this._http.put(`${baseUrl}/${_id}`,{nombre},this.headers); + } + + borrarHospital(_id: string){ + return this._http.delete(`${baseUrl}/${_id}`,this.headers); + } +} diff --git a/src/app/services/medico.service.ts b/src/app/services/medico.service.ts new file mode 100644 index 0000000..377d21b --- /dev/null +++ b/src/app/services/medico.service.ts @@ -0,0 +1,55 @@ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { environment } from 'src/environments/environment'; +import { map } from 'rxjs/operators'; +import { Medico } from '../models/medico.model'; + +const base_url = environment.base_url; + +@Injectable({ + providedIn: 'root' +}) + +export class MedicoService { + + constructor(private _http: HttpClient) { } + + get token(): string{ + return localStorage.getItem('token') || ''; + } + + get headers() { + return { + headers: { + 'x-token': this.token + } + } + } + + cargarMedicos(){ + + interface Medicos { ok: boolean, medicos: Medico[] } + + return this._http.get(`${base_url}/medicos`,this.headers) + .pipe( map(resp => resp.medicos) ) + } + + obtenerMedicoPorId(id: string){ + return this._http.get<{ ok: boolean, medico: Medico}>(`${base_url}/medicos/${id}`,this.headers) + .pipe( map(resp => resp.medico) ) + } + + crearMedico(medico: {nombre: string, hospital: string}){ + return this._http.post(`${base_url}/medicos`,medico, this.headers) + } + + actualizarMedico(medico: Medico){ + return this._http.put(`${base_url}/medicos/${medico._id}`,medico, this.headers) + } + + borrarMedico(_id: string){ + return this._http.delete(`${base_url}/medicos/${_id}`,this.headers) + } + + +} diff --git a/src/app/services/usuario.service.ts b/src/app/services/usuario.service.ts index 2fcda3e..609c843 100644 --- a/src/app/services/usuario.service.ts +++ b/src/app/services/usuario.service.ts @@ -32,6 +32,10 @@ export class UsuarioService { return localStorage.getItem('token') || ''; } + get role(): string { + return this.usuario.role!; + } + get uid(): string { return this.usuario.uid || ''; } diff --git a/src/styles.css b/src/styles.css index df0bb5a..093f5ac 100644 --- a/src/styles.css +++ b/src/styles.css @@ -29,6 +29,10 @@ width: 140px; } +.w200 { + width: 200px; +} + .avatar { border-radius: 100%; width: 30px; @@ -47,4 +51,9 @@ .oculto { display: none; +} + +.btn-crear { + position: fixed; + right: 45px; } \ No newline at end of file