File size: 2,357 Bytes
c71e312
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from src.expon.shared.infrastructure.dependencies import get_db
from src.expon.iam.infrastructure.authorization.sfs.auth_bearer import get_current_user
from src.expon.profile.infrastructure.persistence.jpa.repositories.profile_repository import ProfileRepository
from src.expon.profile.application.internal.commandservices.profile_command_service import ProfileCommandService
from fastapi import HTTPException
from src.expon.profile.domain.model.aggregates.user_profile import UserProfile
from src.expon.profile.interfaces.rest.requests.user_profile_request import UserProfileRequest 

router = APIRouter()

@router.get("/me")
def get_my_profile(
    db: Session = Depends(get_db),
    current_user=Depends(get_current_user)
):
    service = ProfileCommandService(ProfileRepository(db))
    profile = service.get_profile_by_user(current_user.id)

    if not profile:
        raise HTTPException(status_code=404, detail="Profile not found")

    return profile

@router.put("/me")
def update_my_profile(
    data: UserProfileRequest,
    db: Session = Depends(get_db),
    current_user=Depends(get_current_user)
):
    service = ProfileCommandService(ProfileRepository(db))
    return service.update_profile(current_user.id, data.dict(exclude_unset=True)) 

@router.post("/me")
def create_my_profile(
    data: UserProfileRequest,
    db: Session = Depends(get_db),
    current_user=Depends(get_current_user)
):
    service = ProfileCommandService(ProfileRepository(db))

    existing = service.get_profile_by_user(current_user.id)
    if existing:
        raise HTTPException(status_code=400, detail="Profile already exists")

    profile = UserProfile(
        id=None,
        user_id=current_user.id,
        full_name=data.full_name,
        university=data.university,
        career=data.career,
        first_name=data.first_name,
        last_name=data.last_name,
        gender=data.gender,
        profile_picture=data.profile_picture,
        preferred_presentation=data.preferred_presentation
    )
    return service.repository.save_or_update(profile)


@router.get("/")
def get_all_profiles(
    db: Session = Depends(get_db),
    current_user=Depends(get_current_user)
):
    service = ProfileCommandService(ProfileRepository(db))
    return service.get_all_profiles()