diff --git a/.DS_Store b/.DS_Store index 248e563..00dfbbc 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/app.zip b/app.zip new file mode 100644 index 0000000..a922943 Binary files /dev/null and b/app.zip differ diff --git a/app/api/endpoints/meetings.py b/app/api/endpoints/meetings.py index 6dc17ea..3f80b93 100644 --- a/app/api/endpoints/meetings.py +++ b/app/api/endpoints/meetings.py @@ -42,8 +42,8 @@ def get_meetings(current_user: dict = Depends(get_current_user), user_id: Option cursor = connection.cursor(dictionary=True) base_query = ''' SELECT m.meeting_id, m.title, m.meeting_time, m.summary, m.created_at, m.tags, - m.user_id as creator_id, u.caption as creator_username - FROM meetings m JOIN users u ON m.user_id = u.user_id + m.user_id as creator_id, u.caption as creator_username, af.file_path as audio_file_path + FROM meetings m JOIN users u ON m.user_id = u.user_id LEFT JOIN audio_files af ON m.meeting_id = af.meeting_id ''' if user_id: query = f'{base_query} LEFT JOIN attendees a ON m.meeting_id = a.meeting_id WHERE m.user_id = %s OR a.user_id = %s GROUP BY m.meeting_id ORDER BY m.meeting_time DESC, m.created_at DESC' @@ -61,8 +61,8 @@ def get_meetings(current_user: dict = Depends(get_current_user), user_id: Option tags = _process_tags(cursor, meeting.get('tags')) meeting_list.append(Meeting( meeting_id=meeting['meeting_id'], title=meeting['title'], meeting_time=meeting['meeting_time'], - summary=meeting['summary'], created_at=meeting['created_at'], attendees=attendees, - creator_id=meeting['creator_id'], creator_username=meeting['creator_username'], tags=tags + summary=meeting['summary'], created_at=meeting['created_at'], audio_file_path=meeting['audio_file_path'], + attendees=attendees, creator_id=meeting['creator_id'], creator_username=meeting['creator_username'], tags=tags )) return create_api_response(code="200", message="获取会议列表成功", data=meeting_list) diff --git a/app/api/endpoints/users.py b/app/api/endpoints/users.py index a6e1fe6..d08a7f2 100644 --- a/app/api/endpoints/users.py +++ b/app/api/endpoints/users.py @@ -1,4 +1,5 @@ from fastapi import APIRouter, Depends +from typing import Optional from app.models.models import UserInfo, PasswordChangeRequest, UserListResponse, CreateUserRequest, UpdateUserRequest, RoleInfo from app.core.database import get_db_connection from app.core.auth import get_current_user @@ -146,14 +147,21 @@ def reset_password(user_id: int, current_user: dict = Depends(get_current_user)) return create_api_response(code="200", message=f"用户 {user_id} 的密码已重置") @router.get("/users") -def get_all_users(page: int = 1, size: int = 10, current_user: dict = Depends(get_current_user)): +def get_all_users(page: int = 1, size: int = 10, role_id: Optional[int] = None, current_user: dict = Depends(get_current_user)): with get_db_connection() as connection: cursor = connection.cursor(dictionary=True) - cursor.execute("SELECT COUNT(*) as total FROM users") + count_query = "SELECT COUNT(*) as total FROM users" + params = [] + if role_id is not None: + count_query += " WHERE role_id = %s" + params.append(role_id) + + cursor.execute(count_query, tuple(params)) total = cursor.fetchone()['total'] offset = (page - 1) * size + query = ''' SELECT u.user_id, u.username, u.caption, u.email, u.created_at, u.role_id, @@ -162,10 +170,21 @@ def get_all_users(page: int = 1, size: int = 10, current_user: dict = Depends(ge (SELECT COUNT(*) FROM attendees WHERE user_id = u.user_id) as meetings_attended FROM users u LEFT JOIN roles r ON u.role_id = r.role_id + ''' + + query_params = [] + if role_id is not None: + query += " WHERE u.role_id = %s" + query_params.append(role_id) + + query += ''' ORDER BY u.user_id ASC LIMIT %s OFFSET %s ''' - cursor.execute(query, (size, offset)) + + query_params.extend([size, offset]) + + cursor.execute(query, tuple(query_params)) users = cursor.fetchall() user_list = [UserInfo(**user) for user in users]