feat: implement admin panel functionality in Mini App
- Added new API endpoints for admin features: `GET /api/admin/me`, `GET /api/admin/users`, and `PATCH /api/admin/duties/:id` to manage user duties. - Introduced `UserForAdmin` and `AdminDutyReassignBody` schemas for handling admin-related data. - Updated documentation to include Mini App design guidelines and admin panel functionalities. - Enhanced tests for admin API to ensure proper access control and functionality. - Improved error handling and localization for admin actions.
This commit is contained in:
@@ -322,6 +322,61 @@ def delete_duties_in_range(
|
||||
return count
|
||||
|
||||
|
||||
def get_duty_by_id(session: Session, duty_id: int) -> Duty | None:
|
||||
"""Return duty by primary key.
|
||||
|
||||
Args:
|
||||
session: DB session.
|
||||
duty_id: Duty id (duties.id).
|
||||
|
||||
Returns:
|
||||
Duty or None if not found.
|
||||
"""
|
||||
return session.get(Duty, duty_id)
|
||||
|
||||
|
||||
def update_duty_user(
|
||||
session: Session,
|
||||
duty_id: int,
|
||||
new_user_id: int,
|
||||
*,
|
||||
commit: bool = True,
|
||||
) -> Duty | None:
|
||||
"""Update the assigned user of a duty.
|
||||
|
||||
Args:
|
||||
session: DB session.
|
||||
duty_id: Duty id (duties.id).
|
||||
new_user_id: New user id (users.id).
|
||||
commit: If True, commit immediately. If False, caller commits.
|
||||
|
||||
Returns:
|
||||
Updated Duty or None if duty not found.
|
||||
"""
|
||||
duty = session.get(Duty, duty_id)
|
||||
if duty is None:
|
||||
return None
|
||||
duty.user_id = new_user_id
|
||||
if commit:
|
||||
session.commit()
|
||||
session.refresh(duty)
|
||||
else:
|
||||
session.flush()
|
||||
return duty
|
||||
|
||||
|
||||
def get_users_for_admin(session: Session) -> list[User]:
|
||||
"""Return all users ordered by full_name for admin dropdown (id, full_name, username).
|
||||
|
||||
Args:
|
||||
session: DB session.
|
||||
|
||||
Returns:
|
||||
List of User instances ordered by full_name.
|
||||
"""
|
||||
return session.query(User).order_by(User.full_name).all()
|
||||
|
||||
|
||||
def get_duties(
|
||||
session: Session,
|
||||
from_date: str,
|
||||
|
||||
Reference in New Issue
Block a user