1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00
Files
AdministrationItDepartmens/backend/app/api/endpoints/admin.py
2025-01-05 05:57:42 +06:00

94 lines
2.8 KiB
Python

"""Admin router"""
from fastapi import APIRouter, Depends, HTTPException, status
from sqlalchemy.orm import Session
from sqlalchemy import func
from typing import List
from datetime import datetime, timedelta
from app.database import get_db
from app.models.user import User
from app.models.request import Request
from app.core.auth import get_current_user
from app.schemas.request import RequestCreate, Request as RequestSchema
from app.schemas.user import User as UserSchema
router = APIRouter()
@router.get("/statistics")
def get_statistics(
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""Get system statistics"""
if not current_user.is_admin:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Not enough permissions"
)
# Общая статистика
total_requests = db.query(func.count(Request.id)).scalar()
total_users = db.query(func.count(User.id)).filter(User.is_admin == False).scalar()
# Статистика по статусам
status_stats = db.query(
Request.status,
func.count(Request.id)
).group_by(Request.status).all()
# Статистика за последние 7 дней
week_ago = datetime.utcnow() - timedelta(days=7)
daily_stats = db.query(
func.date(Request.created_at),
func.count(Request.id)
).filter(
Request.created_at >= week_ago
).group_by(
func.date(Request.created_at)
).all()
return {
"total_requests": total_requests,
"total_users": total_users,
"status_stats": {
status: count for status, count in status_stats
},
"daily_stats": {
date.strftime("%Y-%m-%d"): count
for date, count in daily_stats
}
}
@router.get("/requests", response_model=List[RequestSchema])
def get_all_requests(
skip: int = 0,
limit: int = 100,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""Get all requests (admin only)"""
if not current_user.is_admin:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Not enough permissions"
)
requests = db.query(Request).offset(skip).limit(limit).all()
return requests
@router.get("/users", response_model=List[UserSchema])
def get_all_users(
skip: int = 0,
limit: int = 100,
current_user: User = Depends(get_current_user),
db: Session = Depends(get_db)
):
"""Get all users (admin only)"""
if not current_user.is_admin:
raise HTTPException(
status_code=status.HTTP_403_FORBIDDEN,
detail="Not enough permissions"
)
users = db.query(User).filter(User.is_admin == False).offset(skip).limit(limit).all()
return users