Skip to content

Commit f585b03

Browse files
committed
Feat: insere rota que atualiza dados do aluno
1 parent 3f6fecb commit f585b03

File tree

9 files changed

+118
-75
lines changed

9 files changed

+118
-75
lines changed

src/aluno/aluno.controller.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import { Controller, Get, UseGuards, Req } from '@nestjs/common';
1+
import { Controller, Get, UseGuards, Req, Post, Body } from '@nestjs/common';
22
import { AuthGuard } from '../auth/auth.guard';
33
import { AlunoService } from './aluno.service';
44
import AuthenticatedRequest from '../types/authenticated-request.interface';
5+
import { AtualizaDadosAlunoDTO } from './dto/atualizaDadosAluno';
56

67
@Controller('aluno')
78
export class AlunoController {
@@ -13,4 +14,14 @@ export class AlunoController {
1314
const { id } = request.user;
1415
return this.alunoService.findByClerkId(id);
1516
}
17+
18+
@UseGuards(AuthGuard)
19+
@Post(':id/update')
20+
async updateStudentData(
21+
@Req() request: AuthenticatedRequest,
22+
@Body() atualizaDadosAlunoDTO: AtualizaDadosAlunoDTO,
23+
) {
24+
const { id } = request.user;
25+
return await this.alunoService.updateStudentData(id, atualizaDadosAlunoDTO);
26+
}
1627
}

src/aluno/aluno.service.ts

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,15 @@ import { createClerkClient } from '@clerk/backend';
77
import { InjectRepository } from '@nestjs/typeorm';
88
import type { Repository } from 'typeorm';
99
import { Aluno } from '../entities/aluno/aluno.entity';
10+
import { AtualizaDadosAlunoDTO } from './dto/atualizaDadosAluno';
11+
import { Request } from 'express';
1012

1113
@Injectable()
1214
export class AlunoService {
1315
constructor(
1416
@InjectRepository(Aluno)
1517
private alunoRepository: Repository<Aluno>,
16-
) {}
18+
) { }
1719

1820
private clerk = createClerkClient({
1921
secretKey: process.env.CLERK_SECRET_KEY,
@@ -61,4 +63,46 @@ export class AlunoService {
6163
throw new BadRequestException('Erro ao buscar aluno');
6264
}
6365
}
66+
async updateStudentData(
67+
id: string,
68+
atualizaDadosAlunoDTO: AtualizaDadosAlunoDTO,
69+
) {
70+
try {
71+
const session = await this.clerk.sessions.getSession(id);
72+
if (!session) {
73+
throw new BadRequestException('O Token de autenticação não é válido.');
74+
}
75+
const alunoClerk = await this.clerk.users.getUser(id);
76+
if (!alunoClerk) {
77+
throw new BadRequestException('Usuário não encontrado.');
78+
}
79+
const aluno = await this.alunoRepository.findOneBy({ id_clerk: id });
80+
if (!aluno) {
81+
throw new NotFoundException('Aluno não encontrado.');
82+
}
83+
await this.clerk.users.updateUser(id, {
84+
firstName: atualizaDadosAlunoDTO.nome,
85+
lastName: atualizaDadosAlunoDTO.sobrenome,
86+
username: atualizaDadosAlunoDTO.matricula,
87+
primaryEmailAddressID: atualizaDadosAlunoDTO.email,
88+
});
89+
Object.assign(aluno, {
90+
pronome: atualizaDadosAlunoDTO.pronome,
91+
data_nascimento: atualizaDadosAlunoDTO.data_nascimento,
92+
curso: atualizaDadosAlunoDTO.campus,
93+
campus: atualizaDadosAlunoDTO.campus,
94+
data_ingresso: atualizaDadosAlunoDTO.data_ingresso,
95+
celular: atualizaDadosAlunoDTO.celular,
96+
});
97+
await this.alunoRepository.save(aluno);
98+
99+
return {
100+
success: true,
101+
message: 'Dados do aluno atualizados com sucesso!',
102+
};
103+
} catch (e) {
104+
console.log(e);
105+
throw new BadRequestException('Erro ao atualizar os dados do aluno');
106+
}
107+
}
64108
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import {
2+
IsDateString,
3+
IsEmail,
4+
IsEnum,
5+
IsOptional,
6+
IsString,
7+
} from 'class-validator';
8+
import { UnidadeEnum } from '../../enum/enumCampus';
9+
import { CursosEnum } from '../../enum/enumCursos';
10+
import { PronomesEnum } from '../../enum/enumPronomes';
11+
12+
export class AtualizaDadosAlunoDTO {
13+
@IsOptional()
14+
@IsString()
15+
nome?: string;
16+
17+
@IsOptional()
18+
@IsString()
19+
sobrenome?: string;
20+
21+
@IsOptional()
22+
@IsEmail()
23+
email?: string;
24+
25+
@IsOptional()
26+
@IsString()
27+
matricula?: string;
28+
29+
@IsOptional()
30+
@IsEnum(PronomesEnum)
31+
pronome?: PronomesEnum;
32+
33+
@IsOptional()
34+
@IsDateString()
35+
data_nascimento?: string;
36+
37+
@IsOptional()
38+
@IsEnum(CursosEnum)
39+
curso?: CursosEnum;
40+
41+
@IsOptional()
42+
@IsEnum(UnidadeEnum)
43+
campus?: UnidadeEnum;
44+
45+
@IsOptional()
46+
@IsDateString()
47+
data_ingresso?: string;
48+
49+
@IsOptional()
50+
@IsString()
51+
celular?: string;
52+
}

src/entities/aluno/aluno.entity.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
22
import { Inscricao } from '../inscricao/inscricao.entity';
3-
import { PronomesEnum } from 'src/enum/enumPronomes';
4-
import { CursosEnum } from 'src/enum/enumCursos';
5-
import { UnidadeEnum } from 'src/enum/enumCampus';
3+
import { PronomesEnum } from '../../enum/enumPronomes';
4+
import { CursosEnum } from '../../enum/enumCursos';
5+
import { UnidadeEnum } from '../../enum/enumCampus';
66

77
@Entity()
88
export class Aluno {

src/entities/documento/documento.entity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
22
import { Inscricao } from '../inscricao/inscricao.entity';
3-
import { EnumTipoDocumento } from 'src/enum/enumTipoDocumento';
4-
import { StatusDocumento } from 'src/enum/statusDocumento';
3+
import { EnumTipoDocumento } from '../../enum/enumTipoDocumento';
4+
import { StatusDocumento } from '../../enum/statusDocumento';
55

66
@Entity()
77
export class Documento {

src/entities/edital/edital.entity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from 'typeorm';
22
import { Inscricao } from '../inscricao/inscricao.entity';
33
import { EtapaInscricao } from '../etapaInscricao/etapaInscricao.entity';
4-
import { EditalEnum } from 'src/enum/enumEdital';
5-
import { StatusEdital } from 'src/enum/enumStatusEdital';
4+
import { EditalEnum } from '../../enum/enumEdital';
5+
import { StatusEdital } from '../../enum/enumStatusEdital';
66

77
@Entity()
88
export class Edital {

src/entities/inscricao/inscricao.entity.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import { Edital } from '../edital/edital.entity';
1111
import { ResultadoEtapa } from '../resultadoEtapa/resultadoEtapa.entity';
1212
import { Documento } from '../documento/documento.entity';
1313
import { Formulario } from '../formulario/formulario.entity';
14-
import { StatusInscricao } from 'src/enum/enumStatusInscricao';
14+
import { StatusInscricao } from '../../enum/enumStatusInscricao';
1515

1616
@Entity()
1717
export class Inscricao {

src/entities/resultadoEtapa/resultadoEtapa.entity.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from 'typeorm';
22
import { Inscricao } from '../inscricao/inscricao.entity';
33
import { EtapaInscricao } from '../etapaInscricao/etapaInscricao.entity';
4-
import { StatusEtapa } from 'src/enum/enumStatusEtapa';
4+
import { StatusEtapa } from '../../enum/enumStatusEtapa';
55

66
@Entity()
77
export class ResultadoEtapa {

src/migrations/1745013169564-migration.ts

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)