Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cat Breeds API - Backend

API REST desarrollada en .NET 8 con Clean Architecture para gestionar usuarios y sus razas de gatos favoritas.

🏗️ Arquitectura

El proyecto sigue los principios de Clean Architecture con separación de responsabilidades en 4 capas:

cat-breeds-backend/
├── Domain/                 # Capa de dominio (entidades y contratos)
│   ├── Entities/
│   │   └── User.cs        # Entidad de dominio User
│   └── Interfaces/
│       └── IUserRepository.cs
│
├── Application/            # Capa de aplicación (casos de uso)
│   ├── DTOs/
│   │   ├── AuthResponse.cs
│   │   ├── LoginRequest.cs
│   │   └── RegisterRequest.cs
│   ├── Interfaces/
│   │   ├── IAuthService.cs
│   │   ├── IJwtService.cs
│   │   └── IPasswordService.cs
│   └── Services/
│       └── AuthService.cs  # Lógica de negocio
│
├── Infrastructure/         # Capa de infraestructura (implementaciones)
│   ├── Configuration/
│   │   ├── JwtSettings.cs
│   │   └── MongoDbSettings.cs
│   ├── Persistence/
│   │   └── UserRepository.cs  # Implementación MongoDB
│   ├── Security/
│   │   ├── JwtService.cs      # Generación de tokens JWT
│   │   └── PasswordService.cs  # Hash de contraseñas
│   └── DependencyInjection.cs
│
└── Api/                    # Capa de presentación (API)
    ├── Controllers/
    │   └── UsersController.cs
    ├── Program.cs
    └── appsettings.json

Dependencias entre capas

  • Domain: Sin dependencias (núcleo de la aplicación)
  • Application: Depende de Domain
  • Infrastructure: Depende de Domain y Application
  • Api: Depende de Application e Infrastructure

🚀 Tecnologías

  • .NET 8: Framework principal
  • MongoDB: Base de datos NoSQL
  • JWT: Autenticación basada en tokens
  • BCrypt: Hash seguro de contraseñas
  • Swagger/OpenAPI: Documentación de API

📦 Paquetes NuGet

Infrastructure

  • MongoDB.Driver (3.5.2)
  • BCrypt.Net-Next (4.0.3)
  • Microsoft.AspNetCore.Authentication.JwtBearer (8.0.*)
  • System.IdentityModel.Tokens.Jwt (8.0.*)

⚙️ Configuración

1. MongoDB

Asegúrate de tener MongoDB ejecutándose localmente o actualiza la cadena de conexión en appsettings.json:

"MongoDbSettings": {
  "ConnectionString": "mongodb://localhost:27017",
  "DatabaseName": "CatBreedsDb",
  "UsersCollectionName": "users"
}

2. JWT

Configura la clave secreta JWT en appsettings.json (cambia el secreto en producción):

"JwtSettings": {
  "Secret": "YourSecretKeyHere-ChangeThisToASecureRandomString-MinimumLength32Characters",
  "Issuer": "CatBreedsApi",
  "Audience": "CatBreedsApp",
  "ExpirationInMinutes": 1440
}

🔌 Endpoints

POST /api/users/register

Registra un nuevo usuario.

Request Body:

{
  "email": "user@example.com",
  "name": "John Doe",
  "favoriteBreed": "Persian",
  "avatar": "😺",
  "password": "password123"
}

Response:

{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "user": {
    "id": "507f1f77bcf86cd799439011",
    "email": "user@example.com",
    "name": "John Doe",
    "favoriteBreed": "Persian",
    "avatar": "😺"
  }
}

POST /api/users/login

Autentica un usuario existente.

Request Body:

{
  "email": "user@example.com",
  "password": "password123"
}

Response:

{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "user": {
    "id": "507f1f77bcf86cd799439011",
    "email": "user@example.com",
    "name": "John Doe",
    "favoriteBreed": "Persian",
    "avatar": "😺"
  }
}

🏃‍♂️ Ejecución

Compilar la solución

dotnet build CatBreedsApi.sln

Ejecutar la API

cd Api
dotnet run

La API estará disponible en:

  • HTTPS: https://localhost:7xxx
  • HTTP: http://localhost:5xxx
  • Swagger UI: https://localhost:7xxx/swagger

🔒 Seguridad

  • Las contraseñas se almacenan hasheadas con BCrypt
  • Autenticación JWT con firma HMAC-SHA256
  • CORS configurado para permitir peticiones desde http://localhost:4200 (Angular)
  • Índice único en MongoDB para emails

📝 Modelo de Usuario

{
  id: string;
  email: string;
  name: string;
  favoriteBreed: string;
  avatar: string;
  password: string; // Hasheado, no se devuelve en respuestas
}

🧪 Testing

Para probar los endpoints puedes usar:

  • Swagger UI (/swagger)
  • Postman
  • El archivo Api.http incluido en el proyecto

📄 Licencia

Este proyecto es parte de una prueba técnica.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages