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