diff --git a/sql/01-tipo_miembro.sql b/sql/01-tipo_miembro.sql new file mode 100644 index 0000000..1e87c8f --- /dev/null +++ b/sql/01-tipo_miembro.sql @@ -0,0 +1,2 @@ +INSERT INTO tipo_miembro(tipo_miembro) VALUES("Admin"); +INSERT INTO tipo_miembro(tipo_miembro) VALUES("Alumno"); diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 4b43b6c..30fadac 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -5,6 +5,7 @@ import { Usuario } from 'src/usuario/usuario.entity'; import { Repository } from 'typeorm'; import { AuthService } from './auth.service'; import { LoginUsuarioDto } from './dto/loginUsuario.dto'; +import { RegistrarMiembroDto } from './dto/registrarMiembro.dto'; import { RegistrarUsuarioDto } from './dto/registrarUsuario.dto'; @Controller('auth') @@ -14,8 +15,8 @@ export class AuthController { ) /* @InjectRepository(Usuario) private usuarioRepository: Repository */ {} @Post('registro') - registrarUsuario(@Body() registrarUsuario: RegistrarUsuarioDto) { - return this.authService.registrar(registrarUsuario); + registrarUsuario(@Body() registrarMiembro: RegistrarMiembroDto) { + return this.authService.registrar(registrarMiembro); } @Post('login') diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 2e3c76d..28f3f79 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,26 +1,26 @@ import { Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; -import { UsuarioModule } from 'src/usuario/usuario.module'; import { AuthService } from './auth.service'; import { jwtStrategy } from './jwt.strategy'; import { AuthController } from './auth.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Usuario } from 'src/usuario/usuario.entity'; -import { UsuarioService } from 'src/usuario/usuario.service'; import { JwtModule } from '@nestjs/jwt'; import { jwtConstants } from './jwt.constants'; +import { MiembroModule } from 'src/miembro/miembro.module'; +import { MiembroService } from 'src/miembro/miembro.service'; +import { Miembro } from 'src/miembro/entity/miembro.entity'; @Module({ imports: [ - UsuarioModule, + MiembroModule, PassportModule, - TypeOrmModule.forFeature([Usuario]), + TypeOrmModule.forFeature([Miembro]), JwtModule.register({ secret: jwtConstants.secret, signOptions: { expiresIn: '5h' }, }), ], - providers: [AuthService, jwtStrategy, UsuarioService, jwtStrategy], + providers: [AuthService, jwtStrategy, MiembroService, jwtStrategy], controllers: [AuthController], }) export class AuthModule {} diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index b32c96c..8504a60 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -1,45 +1,44 @@ import { HttpException, Injectable } from '@nestjs/common'; -import { UsuarioService } from 'src/usuario/usuario.service'; import { JwtService } from '@nestjs/jwt'; import * as bcrypt from 'bcrypt'; -import { RegistrarUsuarioDto } from './dto/registrarUsuario.dto'; import { hash } from 'bcrypt'; import { InjectRepository } from '@nestjs/typeorm'; -import { Usuario } from 'src/usuario/usuario.entity'; import { Repository } from 'typeorm'; -import { LoginUsuarioDto } from './dto/loginUsuario.dto'; import { compare } from 'bcrypt'; import { jwtConstants } from './jwt.constants'; +import { LoginMiembroDto } from './dto/loginMiembro.dto'; +import { Miembro } from 'src/miembro/entity/miembro.entity'; +import { RegistrarMiembroDto } from './dto/registrarMiembro.dto'; @Injectable() export class AuthService { constructor( private jwtService: JwtService, - private readonly usuarioService: UsuarioService, - @InjectRepository(Usuario) private usuarioRepository: Repository, + @InjectRepository(Miembro) private miembroRepository: Repository, + ) {} - async registrar(registrarUsuario: RegistrarUsuarioDto) { + async registrar(registrarMiembro: RegistrarMiembroDto) { - const { email, password } = registrarUsuario; + const { email, password } = registrarMiembro; const plainToHash = await hash(password, 10); - if (await this.usuarioRepository.findOne({ where: { email } })) + if (await this.miembroRepository.findOne({ where: { email } })) throw new HttpException('usuario existe', 403); - registrarUsuario = { ...registrarUsuario, password: plainToHash }; + registrarMiembro = { ...registrarMiembro, password: plainToHash }; - return this.usuarioRepository.save( - this.usuarioRepository.create(registrarUsuario), + return this.miembroRepository.save( + this.miembroRepository.create(registrarMiembro), ); } - async login(loginUsuario: LoginUsuarioDto) { - const { email, password } = loginUsuario; + async login(loginMiembro: LoginMiembroDto) { + const { email, password } = loginMiembro; - const usuario = await this.usuarioRepository.findOne({ where: { email } }); + const usuario = await this.miembroRepository.findOne({ where: { email } }); if (!usuario) throw new HttpException('Usuario no encontrado', 404); @@ -47,12 +46,14 @@ export class AuthService { if (!checkPassword) throw new HttpException('ContraseƱa incorrecta', 403); - const payload = { id_usuario: usuario.id_usuario, name: usuario.nombre }; + const payload = { id_usuario: usuario.id_miembro,id_tipoMiembro: usuario.id_tipo_miembro, name: usuario.nombre }; + console.log(payload) const token = this.jwtService.sign(payload); //firma el token + console.log(token) const data = { usuario: usuario.nombre, - id: usuario.id_usuario, + id: usuario.id_miembro, email: usuario.email, token, }; diff --git a/src/auth/dto/loginMiembro.dto.ts b/src/auth/dto/loginMiembro.dto.ts new file mode 100644 index 0000000..f8f9780 --- /dev/null +++ b/src/auth/dto/loginMiembro.dto.ts @@ -0,0 +1,11 @@ +import { IsEmail, MaxLength, MinLength } from "class-validator" + + +export class LoginMiembroDto { + @IsEmail() + email: string + + @MinLength(10) + @MaxLength(15) + password: string +} \ No newline at end of file diff --git a/src/auth/dto/registrarMiembro.dto.ts b/src/auth/dto/registrarMiembro.dto.ts new file mode 100644 index 0000000..bc2c341 --- /dev/null +++ b/src/auth/dto/registrarMiembro.dto.ts @@ -0,0 +1,33 @@ +import { PartialType } from '@nestjs/swagger'; +import { IsEmail, IsNotEmpty, MaxLength, MinLength } from 'class-validator'; +import { LoginUsuarioDto } from './loginUsuario.dto'; + +export class RegistrarMiembroDto extends PartialType(LoginUsuarioDto) { + @IsNotEmpty() + nombre: string; + + @IsNotEmpty() + apellido_paterno: string; + + @IsNotEmpty() + apellido_materno: string; + + @IsNotEmpty() + id_tipo_miembro: number; + + @MinLength(10) + @MaxLength(15) + password: string; + + descripcion: string + + id_carrera: number + + semestre: string + + @IsNotEmpty() + cuenta: number + + @IsEmail() + email: string; +} diff --git a/src/miembro-contacto/entity/miembro_contacto.entity.ts b/src/miembro-contacto/entity/miembro_contacto.entity.ts index 3632f98..7b5a77f 100644 --- a/src/miembro-contacto/entity/miembro_contacto.entity.ts +++ b/src/miembro-contacto/entity/miembro_contacto.entity.ts @@ -13,10 +13,10 @@ export class MiembroContacto { @Column() id_contacto: number - @OneToMany( +/* @OneToMany( () => Miembro, (miembro) => miembro.miembroContacto ) - miembro: Miembro[] + miembro: Miembro[] */ @OneToMany( () => Contacto, (contacto) => contacto.miembroContacto diff --git a/src/miembro/entity/miembro.entity.ts b/src/miembro/entity/miembro.entity.ts index a1e5807..2ccff7e 100644 --- a/src/miembro/entity/miembro.entity.ts +++ b/src/miembro/entity/miembro.entity.ts @@ -35,16 +35,16 @@ export class Miembro { @IsEmail() email: string; - @Column({ nullable: false, length: 40 }) + @Column({ nullable: false }) password: string; - @Column({ length: 260, nullable: false }) + @Column({ length: 260, nullable:true}) descripcion: string; - @Column({ nullable: false }) + @Column({nullable: true}) id_carrera: number; - @Column({ length: 40 }) + @Column({ length: 40, nullable:true}) semestre: string; @Column({ nullable: false }) @@ -64,11 +64,11 @@ export class Miembro { @JoinColumn({ name: 'id_carrera' }) carrera: Carrera; - @ManyToOne( +/* @ManyToOne( () => MiembroContacto, (miembroContacto) => miembroContacto.miembro ) @JoinColumn({name: "id_miembro"}) - miembroContacto: MiembroContacto + miembroContacto: MiembroContacto */ @OneToMany( () => MiembroProyecto, (miembroProyecto) => miembroProyecto.miembro diff --git a/src/miembro/miembro.controller.ts b/src/miembro/miembro.controller.ts index 464fcf5..35d28cb 100644 --- a/src/miembro/miembro.controller.ts +++ b/src/miembro/miembro.controller.ts @@ -1,4 +1,16 @@ -import { Controller } from '@nestjs/common'; +import { Controller, Get, UseGuards } from '@nestjs/common'; +import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'; +import { Miembro } from './entity/miembro.entity'; +import { MiembroService } from './miembro.service'; @Controller('miembro') -export class MiembroController {} +export class MiembroController { + + constructor(private readonly miembroService: MiembroService){} + + @UseGuards(JwtAuthGuard) + @Get() + getUsuarios(): Promise{ + return this.miembroService.getUsuarios() + } +} diff --git a/src/miembro/miembro.module.ts b/src/miembro/miembro.module.ts index d68d418..73ffcb3 100644 --- a/src/miembro/miembro.module.ts +++ b/src/miembro/miembro.module.ts @@ -1,8 +1,11 @@ import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Miembro } from './entity/miembro.entity'; import { MiembroController } from './miembro.controller'; import { MiembroService } from './miembro.service'; @Module({ + imports:[TypeOrmModule.forFeature([Miembro])], controllers: [MiembroController], providers: [MiembroService] }) diff --git a/src/miembro/miembro.service.ts b/src/miembro/miembro.service.ts index 9caed0f..1878615 100644 --- a/src/miembro/miembro.service.ts +++ b/src/miembro/miembro.service.ts @@ -1,4 +1,23 @@ import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Miembro } from './entity/miembro.entity'; @Injectable() -export class MiembroService {} +export class MiembroService { + constructor( + @InjectRepository(Miembro) private miembroRepository: Repository, + ) {} + + getUsuarios(){ + return this.miembroRepository.find() + } + + getUsuario(email: string) { + return this.miembroRepository.findOne({ + where: { + email, + }, + }); + } +}