Testys commited on
Commit
37c6354
·
1 Parent(s): cac5e30

Fix on auth password

Browse files
Files changed (1) hide show
  1. src/crud/users.py +62 -36
src/crud/users.py CHANGED
@@ -5,56 +5,82 @@ from sqlalchemy.orm import Session
5
  from fastapi import HTTPException, status
6
 
7
  from src import models
8
- from src.auth import get_password_hash # Assuming this is in your auth file
9
-
10
- def get_user_by_id(db: Session, user_id: int) -> models.User | None:
11
- """Fetches a user by their primary key ID."""
12
- return db.query(models.User).filter(models.User.id == user_id).first()
13
 
14
  def get_user_by_username(db: Session, username: str) -> models.User | None:
15
- """Fetches a user by their unique username."""
 
 
16
  return db.query(models.User).filter(models.User.username == username).first()
17
 
18
- def get_user_by_tag_id(db: Session, tag_id: str) -> models.User | None:
19
- """Fetches a user by their RFID tag ID."""
20
- return db.query(models.User).filter(models.User.tag_id == tag_id).first()
 
 
 
 
 
 
 
 
21
 
22
- def create_user(db: Session, user: models.UserCreate) -> models.User:
23
- """Creates a new user in the database."""
24
- if get_user_by_username(db, user.username):
 
 
 
 
25
  raise HTTPException(
26
- status_code=status.HTTP_409_CONFLICT,
27
- detail=f"Username '{user.username}' is already registered."
28
  )
29
- hashed_password = get_password_hash(user.password)
30
- new_user = models.User(
31
- username=user.username,
 
 
 
 
 
32
  hashed_password=hashed_password,
33
- role=user.role,
34
- department=user.department,
35
- tag_id=user.tag_id
 
36
  )
37
- db.add(new_user)
 
38
  db.commit()
39
- db.refresh(new_user)
40
- return new_user
 
41
 
42
- def update_user_tag_id(db: Session, username: str, tag_id: str) -> models.User:
43
- """Updates the RFID tag ID for a specific user."""
44
- db_user = get_user_by_username(db, username)
 
 
45
  if not db_user:
46
- raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
47
-
48
- existing_tag_user = get_user_by_tag_id(db, tag_id)
49
- if existing_tag_user and existing_tag_user.username != username:
50
- raise HTTPException(
51
- status_code=status.HTTP_409_CONFLICT,
52
- detail=f"Tag ID '{tag_id}' is already assigned to another user."
53
  )
54
-
55
- db_user.tag_id = tag_id
 
 
 
 
 
 
 
 
 
56
  db.commit()
57
  db.refresh(db_user)
 
58
  return db_user
59
 
60
  def delete_user(db: Session, username_to_delete: str, current_admin: models.User) -> models.User:
@@ -90,4 +116,4 @@ def delete_user(db: Session, username_to_delete: str, current_admin: models.User
90
  db.delete(user_to_delete)
91
  db.commit()
92
 
93
- return user_to_delete
 
5
  from fastapi import HTTPException, status
6
 
7
  from src import models
8
+ from src.crud import hash_password # Import from crud module instead of auth
 
 
 
 
9
 
10
  def get_user_by_username(db: Session, username: str) -> models.User | None:
11
+ """
12
+ Retrieves a user by their username.
13
+ """
14
  return db.query(models.User).filter(models.User.username == username).first()
15
 
16
+ def get_user_by_id(db: Session, user_id: int) -> models.User | None:
17
+ """
18
+ Retrieves a user by their ID.
19
+ """
20
+ return db.query(models.User).filter(models.User.id == user_id).first()
21
+
22
+ def get_all_users(db: Session, skip: int = 0, limit: int = 100) -> list[models.User]:
23
+ """
24
+ Retrieves all users with pagination.
25
+ """
26
+ return db.query(models.User).offset(skip).limit(limit).all()
27
 
28
+ def create_user(db: Session, user_data: models.UserCreate) -> models.User:
29
+ """
30
+ Creates a new user account.
31
+ """
32
+ # Check if username already exists
33
+ existing_user = get_user_by_username(db, user_data.username)
34
+ if existing_user:
35
  raise HTTPException(
36
+ status_code=status.HTTP_400_BAD_REQUEST,
37
+ detail=f"Username '{user_data.username}' is already registered."
38
  )
39
+
40
+ # Hash the password
41
+ hashed_password = hash_password(user_data.password) # Use the imported function
42
+
43
+ # Create new user
44
+ db_user = models.User(
45
+ username=user_data.username,
46
+ name=user_data.name,
47
  hashed_password=hashed_password,
48
+ role=user_data.role,
49
+ department=user_data.department,
50
+ tag_id=user_data.tag_id,
51
+ is_active=user_data.is_active if user_data.is_active is not None else True
52
  )
53
+
54
+ db.add(db_user)
55
  db.commit()
56
+ db.refresh(db_user)
57
+
58
+ return db_user
59
 
60
+ def update_user(db: Session, user_id: int, user_update: models.UserCreate) -> models.User:
61
+ """
62
+ Updates an existing user.
63
+ """
64
+ db_user = get_user_by_id(db, user_id)
65
  if not db_user:
66
+ raise HTTPException(
67
+ status_code=status.HTTP_404_NOT_FOUND,
68
+ detail=f"User with ID {user_id} not found."
 
 
 
 
69
  )
70
+
71
+ # Update fields
72
+ db_user.username = user_update.username
73
+ db_user.name = user_update.name
74
+ if user_update.password: # Only update password if provided
75
+ db_user.hashed_password = hash_password(user_update.password)
76
+ db_user.role = user_update.role
77
+ db_user.department = user_update.department
78
+ db_user.tag_id = user_update.tag_id
79
+ db_user.is_active = user_update.is_active if user_update.is_active is not None else True
80
+
81
  db.commit()
82
  db.refresh(db_user)
83
+
84
  return db_user
85
 
86
  def delete_user(db: Session, username_to_delete: str, current_admin: models.User) -> models.User:
 
116
  db.delete(user_to_delete)
117
  db.commit()
118
 
119
+ return user_to_delete