Conversation
Signed-off-by: Benevanio <benevaniosantos930@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> Signed-off-by: Benevanio <benevaniosantos930@gmail.com>
hltav
approved these changes
Jul 12, 2026
Contributor
There was a problem hiding this comment.
Pull request overview
Este PR padroniza o tratamento/serialização de erros entre backend e frontend (envelope { code, message, details? }), centraliza validações de request com middleware Zod e atualiza/expande a suíte de testes para refletir o novo contrato de erro e validação.
Changes:
- Introduz
AppError(backend) eApiError/parseApiError(frontend) para padronizar códigos e payloads de erro. - Centraliza validação com middleware
validatee simplifica controllers para propagar exceções tratadas peloerrorHandler. - Atualiza e adiciona testes (unit + integration) para o novo formato de erro e adiciona testes de componentes de marketing no frontend.
Reviewed changes
Copilot reviewed 41 out of 41 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| frontend/tests/unit/utils/apiError.test.ts | Novos testes unitários para parseApiError e envelopes/legado/fallback. |
| frontend/tests/unit/services/auth.service.test.tsx | Ajusta mocks/asserts para erros com code no envelope. |
| frontend/tests/unit/components/landing/LandinPage.test.tsx | Adiciona teste de renderização da Landing Page (com mocks de seções). |
| frontend/tests/unit/components/landing/FeaturesSection.test.tsx | Adiciona testes de conteúdo/estrutura da seção de features. |
| frontend/tests/unit/components/landing/CTASection.test.tsx | Adiciona testes de conteúdo/links/estrutura do CTA. |
| frontend/tests/unit/components/JobsTableCard.test.tsx | Amplia cenários de renderização (valores vazios) e estado vazio. |
| frontend/tests/unit/app/AuthenticatedHeader.test.tsx | Adiciona testes para títulos por rota e avatar/iniciais/tema. |
| frontend/src/shared/lib/apiError.ts | Implementa ApiError e parseApiError com suporte a formatos padronizado e legado. |
| frontend/src/shared/lib/apiClient.ts | Adiciona interceptor do Axios para rejeitar com ApiError padronizado. |
| frontend/src/domains/auth/infrastructure/authApi.ts | Passa a lançar ApiError via parseApiError (fetch) em respostas não-ok. |
| backend/tests/unit/modules/users/users.service.test.ts | Ajusta asserts para AppError (code/statusCode/message) em NOT_FOUND. |
| backend/tests/unit/modules/users/user.controller.test.ts | Ajusta testes para controllers propagarem erros em vez de responderem inline. |
| backend/tests/unit/modules/savedJobs/savedJobs.service.test.ts | Ajusta asserts para AppError em CONFLICT/NOT_FOUND. |
| backend/tests/unit/modules/savedJobs/savedJobs.controller.test.ts | Ajusta testes para controllers propagarem erros e padronizar responses de erro. |
| backend/tests/unit/modules/auth/credentials.service.test.ts | Ajusta asserts para AppError em CONFLICT/UNAUTHORIZED/NOT_FOUND. |
| backend/tests/unit/modules/auth/credentials.controller.test.ts | Ajusta testes para controllers propagarem AppError e dependerem de validação middleware. |
| backend/tests/unit/modules/auth/auth.controller.test.ts | Remove testes de validação inline (migrada para middleware validate). |
| backend/tests/unit/middleware/validate.test.ts | Adiciona testes do middleware de validação (body/query/params) e erro Zod->AppError. |
| backend/tests/unit/middleware/requireAuth.test.ts | Ajusta requireAuth para retornar envelope padronizado. |
| backend/tests/unit/middleware/errorHandler.test.ts | Expande testes do errorHandler (CORS, AppError, ZodError, produção vs não-produção). |
| backend/tests/unit/lib/errors.test.ts | Adiciona testes para factories/toJSON/fromZodError do AppError. |
| backend/tests/unit/app.test.ts | Ajusta asserts do CORS para envelope padronizado {code,message}. |
| backend/tests/integration/routes/user.routes.test.ts | Ajusta asserts de validação para envelope padronizado + details. |
| backend/tests/integration/routes/savedJobs.routes.test.ts | Ajusta asserts para envelope padronizado em validação/autenticação/conflito/not_found. |
| backend/tests/integration/routes/auth.routes.test.ts | Ajusta asserts para envelope padronizado e status corretos em erros. |
| backend/src/routes/users.routes.ts | Introduz validate + .catch(next) para controllers async. |
| backend/src/routes/savedJobs.routes.ts | Introduz validate + .catch(next) para controllers async. |
| backend/src/routes/auth.routes.ts | Introduz validate para params/body e .catch(next); reorganiza middlewares. |
| backend/src/modules/users/users.service.ts | Troca Error genérico por AppError.notFound(...). |
| backend/src/modules/users/users.controller.ts | Remove try/catch e validação inline; passa a lançar AppError. |
| backend/src/modules/users/schemas/user.schemas.ts | Expõe createPreferencesSchema como alias do schema parcial. |
| backend/src/modules/savedJobs/schemas/savedJobs.schemas.ts | Extrai schemas Zod para arquivo dedicado (create/update). |
| backend/src/modules/savedJobs/savedJobs.service.ts | Troca Error genérico por AppError.conflict/notFound. |
| backend/src/modules/savedJobs/savedJobs.controller.ts | Remove validação/handleError inline; lança AppError. |
| backend/src/modules/auth/credentials.service.ts | Padroniza erros com AppError e refatora criação de usuário + username. |
| backend/src/modules/auth/credentials.controller.ts | Remove validação/try-catch inline; passa a lançar AppError quando necessário. |
| backend/src/modules/auth/auth.controller.ts | Remove validação inline de provider (delegada ao middleware); simplifica tipos de sessão. |
| backend/src/middleware/validate.ts | Novo middleware para parse de body/query/params com Zod e conversão para AppError. |
| backend/src/middleware/requireAuth.ts | Padroniza resposta 401 para {code,message} via AppError. |
| backend/src/middleware/errorHandler.ts | Padroniza respostas de erro com AppError e evita vazamento de causa em produção. |
| backend/src/lib/errors.ts | Introduz AppError com factories, fromZodError e toJSON. |
Comment on lines
+42
to
48
| router.post( | ||
| "/register", | ||
| validate({ body: RegisterSchema }), | ||
| (req, res, next) => { | ||
| credentialsController.register(req, res).catch(next); | ||
| }, | ||
| ); |
Comment on lines
110
to
113
| const payload = await parseResponse(response); | ||
|
|
||
| if (!response.ok) { | ||
| throw createError(payload, "Falha ao obter URL de autenticacao Google."); | ||
| } | ||
|
|
||
| return payload.url; | ||
| throwIfNotOk(response, payload, "Falha ao obter URL de autenticacao Google."); | ||
| return (payload as { url: string }).url; | ||
| } |
Comment on lines
120
to
123
| const payload = await parseResponse(response); | ||
|
|
||
| if (!response.ok) { | ||
| throw createError(payload, "Falha ao obter URL de autenticacao Github."); | ||
| } | ||
|
|
||
| return payload.url; | ||
| throwIfNotOk(response, payload, "Falha ao obter URL de autenticacao Github."); | ||
| return (payload as { url: string }).url; | ||
| } |
Comment on lines
130
to
137
| const payload = await parseResponse(response); | ||
|
|
||
| if (!response.ok) { | ||
| throw createError(payload, "Falha ao obter URL de autenticacao LinkedIn."); | ||
| } | ||
|
|
||
| return payload.url; | ||
| throwIfNotOk( | ||
| response, | ||
| payload, | ||
| "Falha ao obter URL de autenticacao LinkedIn.", | ||
| ); | ||
| return (payload as { url: string }).url; | ||
| } |
| filteredJobs={[]} | ||
| paginatedJobs={[]} | ||
| jobs={[]} | ||
| jobs= {[]} |
Comment on lines
15
to
+18
| if (error.message.startsWith("Origin not allowed by CORS")) { | ||
| res.status(403).json({ message: "Origem não permitida." }); | ||
| const appError = AppError.forbidden("Origem não permitida."); | ||
| res.status(appError.statusCode).json(appError.toJSON()); | ||
| return; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.