muchos cambios :'v

This commit is contained in:
jorgemike
2025-06-13 22:41:20 -06:00
parent 0dddfce887
commit d652f9f012
83 changed files with 3289 additions and 2261 deletions
+69 -54
View File
@@ -1,72 +1,87 @@
import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post, UseGuards } from '@nestjs/common';
import {
Body,
Controller,
Delete,
Get,
Param,
ParseIntPipe,
Patch,
Post,
UseGuards,
} from '@nestjs/common';
import { AdministradorService } from './administrador.service';
import { Administrador } from './administrador.entity';
import { Administrador } from './entities/administrador.entity';
import { CreateAdministradorDto } from './dto/create-administrador.dto';
import { UpdateAdministradorDto } from './dto/update.administrador.dto';
import { LoginAdministradorDto } from './dto/login-administrador.dto';
import { ChangePasswordDto } from './dto/change-password.dto';
import { ApiBearerAuth } from '@nestjs/swagger';
import { ApiBearerAuth, ApiTags } from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { AdministradorApiDocumentation } from './administrador.documentation';
@Controller('administrador')
@ApiBearerAuth()
@AdministradorApiDocumentation.ApiController
@ApiBearerAuth()
@Controller('administrador')
export class AdministradorController {
constructor(private administradorService: AdministradorService) {}
constructor(private administradorService: AdministradorService) {}
@Get()
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiGetAll
getAdministradores(): Promise<Administrador[]> {
return this.administradorService.getAdministradores();
}
@Get()
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiGetAll
getAdministradores(): Promise<Administrador[]> {
return this.administradorService.getAdministradores();
}
@Get(':id')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiGetOne
getAdministrador(@Param('id', ParseIntPipe) id: number) {
return this.administradorService.getAdministrador(id);
}
@Get(':id')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiGetOne
getAdministrador(@Param('id', ParseIntPipe) id: number) {
return this.administradorService.getAdministrador(id);
}
@Post()
@AdministradorApiDocumentation.ApiCreate
createAdministrador(@Body() newAdministrador: CreateAdministradorDto) {
return this.administradorService.createAdministrador(newAdministrador);
}
@Post()
@AdministradorApiDocumentation.ApiCreate
createAdministrador(@Body() newAdministrador: CreateAdministradorDto) {
return this.administradorService.createAdministrador(newAdministrador);
}
@Post('login')
@AdministradorApiDocumentation.ApiLogin
login(@Body() loginData: LoginAdministradorDto) {
return this.administradorService.login(
loginData.correo,
loginData.password,
);
}
@Post('login')
@AdministradorApiDocumentation.ApiLogin
login(@Body() loginData: LoginAdministradorDto) {
return this.administradorService.login(loginData.correo, loginData.password);
}
@Patch(':id/change-password')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiChangePassword
changePassword(
@Param('id', ParseIntPipe) id: number,
@Body() changePasswordDto: ChangePasswordDto,
) {
return this.administradorService.changePassword(
id,
changePasswordDto.currentPassword,
changePasswordDto.newPassword,
);
}
@Patch(':id/change-password')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiChangePassword
changePassword(
@Param('id', ParseIntPipe) id: number,
@Body() changePasswordDto: ChangePasswordDto
) {
return this.administradorService.changePassword(
id,
changePasswordDto.currentPassword,
changePasswordDto.newPassword
);
}
@Delete(':id')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiRemove
deleteAdministrador(@Param('id', ParseIntPipe) id: number) {
return this.administradorService.deleteAdministrador(id);
}
@Delete(':id')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiRemove
deleteAdministrador(@Param('id', ParseIntPipe) id: number) {
return this.administradorService.deleteAdministrador(id);
}
@Patch(':id')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiUpdate
updateAdministrador(@Param('id', ParseIntPipe) id: number, @Body() administrador: UpdateAdministradorDto) {
return this.administradorService.updateAdministrador(id, administrador);
}
@Patch(':id')
@UseGuards(JwtAuthGuard)
@AdministradorApiDocumentation.ApiUpdate
updateAdministrador(
@Param('id', ParseIntPipe) id: number,
@Body() administrador: UpdateAdministradorDto,
) {
return this.administradorService.updateAdministrador(id, administrador);
}
}
+141 -112
View File
@@ -1,15 +1,24 @@
import { ApiBody, ApiOperation, ApiParam, ApiResponse, ApiTags } from '@nestjs/swagger';
import {
ApiBearerAuth,
ApiBody,
ApiOperation,
ApiParam,
ApiResponse,
ApiTags,
} from '@nestjs/swagger';
import { applyDecorators } from '@nestjs/common';
export class AdministradorApiDocumentation {
// Decorador para toda la clase del controlador
static ApiController = ApiTags('Administradores');
static ApiController = applyDecorators(
ApiTags('Administrador'),
);
// Documentación para crear un administrador
static ApiCreate = applyDecorators(
ApiOperation({
summary: 'Registrar un nuevo administrador',
description: 'Crea un nuevo administrador con correo, contraseña y tipo de administrador'
description:
'Crea un nuevo administrador con correo, contraseña y tipo de administrador',
}),
ApiBody({
description: 'Datos del administrador a registrar',
@@ -17,47 +26,51 @@ export class AdministradorApiDocumentation {
type: 'object',
required: ['correo', 'password', 'id_tipo_user'],
properties: {
correo: {
type: 'string',
correo: {
type: 'string',
format: 'email',
example: 'admin@ejemplo.com',
description: 'Correo electrónico del administrador'
description: 'Correo electrónico del administrador',
},
password: {
type: 'string',
password: {
type: 'string',
format: 'password',
example: 'Password123',
description: 'Contraseña del administrador (mínimo 6 caracteres)'
example: 'password',
description: 'Contraseña del administrador (mínimo 6 caracteres)',
},
id_tipo_user: {
type: 'integer',
id_tipo_user: {
type: 'integer',
example: 1,
description: 'ID del tipo de usuario administrador'
}
}
}
description: 'ID del tipo de usuario administrador',
},
},
},
}),
ApiResponse({
status: 201,
ApiResponse({
status: 201,
description: 'Administrador registrado exitosamente',
schema: {
type: 'object',
properties: {
id_admnistrador: { type: 'number', example: 1 },
correo: { type: 'string', example: 'admin@ejemplo.com' },
id_tipo_user: { type: 'number', example: 1 }
}
}
id_tipo_user: { type: 'number', example: 1 },
},
},
}),
ApiResponse({ status: 400, description: 'Datos del administrador inválidos' }),
ApiResponse({ status: 409, description: 'El correo ya está registrado' })
ApiResponse({
status: 400,
description: 'Datos del administrador inválidos',
}),
ApiResponse({ status: 409, description: 'El correo ya está registrado' }),
);
// Documentación para iniciar sesión
static ApiLogin = applyDecorators(
ApiOperation({
summary: 'Iniciar sesión como administrador',
description: 'Autentica un administrador con correo y contraseña, y devuelve un token JWT'
description:
'Autentica un administrador con correo y contraseña, y devuelve un token JWT',
}),
ApiBody({
description: 'Credenciales de inicio de sesión',
@@ -65,58 +78,59 @@ export class AdministradorApiDocumentation {
type: 'object',
required: ['correo', 'password'],
properties: {
correo: {
type: 'string',
correo: {
type: 'string',
format: 'email',
example: 'admin@ejemplo.com',
description: 'Correo electrónico del administrador'
description: 'Correo electrónico del administrador',
},
password: {
type: 'string',
password: {
type: 'string',
format: 'password',
example: 'Password123',
description: 'Contraseña del administrador'
}
}
}
example: 'password',
description: 'Contraseña del administrador',
},
},
},
}),
ApiResponse({
status: 200,
ApiResponse({
status: 200,
description: 'Inicio de sesión exitoso',
schema: {
type: 'object',
properties: {
access_token: {
type: 'string',
access_token: {
type: 'string',
example: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...',
description: 'Token JWT para autenticación'
description: 'Token JWT para autenticación',
},
id_administrador: {
type: 'number',
id_administrador: {
type: 'number',
example: 1,
description: 'ID del administrador autenticado'
description: 'ID del administrador autenticado',
},
correo: {
type: 'string',
correo: {
type: 'string',
example: 'admin@ejemplo.com',
description: 'Correo del administrador autenticado'
description: 'Correo del administrador autenticado',
},
tipo_user: {
type: 'number',
tipo_user: {
type: 'number',
example: 1,
description: 'Tipo de usuario del administrador'
}
}
}
description: 'Tipo de usuario del administrador',
},
},
},
}),
ApiResponse({ status: 401, description: 'Credenciales inválidas' })
ApiResponse({ status: 401, description: 'Credenciales inválidas' }),
);
// Documentación para obtener todos los administradores
static ApiGetAll = applyDecorators(
ApiOperation({
summary: 'Obtener todos los administradores',
description: 'Retorna una lista de todos los administradores registrados (requiere autenticación)'
description:
'Retorna una lista de todos los administradores registrados (requiere autenticación)',
}),
ApiResponse({
status: 200,
@@ -135,28 +149,32 @@ export class AdministradorApiDocumentation {
type: 'object',
properties: {
id_tipo_user: { type: 'number', example: 1 },
tipo_user: { type: 'string', example: 'Administrador General' }
}
}
}
}
}
}
tipo_user: {
type: 'string',
example: 'Administrador General',
},
},
},
},
},
},
},
}),
ApiResponse({ status: 401, description: 'No autorizado' })
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para obtener un administrador por ID
static ApiGetOne = applyDecorators(
ApiOperation({
summary: 'Obtener un administrador por ID',
description: 'Retorna los datos de un administrador específico según su ID (requiere autenticación)'
description:
'Retorna los datos de un administrador específico según su ID (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador',
type: 'number',
example: 1
example: 1,
}),
ApiResponse({
status: 200,
@@ -173,53 +191,55 @@ export class AdministradorApiDocumentation {
type: 'object',
properties: {
id_tipo_user: { type: 'number', example: 1 },
tipo_user: { type: 'string', example: 'Administrador General' }
}
}
}
}
}
tipo_user: { type: 'string', example: 'Administrador General' },
},
},
},
},
},
}),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
ApiResponse({ status: 401, description: 'No autorizado' })
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para actualizar un administrador
static ApiUpdate = applyDecorators(
ApiOperation({
summary: 'Actualizar datos de un administrador',
description: 'Actualiza la información de un administrador existente (requiere autenticación)'
description:
'Actualiza la información de un administrador existente (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador a actualizar',
type: 'number',
example: 1
example: 1,
}),
ApiBody({
description: 'Datos a actualizar del administrador',
schema: {
type: 'object',
properties: {
correo: {
type: 'string',
correo: {
type: 'string',
format: 'email',
example: 'nuevo_admin@ejemplo.com',
description: 'Nuevo correo electrónico del administrador'
description: 'Nuevo correo electrónico del administrador',
},
password: {
type: 'string',
password: {
type: 'string',
format: 'password',
example: 'NuevaPassword123',
description: 'Nueva contraseña del administrador (mínimo 6 caracteres)'
description:
'Nueva contraseña del administrador (mínimo 6 caracteres)',
},
id_tipo_user: {
type: 'integer',
id_tipo_user: {
type: 'integer',
example: 2,
description: 'Nuevo tipo de usuario administrador'
}
}
}
description: 'Nuevo tipo de usuario administrador',
},
},
},
}),
ApiResponse({
status: 200,
@@ -229,26 +249,30 @@ export class AdministradorApiDocumentation {
properties: {
id_admnistrador: { type: 'number', example: 1 },
correo: { type: 'string', example: 'nuevo_admin@ejemplo.com' },
id_tipo_user: { type: 'number', example: 2 }
}
}
id_tipo_user: { type: 'number', example: 2 },
},
},
}),
ApiResponse({
status: 400,
description: 'Datos de actualización inválidos',
}),
ApiResponse({ status: 400, description: 'Datos de actualización inválidos' }),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
ApiResponse({ status: 401, description: 'No autorizado' })
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para cambiar contraseña
static ApiChangePassword = applyDecorators(
ApiOperation({
summary: 'Cambiar contraseña de un administrador',
description: 'Permite a un administrador cambiar su contraseña verificando primero la contraseña actual (requiere autenticación)'
description:
'Permite a un administrador cambiar su contraseña verificando primero la contraseña actual (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador',
type: 'number',
example: 1
example: 1,
}),
ApiBody({
description: 'Datos para cambio de contraseña',
@@ -256,20 +280,21 @@ export class AdministradorApiDocumentation {
type: 'object',
required: ['currentPassword', 'newPassword'],
properties: {
currentPassword: {
type: 'string',
currentPassword: {
type: 'string',
format: 'password',
example: 'Password123',
description: 'Contraseña actual del administrador'
description: 'Contraseña actual del administrador',
},
newPassword: {
type: 'string',
newPassword: {
type: 'string',
format: 'password',
example: 'NuevaPassword123',
description: 'Nueva contraseña del administrador (mínimo 6 caracteres)'
}
}
}
description:
'Nueva contraseña del administrador (mínimo 6 caracteres)',
},
},
},
}),
ApiResponse({
status: 200,
@@ -277,26 +302,30 @@ export class AdministradorApiDocumentation {
schema: {
type: 'object',
properties: {
message: { type: 'string', example: 'Contraseña actualizada correctamente' }
}
}
message: {
type: 'string',
example: 'Contraseña actualizada correctamente',
},
},
},
}),
ApiResponse({ status: 400, description: 'Contraseña actual incorrecta' }),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
ApiResponse({ status: 401, description: 'No autorizado' })
ApiResponse({ status: 401, description: 'No autorizado' }),
);
// Documentación para eliminar un administrador
static ApiRemove = applyDecorators(
ApiOperation({
summary: 'Eliminar un administrador',
description: 'Elimina permanentemente un administrador por su ID (requiere autenticación)'
description:
'Elimina permanentemente un administrador por su ID (requiere autenticación)',
}),
ApiParam({
name: 'id',
description: 'ID del administrador a eliminar',
type: 'number',
example: 1
example: 1,
}),
ApiResponse({
status: 200,
@@ -304,11 +333,11 @@ export class AdministradorApiDocumentation {
schema: {
type: 'object',
properties: {
affected: { type: 'number', example: 1 }
}
}
affected: { type: 'number', example: 1 },
},
},
}),
ApiResponse({ status: 404, description: 'Administrador no encontrado' }),
ApiResponse({ status: 401, description: 'No autorizado' })
ApiResponse({ status: 401, description: 'No autorizado' }),
);
}
}
-34
View File
@@ -1,34 +0,0 @@
import { TipoUser } from "src/tipo_user/tipo_user.entity";
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from "typeorm";
@Entity()
export class Administrador {
@PrimaryGeneratedColumn()
id_admnistrador: number
@Column({ unique: true })
correo: string
@Column()
password: string
/*
@ManyToOne(() => TipoUser, (tipoUser) => tipoUser.administradores)
@JoinColumn({ name: "id_tipo_user" })
tipoUser: TipoUser;
*/
//Relacion con tipo_user
@Column()
id_tipo_user: number
@ManyToOne(() => TipoUser, (tipoUser) => tipoUser.administrador)
tipoUser: TipoUser[]
/*
@OneToMany(() => Evento, (evento) => evento.administrador)
eventos: Evento[];
@OneToMany(() => Asistencia, (asistencia) => asistencia.administrador)
asistencias: Asistencia[];
*/
}
+1 -1
View File
@@ -2,7 +2,7 @@ import { Module } from '@nestjs/common';
import { AdministradorService } from './administrador.service';
import { AdministradorController } from './administrador.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Administrador } from './administrador.entity';
import { Administrador } from './entities/administrador.entity';
import { AuthModule } from '../auth/auth.module';
@Module({
+175 -134
View File
@@ -1,6 +1,6 @@
import { HttpException, HttpStatus, Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Administrador } from './administrador.entity';
import { Administrador } from './entities/administrador.entity';
import { Repository } from 'typeorm';
import { CreateAdministradorDto } from './dto/create-administrador.dto';
import { UpdateAdministradorDto } from './dto/update.administrador.dto';
@@ -9,163 +9,204 @@ import { JwtService } from '@nestjs/jwt';
@Injectable()
export class AdministradorService {
constructor(
@InjectRepository(Administrador) private administradorRepository: Repository<Administrador>,
private jwtService: JwtService
) {}
constructor(
@InjectRepository(Administrador)
private administradorRepository: Repository<Administrador>,
private jwtService: JwtService,
) {}
async createAdministrador(administrador: CreateAdministradorDto) {
// Verificar si ya existe un administrador con el mismo correo
const administradorFound = await this.administradorRepository.findOne({
where: {
correo: administrador.correo
}
});
async createAdministrador(administrador: CreateAdministradorDto) {
// Verificar si ya existe un administrador con el mismo correo
const administradorFound = await this.administradorRepository.findOne({
where: {
correo: administrador.correo,
},
});
if (administradorFound) {
throw new HttpException('El correo ya está registrado', HttpStatus.CONFLICT);
}
// Encriptar la contraseña
const hashedPassword = await this.hashPassword(administrador.password);
// Crear y guardar el nuevo administrador
const newAdministrador = this.administradorRepository.create({
correo: administrador.correo,
password: hashedPassword,
id_tipo_user: administrador.id_tipo_user
});
const savedAdministrador = await this.administradorRepository.save(newAdministrador);
// Excluir la contraseña de la respuesta
const { password, ...result } = savedAdministrador;
return result;
if (administradorFound) {
throw new HttpException(
'El correo ya está registrado',
HttpStatus.CONFLICT,
);
}
async login(correo: string, password: string) {
// Buscar administrador por correo
const administrador = await this.administradorRepository.findOne({
where: { correo },
relations: ['tipoUser']
});
// Encriptar la contraseña
const hashedPassword = await this.hashPassword(administrador.password);
if (!administrador) {
throw new HttpException('Credenciales inválidas', HttpStatus.UNAUTHORIZED);
}
// Crear y guardar el nuevo administrador
const newAdministrador = this.administradorRepository.create({
correo: administrador.correo,
password: hashedPassword,
id_tipo_user: administrador.id_tipo_user,
});
// Verificar contraseña
const isPasswordValid = await bcrypt.compare(password, administrador.password);
if (!isPasswordValid) {
throw new HttpException('Credenciales inválidas', HttpStatus.UNAUTHORIZED);
}
const savedAdministrador =
await this.administradorRepository.save(newAdministrador);
// Generar token JWT
const payload = {
sub: administrador.id_admnistrador,
correo: administrador.correo,
id_tipo_user: administrador.id_tipo_user
};
return {
access_token: this.jwtService.sign(payload),
id_administrador: administrador.id_admnistrador,
correo: administrador.correo,
tipo_user: administrador.id_tipo_user
};
// Excluir la contraseña de la respuesta
const { password, ...result } = savedAdministrador;
return result;
}
async login(correo: string, password: string) {
// Buscar administrador por correo
const administrador = await this.administradorRepository.findOne({
where: { correo },
relations: ['tipoUser'],
});
if (!administrador) {
throw new HttpException(
'Credenciales inválidas',
HttpStatus.UNAUTHORIZED,
);
}
async changePassword(id_admnistrador: number, currentPassword: string, newPassword: string) {
// Buscar administrador
const administrador = await this.administradorRepository.findOne({
where: { id_admnistrador }
});
if (!administrador) {
throw new HttpException('Administrador no encontrado', HttpStatus.NOT_FOUND);
}
// Verificar contraseña actual
const isPasswordValid = await bcrypt.compare(currentPassword, administrador.password);
if (!isPasswordValid) {
throw new HttpException('Contraseña actual incorrecta', HttpStatus.BAD_REQUEST);
}
// Hashear y actualizar nueva contraseña
administrador.password = await this.hashPassword(newPassword);
await this.administradorRepository.save(administrador);
return { message: 'Contraseña actualizada correctamente' };
// Verificar contraseña
const isPasswordValid = await bcrypt.compare(
password,
administrador.password,
);
if (!isPasswordValid) {
throw new HttpException(
'Credenciales inválidas',
HttpStatus.UNAUTHORIZED,
);
}
private async hashPassword(password: string): Promise<string> {
const salt = await bcrypt.genSalt();
return bcrypt.hash(password, salt);
// Generar token JWT
const payload = {
sub: administrador.id_admnistrador,
correo: administrador.correo,
id_tipo_user: administrador.id_tipo_user,
};
return {
token: this.jwtService.sign(payload),
};
}
async changePassword(
id_admnistrador: number,
currentPassword: string,
newPassword: string,
) {
// Buscar administrador
const administrador = await this.administradorRepository.findOne({
where: { id_admnistrador },
});
if (!administrador) {
throw new HttpException(
'Administrador no encontrado',
HttpStatus.NOT_FOUND,
);
}
getAdministradores() {
return this.administradorRepository.find({
relations: ['tipoUser'],
select: {
id_admnistrador: true,
correo: true,
id_tipo_user: true
}
});
// Verificar contraseña actual
const isPasswordValid = await bcrypt.compare(
currentPassword,
administrador.password,
);
if (!isPasswordValid) {
throw new HttpException(
'Contraseña actual incorrecta',
HttpStatus.BAD_REQUEST,
);
}
async getAdministrador(id_admnistrador: number) {
const administradorFound = await this.administradorRepository.findOne({
where: {
id_admnistrador
},
relations: ['tipoUser'],
select: {
id_admnistrador: true,
correo: true,
id_tipo_user: true
}
});
// Hashear y actualizar nueva contraseña
administrador.password = await this.hashPassword(newPassword);
await this.administradorRepository.save(administrador);
if (!administradorFound) {
throw new HttpException('Administrador no encontrado', HttpStatus.NOT_FOUND);
}
return { message: 'Contraseña actualizada correctamente' };
}
return administradorFound;
private async hashPassword(password: string): Promise<string> {
const salt = await bcrypt.genSalt();
return bcrypt.hash(password, salt);
}
getAdministradores() {
return this.administradorRepository.find({
relations: ['tipoUser'],
select: {
id_admnistrador: true,
correo: true,
id_tipo_user: true,
},
});
}
async getAdministrador(id_admnistrador: number) {
const administradorFound = await this.administradorRepository.findOne({
where: {
id_admnistrador,
},
relations: ['tipoUser'],
select: {
id_admnistrador: true,
correo: true,
id_tipo_user: true,
},
});
if (!administradorFound) {
throw new HttpException(
'Administrador no encontrado',
HttpStatus.NOT_FOUND,
);
}
async deleteAdministrador(id_admnistrador: number) {
const result = await this.administradorRepository.delete({ id_admnistrador });
return administradorFound;
}
if (result.affected === 0) {
throw new HttpException('Administrador no encontrado', HttpStatus.NOT_FOUND);
}
async deleteAdministrador(id_admnistrador: number) {
const result = await this.administradorRepository.delete({
id_admnistrador,
});
return result;
if (result.affected === 0) {
throw new HttpException(
'Administrador no encontrado',
HttpStatus.NOT_FOUND,
);
}
async updateAdministrador(id_admnistrador: number, administrador: UpdateAdministradorDto) {
const administradorFound = await this.administradorRepository.findOne({
where: {
id_admnistrador
}
});
return result;
}
if (!administradorFound) {
throw new HttpException('Administrador no encontrado', HttpStatus.NOT_FOUND);
}
async updateAdministrador(
id_admnistrador: number,
administrador: UpdateAdministradorDto,
) {
const administradorFound = await this.administradorRepository.findOne({
where: {
id_admnistrador,
},
});
// Si se incluye una nueva contraseña, hashearla
if (administrador.password) {
administrador.password = await this.hashPassword(administrador.password);
}
const updateAdministrador = Object.assign(administradorFound, administrador);
const savedAdministrador = await this.administradorRepository.save(updateAdministrador);
// Excluir la contraseña de la respuesta
const { password, ...result } = savedAdministrador;
return result;
if (!administradorFound) {
throw new HttpException(
'Administrador no encontrado',
HttpStatus.NOT_FOUND,
);
}
// Si se incluye una nueva contraseña, hashearla
if (administrador.password) {
administrador.password = await this.hashPassword(administrador.password);
}
const updateAdministrador = Object.assign(
administradorFound,
administrador,
);
const savedAdministrador =
await this.administradorRepository.save(updateAdministrador);
// Excluir la contraseña de la respuesta
const { password, ...result } = savedAdministrador;
return result;
}
}
@@ -0,0 +1,20 @@
import { TipoUser } from 'src/tipo_user/entities/tipo_user.entity';
import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
@Entity('administrador')
export class Administrador {
@PrimaryGeneratedColumn()
id_admnistrador: number;
@Column({ unique: true })
correo: string;
@Column()
password: string;
@Column()
id_tipo_user: number;
@ManyToOne(() => TipoUser, (tipoUser) => tipoUser.administrador)
tipoUser: TipoUser[];
}