97 lines
3.5 KiB
Python
97 lines
3.5 KiB
Python
from fastapi import APIRouter, HTTPException, status
|
|
from infrastructure.api.users.schemas import UserCreateRequest, UserUpdateRequest, UserResponse
|
|
from application.services.user_services import (
|
|
CreateUser, GetUserById, GetUserByEmail, ListAllUsers, UpdateUser, DeleteUser
|
|
)
|
|
from infrastructure.adapters.persistence.user_repository_sql import UserRepositorySQL
|
|
|
|
router = APIRouter()
|
|
user_repo = UserRepositorySQL()
|
|
|
|
@router.post("/", status_code=status.HTTP_202_ACCEPTED)
|
|
async def create_user(user_data: UserCreateRequest):
|
|
"""Crea un nuevo usuario - envía a cola de procesamiento"""
|
|
try:
|
|
create_use_case = CreateUser(user_repo)
|
|
result = create_use_case.execute(
|
|
nombre=user_data.nombre,
|
|
apellido=user_data.apellido,
|
|
email=user_data.email,
|
|
fecha_nacimiento=user_data.fecha_nacimiento,
|
|
url_foto_perfil=user_data.url_foto_perfil,
|
|
biografia=user_data.biografia
|
|
)
|
|
if result["status"] == "error":
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=result["message"]
|
|
)
|
|
return result
|
|
except HTTPException:
|
|
raise
|
|
except Exception as e:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=f"Error al crear usuario: {str(e)}"
|
|
)
|
|
|
|
@router.get("/{user_id}", response_model=UserResponse)
|
|
async def get_user(user_id: int):
|
|
"""Obtiene un usuario por ID"""
|
|
get_use_case = GetUserById(user_repo)
|
|
user = get_use_case.execute(user_id)
|
|
if not user:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=f"Usuario con ID {user_id} no encontrado"
|
|
)
|
|
return user
|
|
|
|
@router.get("/email/{email}", response_model=UserResponse)
|
|
async def get_user_by_email(email: str):
|
|
"""Obtiene un usuario por email"""
|
|
get_use_case = GetUserByEmail(user_repo)
|
|
user = get_use_case.execute(email)
|
|
if not user:
|
|
raise HTTPException(
|
|
status_code=status.HTTP_404_NOT_FOUND,
|
|
detail=f"Usuario con email {email} no encontrado"
|
|
)
|
|
return user
|
|
|
|
@router.get("/", response_model=list[UserResponse])
|
|
async def list_users():
|
|
"""Obtiene todos los usuarios"""
|
|
list_use_case = ListAllUsers(user_repo)
|
|
return list_use_case.execute()
|
|
|
|
@router.put("/{user_id}", status_code=status.HTTP_202_ACCEPTED)
|
|
async def update_user(user_id: int, user_data: UserUpdateRequest):
|
|
"""Actualiza un usuario - envía a cola de procesamiento"""
|
|
update_use_case = UpdateUser(user_repo)
|
|
result = update_use_case.execute(
|
|
user_id=user_id,
|
|
nombre=user_data.nombre,
|
|
apellido=user_data.apellido,
|
|
url_foto_perfil=user_data.url_foto_perfil,
|
|
biografia=user_data.biografia
|
|
)
|
|
if result["status"] == "error":
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=result["message"]
|
|
)
|
|
return result
|
|
|
|
@router.delete("/{user_id}", status_code=status.HTTP_202_ACCEPTED)
|
|
async def delete_user(user_id: int):
|
|
"""Elimina un usuario - envía a cola de procesamiento"""
|
|
delete_use_case = DeleteUser(user_repo)
|
|
result = delete_use_case.execute(user_id)
|
|
if result["status"] == "error":
|
|
raise HTTPException(
|
|
status_code=status.HTTP_400_BAD_REQUEST,
|
|
detail=result["message"]
|
|
)
|
|
return result
|