Coverage for app/crud/users.py: 100.00%
43 statements
« prev ^ index » next coverage.py v7.14.1, created at 2026-07-25 15:51 +0000
« prev ^ index » next coverage.py v7.14.1, created at 2026-07-25 15:51 +0000
1from uuid import UUID
3from sqlalchemy import or_
4from sqlalchemy.orm import Session
6from app.models import User, UserRole
7from app.schemas import UserCreate, UserUpdate
10def get_user(db: Session, user_id: UUID) -> User | None:
11 """Get user by ID"""
12 return db.query(User).filter(User.userId == user_id).first()
15def get_user_by_username(db: Session, username: str) -> User | None:
16 """Get user by username"""
17 return db.query(User).filter(User.username == username).first()
20def get_user_by_email(db: Session, email: str) -> User | None:
21 """Get user by email"""
22 return db.query(User).filter(User.email == email).first()
25def get_users(
26 db: Session,
27 skip: int = 0,
28 limit: int = 100,
29 role: UserRole | None = None,
30 course_id: UUID | None = None
31) -> list[User]:
32 """Get users with optional filters"""
33 query = db.query(User)
35 if role:
36 query = query.filter(User.role == role)
37 if course_id:
38 query = query.filter(User.courseId == course_id)
40 return query.offset(skip).limit(limit).all()
43def create_user(db: Session, user: UserCreate) -> User:
44 """Create a new user"""
45 db_user = User(
46 email=user.email,
47 username=user.username,
48 role=user.role,
49 courseId=user.courseId
50 )
51 db.add(db_user)
52 db.commit()
53 db.refresh(db_user)
54 return db_user
57def update_user(db: Session, user_id: UUID, user_update: UserUpdate) -> User | None:
58 """Update user information"""
59 db_user = get_user(db, user_id)
60 if not db_user:
61 return None
63 update_data = user_update.model_dump(exclude_unset=True)
64 for field, value in update_data.items():
65 setattr(db_user, field, value)
67 db.commit()
68 db.refresh(db_user)
69 return db_user
74def delete_user(db: Session, user_id: UUID) -> bool:
75 """Delete a user"""
76 db_user = get_user(db, user_id)
77 if not db_user:
78 return False
80 db.delete(db_user)
81 db.commit()
82 return True
85def search_users(db: Session, query: str, limit: int = 10) -> list[User]:
86 """Search users by username or email"""
87 return db.query(User).filter(
88 or_(
89 User.username.ilike(f"%{query}%"),
90 User.email.ilike(f"%{query}%")
91 )
92 ).limit(limit).all()