1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00

оптимизация сборки фронтенда2

This commit is contained in:
MoonTestUse1
2025-01-03 04:01:50 +06:00
parent 5327b86a7d
commit d898532154
3 changed files with 61 additions and 28 deletions

View File

@@ -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()

View File

@@ -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

View File

@@ -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