listo logo peronalizado
This commit is contained in:
parent
b4fe7b2074
commit
40618970a5
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@
|
||||
.env
|
||||
pcpuma_unam.sql
|
||||
/upload/*
|
||||
/public/*
|
||||
|
||||
# compiled output
|
||||
/dist
|
||||
|
@ -40,9 +40,10 @@ export class AuthService {
|
||||
};
|
||||
|
||||
// Los super admin y sistema no tienen institución
|
||||
if (JwtPayload.Operador.tipoUsuario.id_tipo_usuario > 2)
|
||||
if (JwtPayload.Operador.tipoUsuario.id_tipo_usuario === 3)
|
||||
JwtPayload.Operador.institucion = {
|
||||
id_institucion: admin.institucion.id_institucion,
|
||||
logo: admin.institucion.logo,
|
||||
};
|
||||
return { token: this.jwtService.sign(JwtPayload) }; // "Firmamos"/creamos el token
|
||||
});
|
||||
@ -69,6 +70,7 @@ export class AuthService {
|
||||
nombre: operador.nombre,
|
||||
institucion: {
|
||||
id_institucion: operador.institucion.id_institucion,
|
||||
logo: operador.institucion.logo,
|
||||
},
|
||||
tipoUsuario: {
|
||||
id_tipo_usuario: operador.tipoUsuario.id_tipo_usuario,
|
||||
@ -76,6 +78,7 @@ export class AuthService {
|
||||
},
|
||||
Modulo: { id_modulo: modulo.id_modulo },
|
||||
};
|
||||
|
||||
return { token: this.jwtService.sign(JwtPayload) }; // "Firmamos"/creamos el token
|
||||
});
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ export interface JwtPayloadAdmin {
|
||||
id_operador: number;
|
||||
nombre: string;
|
||||
operador: string;
|
||||
institucion?: { id_institucion: number };
|
||||
institucion?: { id_institucion: number; logo: string };
|
||||
tipoUsuario: { id_tipo_usuario: number };
|
||||
};
|
||||
}
|
||||
|
@ -3,7 +3,7 @@ export interface JwtPayloadOperador {
|
||||
id_operador: number;
|
||||
nombre: string;
|
||||
operador: string;
|
||||
institucion: { id_institucion: number };
|
||||
institucion: { id_institucion: number; logo: string };
|
||||
tipoUsuario: { id_tipo_usuario: number };
|
||||
};
|
||||
Modulo: { id_modulo: number };
|
||||
|
@ -20,9 +20,9 @@ export class InstitucionService {
|
||||
@InjectRepository(Institucion) private repository: Repository<Institucion>,
|
||||
) {}
|
||||
|
||||
crearInstitucion(id_institucion: number): Institucion {
|
||||
return this.repository.create({ id_institucion });
|
||||
}
|
||||
// crearInstitucion(id_institucion: number): Institucion {
|
||||
// return this.repository.create({ id_institucion });
|
||||
// }
|
||||
|
||||
findAll(): Promise<Institucion[]> {
|
||||
return this.repository.find({ select: ['id_institucion'] });
|
||||
|
@ -1,10 +1,12 @@
|
||||
import { join } from 'path';
|
||||
import { NestFactory } from '@nestjs/core';
|
||||
import { NestExpressApplication } from '@nestjs/platform-express';
|
||||
import { SwaggerModule, DocumentBuilder } from '@nestjs/swagger';
|
||||
import { ValidationPipe } from '@nestjs/common';
|
||||
import { AppModule } from './app.module';
|
||||
|
||||
async function bootstrap() {
|
||||
const app = await NestFactory.create(AppModule)
|
||||
const app = await NestFactory.create<NestExpressApplication>(AppModule);
|
||||
// const config = new DocumentBuilder()
|
||||
// .setTitle('pcpuma_unam_api')
|
||||
// .setDescription('Api de Pc puma')
|
||||
@ -16,6 +18,9 @@ async function bootstrap() {
|
||||
// SwaggerModule.setup('/api', app, document);
|
||||
app.useGlobalPipes(new ValidationPipe({ whitelist: true }));
|
||||
app.enableCors();
|
||||
app.useStaticAssets(join(__dirname, '..', 'public'), {
|
||||
prefix: '/public/',
|
||||
});
|
||||
await app.listen(process.env.API_PORT);
|
||||
}
|
||||
bootstrap();
|
||||
|
@ -40,7 +40,9 @@ export class Operador {
|
||||
@Column({ type: Number, nullable: true })
|
||||
id_tipo_usuario: number;
|
||||
|
||||
@ManyToOne(() => Institucion, (institucion) => institucion.operadores)
|
||||
@ManyToOne(() => Institucion, (institucion) => institucion.operadores, {
|
||||
eager: true,
|
||||
})
|
||||
@JoinColumn({ name: 'id_institucion' })
|
||||
institucion: Institucion;
|
||||
|
||||
|
@ -16,6 +16,7 @@ import { TipoUsuario } from '../../../tipo-usuario/entity/tipo-usuario.entity';
|
||||
.addSelect('o.operador', 'operador')
|
||||
.addSelect('o.password', 'password')
|
||||
.addSelect('i.institucion', 'institucion')
|
||||
.addSelect('i.logo', 'logo')
|
||||
.addSelect('tu.tipo_usuario', 'tipo_usuario')
|
||||
.from(Operador, 'o')
|
||||
.innerJoin(Institucion, 'i', 'i.id_institucion = o.id_institucion')
|
||||
@ -31,6 +32,9 @@ export class FullInformacionOperadorView {
|
||||
@ViewColumn()
|
||||
activo: number;
|
||||
|
||||
@ViewColumn()
|
||||
correo: string;
|
||||
|
||||
@ViewColumn()
|
||||
id_institucion: number;
|
||||
|
||||
@ -41,7 +45,7 @@ export class FullInformacionOperadorView {
|
||||
institucion: string;
|
||||
|
||||
@ViewColumn()
|
||||
correo: string;
|
||||
logo: string;
|
||||
|
||||
@ViewColumn()
|
||||
nombre: string;
|
||||
|
@ -93,14 +93,9 @@ export class OperadorService {
|
||||
}
|
||||
|
||||
findAdmin(admin: string): Promise<Operador> {
|
||||
return this.repository
|
||||
.findOne({
|
||||
where: {
|
||||
operador: admin,
|
||||
tipoUsuario: { id_tipo_usuario: Between(2, 3) },
|
||||
},
|
||||
})
|
||||
.then((admin) => this.llenarIds(admin));
|
||||
return this.fullInformacionOperadorView
|
||||
.findOne({ where: { operador: admin, id_tipo_usuario: Between(2, 3) } })
|
||||
.then((infoOperador) => this.fullViewToOperador(infoOperador));
|
||||
}
|
||||
|
||||
async findAll(
|
||||
@ -140,23 +135,7 @@ export class OperadorService {
|
||||
const operadores: Operador[] = [];
|
||||
|
||||
for (let i = 0; i < infoOperadores[0].length; i++)
|
||||
operadores.push(
|
||||
this.repository.create({
|
||||
id_operador: infoOperadores[0][i].id_operador,
|
||||
activo: infoOperadores[0][i].activo === 1,
|
||||
correo: infoOperadores[0][i].correo,
|
||||
nombre: infoOperadores[0][i].nombre,
|
||||
operador: infoOperadores[0][i].operador,
|
||||
institucion: {
|
||||
id_institucion: infoOperadores[0][i].id_operador,
|
||||
institucion: infoOperadores[0][i].institucion,
|
||||
},
|
||||
tipoUsuario: {
|
||||
id_tipo_usuario: infoOperadores[0][i].id_tipo_usuario,
|
||||
tipo_usuario: infoOperadores[0][i].tipo_usuario,
|
||||
},
|
||||
}),
|
||||
);
|
||||
operadores.push(this.fullViewToOperador(infoOperadores[0][i]));
|
||||
return [operadores, infoOperadores[1]];
|
||||
});
|
||||
}
|
||||
@ -185,29 +164,43 @@ export class OperadorService {
|
||||
.then((operador) => {
|
||||
if (!operador)
|
||||
throw new NotFoundException('No existe este id operador.');
|
||||
return this.llenarIds(operador);
|
||||
operador.tipoUsuario = this.tipoUsuarioService.crearTipoUsuario(
|
||||
operador.id_tipo_usuario,
|
||||
);
|
||||
return operador;
|
||||
});
|
||||
}
|
||||
|
||||
findOperador(institucion: Institucion, operador: string): Promise<Operador> {
|
||||
return this.repository
|
||||
return this.fullInformacionOperadorView
|
||||
.findOne({
|
||||
where: { operador, institucion, tipoUsuario: { id_tipo_usuario: 4 } },
|
||||
where: {
|
||||
id_institucion: institucion.id_institucion,
|
||||
id_tipo_usuario: 4,
|
||||
operador,
|
||||
},
|
||||
})
|
||||
.then((operador) => this.llenarIds(operador));
|
||||
.then((infoOperador) => this.fullViewToOperador(infoOperador));
|
||||
}
|
||||
|
||||
llenarIds(operador: Operador): Operador {
|
||||
if (operador) {
|
||||
operador.tipoUsuario = this.tipoUsuarioService.crearTipoUsuario(
|
||||
operador.id_tipo_usuario,
|
||||
);
|
||||
if (operador.id_institucion)
|
||||
operador.institucion = this.institucionService.crearInstitucion(
|
||||
operador.id_institucion,
|
||||
);
|
||||
}
|
||||
return operador;
|
||||
fullViewToOperador(infoOperador: FullInformacionOperadorView): Operador {
|
||||
return this.repository.create({
|
||||
id_operador: infoOperador.id_operador,
|
||||
activo: infoOperador.activo === 1,
|
||||
correo: infoOperador.correo,
|
||||
nombre: infoOperador.nombre,
|
||||
operador: infoOperador.operador,
|
||||
password: infoOperador.password,
|
||||
institucion: {
|
||||
id_institucion: infoOperador.id_institucion,
|
||||
institucion: infoOperador.institucion,
|
||||
logo: infoOperador.logo,
|
||||
},
|
||||
tipoUsuario: {
|
||||
id_tipo_usuario: infoOperador.id_tipo_usuario,
|
||||
tipo_usuario: infoOperador.tipo_usuario,
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
passwordReset(
|
||||
|
@ -75,37 +75,12 @@ export class UploadFileController {
|
||||
return this.uploadFileService.createUsuarios(path, admin);
|
||||
}
|
||||
|
||||
@Get('download-logo')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@ApiBearerAuth('jwt')
|
||||
downloadLogo(@Request() req, @Response() res) {
|
||||
const operador: Operador = req.user.operador;
|
||||
|
||||
this.validarUsuarioService.validarAdminOperador(operador);
|
||||
return this.uploadFileService.downloadLogo(operador).then((logo) => {
|
||||
if (logo) res.download(logo);
|
||||
else return false;
|
||||
});
|
||||
}
|
||||
|
||||
@Serealize(MessageOutputDto)
|
||||
@Post('upload-logo')
|
||||
@UseGuards(AuthGuard('jwt'))
|
||||
@UseInterceptors(
|
||||
FileInterceptor('logo', {
|
||||
storage: multer.diskStorage({
|
||||
destination: './upload',
|
||||
filename: (req: any, file, cb) => {
|
||||
cb(
|
||||
null,
|
||||
`${
|
||||
req.user.operador.institucion.id_institucion
|
||||
}${Date.now()}${Math.round(
|
||||
Math.random() * 1e9,
|
||||
)}${file.originalname.slice(-4)}`,
|
||||
);
|
||||
},
|
||||
}),
|
||||
storage: multer.diskStorage({ destination: './public' }),
|
||||
}),
|
||||
)
|
||||
@ApiBearerAuth('jwt')
|
||||
|
@ -106,12 +106,6 @@ export class UploadFileService {
|
||||
return { message: 'Se subió y cargó correctamente tu archivo csv.' };
|
||||
}
|
||||
|
||||
downloadLogo(operador: Operador): Promise<string> {
|
||||
return this.institucionService
|
||||
.findById(operador.institucion.id_institucion)
|
||||
.then((institucion) => institucion.logo);
|
||||
}
|
||||
|
||||
errorBase(index): string {
|
||||
return `Se saltó la linea ${
|
||||
index + 2
|
||||
|
Loading…
Reference in New Issue
Block a user