Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, HTTPException | |
| from fastapi.middleware.cors import CORSMiddleware | |
| import random | |
| app = FastAPI(title="PokeAula API") | |
| # Liberando CORS para que o React (localhost ou netlify/vercel) consiga acessar | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| # Simulando um Banco de Dados de Pokémons | |
| # Estruturado para praticar acesso a propriedades: pokemon.stats.hp | |
| pokedex = [ | |
| { | |
| "id": 1, | |
| "name": "Bulbasaur", | |
| "type": ["Gramas", "Veneno"], | |
| "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/1.png", | |
| "stats": {"hp": 45, "attack": 49, "defense": 49} | |
| }, | |
| { | |
| "id": 4, | |
| "name": "Charmander", | |
| "type": ["Fogo"], | |
| "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/4.png", | |
| "stats": {"hp": 39, "attack": 52, "defense": 43} | |
| }, | |
| { | |
| "id": 7, | |
| "name": "Squirtle", | |
| "type": ["Água"], | |
| "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/7.png", | |
| "stats": {"hp": 44, "attack": 48, "defense": 65} | |
| }, | |
| { | |
| "id": 25, | |
| "name": "Pikachu", | |
| "type": ["Elétrico"], | |
| "image": "https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/25.png", | |
| "stats": {"hp": 35, "attack": 55, "defense": 40} | |
| } | |
| ] | |
| def list_all(): | |
| """Retorna todos para o primeiro fetch da aula.""" | |
| return pokedex | |
| def get_one(id: int): | |
| """Para testar async/await com parâmetros e erro 404.""" | |
| pokemon = next((p for p in pokedex if p["id"] == id), None) | |
| if not pokemon: | |
| raise HTTPException(status_code=404, detail="Pokémon não encontrado na base de dados da aula!") | |
| return pokemon | |
| def battle(): | |
| """Rota instável para praticar try/catch (erro 500 aleatório).""" | |
| if random.random() < 0.5: | |
| raise HTTPException(status_code=500, detail="A batalha caiu! Tente novamente.") | |
| return {"status": "Vitória!", "xp_ganho": 150} |