mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
оптимизация сборки фронтенда2
This commit is contained in:
@@ -3,6 +3,7 @@ from sqlalchemy.orm import Session
|
||||
from ..models.request import Request
|
||||
from ..schemas.request import RequestCreate
|
||||
from ..utils.loggers import request_logger
|
||||
from typing import List, Optional
|
||||
|
||||
def create_request(db: Session, request: RequestCreate):
|
||||
"""Create new request"""
|
||||
@@ -55,4 +56,22 @@ def get_request_details(db: Session, request_id: int):
|
||||
"description": request.description,
|
||||
"status": request.status,
|
||||
"created_at": request.created_at.isoformat()
|
||||
}
|
||||
}
|
||||
|
||||
def get_requests(db: Session, skip: int = 0, limit: int = 100) -> List[Request]:
|
||||
"""
|
||||
Получить список всех заявок с пагинацией
|
||||
"""
|
||||
return db.query(Request).offset(skip).limit(limit).all()
|
||||
|
||||
def get_request(db: Session, request_id: int) -> Optional[Request]:
|
||||
"""
|
||||
Получить заявку по ID
|
||||
"""
|
||||
return db.query(Request).filter(Request.id == request_id).first()
|
||||
|
||||
def get_employee_requests(db: Session, employee_id: int, skip: int = 0, limit: int = 100) -> List[Request]:
|
||||
"""
|
||||
Получить список заявок конкретного сотрудника
|
||||
"""
|
||||
return db.query(Request).filter(Request.employee_id == employee_id).offset(skip).limit(limit).all()
|
@@ -1,9 +1,10 @@
|
||||
"""Admin routes"""
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import List
|
||||
from ..database import get_db
|
||||
from ..crud import statistics, requests
|
||||
from ..utils.loggers import request_logger
|
||||
from .. import crud, schemas
|
||||
from ..utils.auth import get_current_admin
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
@@ -16,11 +17,33 @@ async def get_statistics(period: str = "week", db: Session = Depends(get_db)):
|
||||
request_logger.error(f"Error getting statistics: {e}")
|
||||
raise HTTPException(status_code=500, detail="Ошибка при получении статистики")
|
||||
|
||||
@router.get("/requests")
|
||||
async def get_all_requests(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
|
||||
"""Get all requests with employee details"""
|
||||
@router.get("/requests", response_model=List[schemas.Request])
|
||||
async def get_all_requests(
|
||||
skip: int = 0,
|
||||
limit: int = 100,
|
||||
db: Session = Depends(get_db),
|
||||
_: dict = Depends(get_current_admin)
|
||||
):
|
||||
"""
|
||||
Получить список всех заявок (только для админа)
|
||||
"""
|
||||
try:
|
||||
return requests.get_requests(db, skip=skip, limit=limit)
|
||||
requests = crud.requests.get_requests(db, skip=skip, limit=limit)
|
||||
return requests
|
||||
except Exception as e:
|
||||
request_logger.error(f"Error getting requests: {e}")
|
||||
raise HTTPException(status_code=500, detail="Ошибка при получении заявок")
|
||||
print(f"Error getting requests: {str(e)}")
|
||||
raise HTTPException(status_code=500, detail="Internal server error")
|
||||
|
||||
@router.get("/requests/{request_id}", response_model=schemas.Request)
|
||||
async def get_request_by_id(
|
||||
request_id: int,
|
||||
db: Session = Depends(get_db),
|
||||
_: dict = Depends(get_current_admin)
|
||||
):
|
||||
"""
|
||||
Получить заявку по ID (только для админа)
|
||||
"""
|
||||
request = crud.requests.get_request(db, request_id)
|
||||
if request is None:
|
||||
raise HTTPException(status_code=404, detail="Request not found")
|
||||
return request
|
@@ -3,41 +3,32 @@ FROM node:18-alpine as build
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# Устанавливаем зависимости для сборки
|
||||
RUN apk add --no-cache python3 make g++
|
||||
|
||||
# Копируем только файлы для установки зависимостей
|
||||
COPY frontend/package*.json ./
|
||||
|
||||
# Устанавливаем зависимости с кэшированием
|
||||
RUN --mount=type=cache,target=/root/.npm \
|
||||
npm install
|
||||
# Устанавливаем зависимости
|
||||
RUN npm install --production
|
||||
|
||||
# Копируем остальные файлы проекта
|
||||
COPY frontend/ .
|
||||
|
||||
# Собираем приложение с кэшированием
|
||||
RUN --mount=type=cache,target=/root/.npm \
|
||||
npm run build
|
||||
# Собираем приложение
|
||||
RUN npm run build
|
||||
|
||||
# Production stage
|
||||
FROM nginx:alpine
|
||||
|
||||
# Устанавливаем certbot и необходимые пакеты
|
||||
# Устанавливаем certbot
|
||||
RUN apk add --no-cache certbot certbot-nginx
|
||||
|
||||
# Копируем конфигурацию nginx
|
||||
# Копируем конфигурацию nginx и собранные файлы
|
||||
COPY docker/frontend/nginx.conf /etc/nginx/conf.d/default.conf
|
||||
|
||||
# Копируем скрипт инициализации SSL
|
||||
COPY docker/frontend/init-ssl.sh /docker-entrypoint.d/init-ssl.sh
|
||||
RUN chmod +x /docker-entrypoint.d/init-ssl.sh
|
||||
|
||||
# Копируем только собранные файлы из build stage
|
||||
COPY --from=build /app/dist /usr/share/nginx/html
|
||||
|
||||
# Создаем директории для Let's Encrypt
|
||||
RUN mkdir -p /var/www/certbot /etc/letsencrypt
|
||||
# Копируем скрипт SSL и создаем директории
|
||||
COPY docker/frontend/init-ssl.sh /docker-entrypoint.d/init-ssl.sh
|
||||
RUN chmod +x /docker-entrypoint.d/init-ssl.sh && \
|
||||
mkdir -p /var/www/certbot /etc/letsencrypt
|
||||
|
||||
EXPOSE 80 443
|
||||
|
||||
|
Reference in New Issue
Block a user