File size: 3,060 Bytes
fc76af0
60cc4ec
fc76af0
 
 
60cc4ec
636144f
60cc4ec
fc76af0
 
60cc4ec
fc76af0
 
 
60cc4ec
fc76af0
 
 
 
60cc4ec
fc76af0
 
 
 
 
 
 
60cc4ec
fc76af0
 
60cc4ec
 
 
 
 
 
 
fc76af0
60cc4ec
 
 
 
 
fc76af0
60cc4ec
 
 
 
 
fc76af0
60cc4ec
fc76af0
 
60cc4ec
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fc76af0
60cc4ec
fc76af0
60cc4ec
 
 
 
fc76af0
 
60cc4ec
 
 
 
 
 
 
 
 
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from users.models import User, UserEmbeddings
from fastapi import HTTPException
from core.security import get_password_hash
from datetime import datetime
from sqlalchemy.orm import Session
from users.schemas import UserCreate, UserUpdate, UserEmbeddingsBase

async def create_user_account(data: UserCreate, db: Session):
    user = db.query(User).filter(User.email == data.email).first()
    if user:
        raise HTTPException(status_code=400, detail="Email already registered")
    
    new_user = User(
        email=data.email,
        username=data.username,
        first_name=data.first_name,
        last_name=data.last_name,
        age=data.age,
        preferences=data.preferences,
        hashed_password=get_password_hash(data.password),
    )

    db.add(new_user)
    db.commit()
    db.refresh(new_user)
    return new_user

async def create_user_embeddings(user_id: int, embeddings: UserEmbeddingsBase, db: Session):
    user = db.query(User).filter(User.id == user_id).first()
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    
    db_embeddings = UserEmbeddings(user_id=user_id, embeddings=embeddings.embeddings)
    db.add(db_embeddings)
    db.commit()
    db.refresh(db_embeddings)
    return db_embeddings

def get_user_by_id(user_id: int, db: Session):
    user = db.query(User).filter(User.id == user_id).first()
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user

def get_user_by_email(email: str, db: Session):
    user = db.query(User).filter(User.email == email).first()
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    return user

def get_users(db: Session, skip: int = 0, limit: int = 100):
    return db.query(User).offset(skip).limit(limit).all()

def update_user(db: Session, user_id: int, user: UserUpdate):
    db_user = db.query(User).filter(User.id == user_id).first()
    if not db_user:
        raise HTTPException(status_code=404, detail="User not found")
    
    update_data = user.dict(exclude_unset=True)
    if 'password' in update_data:
        update_data['hashed_password'] = get_password_hash(update_data['password'])
        del update_data['password']
    
    for key, value in update_data.items():
        setattr(db_user, key, value)
    
    db.commit()
    db.refresh(db_user)
    return db_user

def delete_user(user_id: int, db: Session):
    user = db.query(User).filter(User.id == user_id).first()
    if not user:
        raise HTTPException(status_code=404, detail="User not found")
    db.delete(user)
    db.commit()
    return user

async def update_user_embeddings(user_id: int, embeddings: UserEmbeddingsBase, db: Session):
    db_embeddings = db.query(UserEmbeddings).filter(UserEmbeddings.user_id == user_id).first()
    if not db_embeddings:
        raise HTTPException(status_code=404, detail="User embeddings not found")
    
    db_embeddings.embeddings = embeddings.embeddings
    db.commit()
    db.refresh(db_embeddings)
    return db_embeddings