IMPROVE: cho phép lưu dự án và phục hồi dự án vừa tắt

This commit is contained in:
2026-07-30 20:47:44 +07:00
parent 313d1be5af
commit 58a294d845
7 changed files with 1071 additions and 18 deletions
+30 -1
View File
@@ -20,6 +20,12 @@ class UpdateUserRoleRequest(BaseModel):
role: str # 'admin', 'standard', 'premium'
is_active: Optional[bool] = True
class CreateUserRequest(BaseModel):
username: str
email: str
password: str
role: Optional[str] = 'standard'
@router.get("/users")
async def list_users(admin: dict = Depends(require_admin)):
conn = get_db_connection()
@@ -52,6 +58,29 @@ async def list_users(admin: dict = Depends(require_admin)):
})
return users
@router.post("/users")
async def create_user(req: CreateUserRequest, admin: dict = Depends(require_admin)):
import uuid, time
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute("SELECT id FROM users WHERE username = ? OR email = ?", (req.username, req.email))
if cursor.fetchone():
conn.close()
raise HTTPException(status_code=409, detail="Tên đăng nhập hoặc email đã tồn tại")
user_id = str(uuid.uuid4())
hashed = hash_password(req.password)
now = time.time()
cursor.execute("""
INSERT INTO users (id, username, email, hashed_password, role, must_change_password, created_at, is_active)
VALUES (?, ?, ?, ?, ?, 1, ?, 1)
""", (user_id, req.username, req.email, hashed, req.role, now))
cursor.execute("""
INSERT INTO user_quotas (user_id, storage_limit_mb, max_tracks) VALUES (?, 500, 16)
""", (user_id,))
conn.commit()
conn.close()
return {"message": f"Đã tạo người dùng '{req.username}' thành công", "user_id": user_id}
@router.put("/users/{user_id}/role")
async def update_user_role(user_id: str, req: UpdateUserRoleRequest, admin: dict = Depends(require_admin)):
conn = get_db_connection()
@@ -81,7 +110,7 @@ async def delete_user(user_id: str, admin: dict = Depends(require_admin)):
conn = get_db_connection()
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE id = ?", (user_id,))
cursor.execute("DELETE FROM user_quotas WHERE id = ?", (user_id,))
cursor.execute("DELETE FROM user_quotas WHERE user_id = ?", (user_id,))
cursor.execute("DELETE FROM projects WHERE user_id = ?", (user_id,))
conn.commit()
conn.close()