From 3c1ffa639301398c29de1815b04ee40b3d51a1b4 Mon Sep 17 00:00:00 2001 From: sammid37 Date: Mon, 9 Mar 2026 00:07:25 -0300 Subject: [PATCH 1/7] Update public files --- frontend/public/file.svg | 1 - frontend/public/globe.svg | 1 - frontend/public/next.svg | 1 - frontend/public/pokecenter_icon.ico | Bin 0 -> 4286 bytes frontend/public/vercel.svg | 1 - frontend/public/window.svg | 1 - 6 files changed, 5 deletions(-) delete mode 100644 frontend/public/file.svg delete mode 100644 frontend/public/globe.svg delete mode 100644 frontend/public/next.svg create mode 100644 frontend/public/pokecenter_icon.ico delete mode 100644 frontend/public/vercel.svg delete mode 100644 frontend/public/window.svg diff --git a/frontend/public/file.svg b/frontend/public/file.svg deleted file mode 100644 index 004145c..0000000 --- a/frontend/public/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/public/globe.svg b/frontend/public/globe.svg deleted file mode 100644 index 567f17b..0000000 --- a/frontend/public/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/public/next.svg b/frontend/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/frontend/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/frontend/public/pokecenter_icon.ico b/frontend/public/pokecenter_icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..cea15f48569bfc236a479501b062861e7768fdd4 GIT binary patch literal 4286 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 \ No newline at end of file diff --git a/frontend/public/window.svg b/frontend/public/window.svg deleted file mode 100644 index b2b2a44..0000000 --- a/frontend/public/window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From d65fac08a88cb5b5619031031298f816156fb6aa Mon Sep 17 00:00:00 2001 From: sammid37 Date: Mon, 9 Mar 2026 00:07:58 -0300 Subject: [PATCH 2/7] Update Navbar component to display user name --- frontend/src/components/ui/Navbar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/components/ui/Navbar.tsx b/frontend/src/components/ui/Navbar.tsx index 2da8829..a96aa25 100644 --- a/frontend/src/components/ui/Navbar.tsx +++ b/frontend/src/components/ui/Navbar.tsx @@ -23,7 +23,7 @@ export default function Navbar({ user }: NavbarProps) {
- Centro Pokémon + PokéCenter
From 65406f0a786a43c7e2924f10813dccdff227119d Mon Sep 17 00:00:00 2001 From: sammid37 Date: Mon, 9 Mar 2026 00:08:19 -0300 Subject: [PATCH 3/7] Update payload to return user name --- backend/src/auth/auth.service.ts | 8 ++++---- backend/src/auth/strategies/jwt.strategy.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/backend/src/auth/auth.service.ts b/backend/src/auth/auth.service.ts index f1fdd4e..472f432 100644 --- a/backend/src/auth/auth.service.ts +++ b/backend/src/auth/auth.service.ts @@ -22,7 +22,7 @@ export class AuthService { role: dto.role, }); - return this.generateToken(user.id, user.email, user.role); + return this.generateToken(user.id, user.email, user.role, user.name); } async login(dto: LoginDto) { @@ -39,11 +39,11 @@ export class AuthService { throw new UnauthorizedException('Credenciais inválidas'); } - return this.generateToken(user.id, user.email, user.role); + return this.generateToken(user.id, user.email, user.role, user.name); } - private generateToken(userId: string, email: string, role: string) { - const payload = { sub: userId, email, role }; + private generateToken(userId: string, email: string, role: string, name: string) { + const payload = { sub: userId, email, role, name }; return { access_token: this.jwtService.sign(payload), }; diff --git a/backend/src/auth/strategies/jwt.strategy.ts b/backend/src/auth/strategies/jwt.strategy.ts index c3c9928..121c4db 100644 --- a/backend/src/auth/strategies/jwt.strategy.ts +++ b/backend/src/auth/strategies/jwt.strategy.ts @@ -16,7 +16,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { }); } - async validate(payload: { sub: string; email: string; role: string }) { - return { id: payload.sub, email: payload.email, role: payload.role }; + async validate(payload: { sub: string; email: string; role: string; name: string }) { + return { id: payload.sub, email: payload.email, role: payload.role, name: payload.name }; } } From c3f95cde6c2e9d6a614642ad14859afdec234b64 Mon Sep 17 00:00:00 2001 From: sammid37 Date: Mon, 9 Mar 2026 00:08:37 -0300 Subject: [PATCH 4/7] Add Footer UI Component --- frontend/src/components/ui/Footer.tsx | 100 ++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 frontend/src/components/ui/Footer.tsx diff --git a/frontend/src/components/ui/Footer.tsx b/frontend/src/components/ui/Footer.tsx new file mode 100644 index 0000000..4538e3f --- /dev/null +++ b/frontend/src/components/ui/Footer.tsx @@ -0,0 +1,100 @@ +'use client'; + +import Link from 'next/link'; + +export default function Footer() { + const technologies = [ + { name: 'Next.js', url: 'https://nextjs.org' }, + { name: 'NestJS', url: 'https://nestjs.com' }, + { name: 'TypeScript', url: 'https://www.typescriptlang.org' }, + { name: 'PostgreSQL', url: 'https://www.postgresql.org' }, + { name: 'TailwindCSS', url: 'https://tailwindcss.com' }, + { name: 'DaisyUI', url: 'https://daisyui.com' }, + { name: 'PokéAPI', url: 'https://pokeapi.co' }, + ]; + + return ( +
+
+
+ + {/* Coluna 1 — Nome e descrição */} +
+

+ PokéCenter +

+

+ Sistema para treinadores e Enfermeiras Joy cuidarem dos seus pokémons com carinho. 💚 +

+

+ Desenvolvido para o desafio técnico para Desenvolvedor Júnior na SIM INT. +

+
+ + {/* Coluna 2 — Tecnologias */} +
+

+ Feito com +

+
+ {technologies.map((tech) => ( + + {tech.name} + + ))} +
+
+ + {/* Coluna 3 — Desenvolvedora e links */} +
+

+ Desenvolvedora +

+

+ Feito com 💚 por{' '} + + Samantha Medeiros + +

+ + {/* GitHub */} + + {/* Ícone do GitHub em SVG — sem dependência de biblioteca */} + + + + sammid37/PokemonCenter/ + ⭐ + +
+ +
+ + {/* Linha divisória e versão */} +
+
+

© {new Date().getFullYear()} PokéCenter — Todos os direitos reservados

+

v1.0.0

+
+ +
+
+ ); +} \ No newline at end of file From 446e40d97568470d0aad820dd2b16ca7583d442f Mon Sep 17 00:00:00 2001 From: sammid37 Date: Mon, 9 Mar 2026 00:09:00 -0300 Subject: [PATCH 5/7] Add custom DaisyUI Theme and Lato font-family --- frontend/src/app/globals.css | 42 +++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/frontend/src/app/globals.css b/frontend/src/app/globals.css index faa12e3..1e67ccb 100644 --- a/frontend/src/app/globals.css +++ b/frontend/src/app/globals.css @@ -1,4 +1,44 @@ @import "tailwindcss"; @plugin "daisyui" { - themes: garden --default; + themes: pokemon --default; +} + + +@plugin "daisyui/theme" { + name: "PokeCenter"; + default: true; + prefersdark: false; + color-scheme: "light"; + --color-base-100: oklch(98% 0.001 106.423); + --color-base-200: oklch(92% 0.003 48.717); + --color-base-300: oklch(86% 0.005 56.366); + --color-base-content: oklch(21% 0.006 285.885); + --color-primary: oklch(60% 0.118 184.704); + --color-primary-content: oklch(97% 0.021 166.113); + --color-secondary: oklch(66% 0.179 58.318); + --color-secondary-content: oklch(98% 0.022 95.277); + --color-accent: oklch(38% 0.063 188.416); + --color-accent-content: oklch(96% 0.018 272.314); + --color-neutral: oklch(37% 0.01 67.558); + --color-neutral-content: oklch(98% 0 0); + --color-info: oklch(50% 0.134 242.749); + --color-info-content: oklch(97% 0.013 236.62); + --color-success: oklch(59% 0.145 163.225); + --color-success-content: oklch(98% 0.014 180.72); + --color-warning: oklch(55% 0.135 66.442); + --color-warning-content: oklch(98% 0.026 102.212); + --color-error: oklch(51% 0.222 16.935); + --color-error-content: oklch(97% 0.013 17.38); + --radius-selector: 0.5rem; + --radius-field: 0.5rem; + --radius-box: 0.5rem; + --size-selector: 0.25rem; + --size-field: 0.25rem; + --border: 1.5px; + --depth: 1; + --noise: 1; +} + +body { + font-family: var(--font-lato), sans-serif; } \ No newline at end of file From 7ddddddecf6298fbc4b9814126a9210835a330cf Mon Sep 17 00:00:00 2001 From: sammid37 Date: Mon, 9 Mar 2026 00:09:17 -0300 Subject: [PATCH 6/7] Update Layout --- frontend/src/app/layout.tsx | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/frontend/src/app/layout.tsx b/frontend/src/app/layout.tsx index 37e0d7c..86e6236 100644 --- a/frontend/src/app/layout.tsx +++ b/frontend/src/app/layout.tsx @@ -1,9 +1,21 @@ import type { Metadata } from 'next'; +import { Lato } from 'next/font/google'; import './globals.css'; +import Footer from '@/components/ui/Footer'; + +const lato = Lato({ + subsets: ['latin'], + weight: ['300', '400', '700', '900'], + variable: '--font-lato', + display: 'swap', +}); export const metadata: Metadata = { - title: 'Centro Pokémon', + title: 'PokéCenter', description: 'Sistema de gerenciamento de Pokémons', + icons: { + icon: 'pokecenter_icon.ico', + } }; export default function RootLayout({ @@ -12,8 +24,11 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - - {children} + + + {children} +
+ ); } \ No newline at end of file From 3b3cdd2a3bbd2a616cd6e9d127497c0bd244bb01 Mon Sep 17 00:00:00 2001 From: sammid37 Date: Mon, 9 Mar 2026 00:09:34 -0300 Subject: [PATCH 7/7] Update Modal and Forms --- .../src/components/pokemon/PokemonForm.tsx | 44 ++++++++++--------- .../src/components/pokemon/PokemonModal.tsx | 2 +- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/frontend/src/components/pokemon/PokemonForm.tsx b/frontend/src/components/pokemon/PokemonForm.tsx index 2e6b452..d515691 100644 --- a/frontend/src/components/pokemon/PokemonForm.tsx +++ b/frontend/src/components/pokemon/PokemonForm.tsx @@ -132,11 +132,29 @@ export default function PokemonForm({ initialData, onSubmit, isLoading }: Pokemo
)} - {/* Busca na PokéAPI com autocomplete */} - + {/* Busca na PokéAPI e número da Pokédex — visíveis apenas no cadastro */} + {!initialData && ( + <> + + + + + )} {/* Apelido */} - {/* Número da Pokédex — preenchido automaticamente */} - - {/* Nível e HP */}