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 ..models.request import Request
from ..schemas.request import RequestCreate from ..schemas.request import RequestCreate
from ..utils.loggers import request_logger from ..utils.loggers import request_logger
from typing import List, Optional
def create_request(db: Session, request: RequestCreate): def create_request(db: Session, request: RequestCreate):
"""Create new request""" """Create new request"""
@@ -55,4 +56,22 @@ def get_request_details(db: Session, request_id: int):
"description": request.description, "description": request.description,
"status": request.status, "status": request.status,
"created_at": request.created_at.isoformat() "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""" """Admin routes"""
from fastapi import APIRouter, Depends, HTTPException from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from typing import List
from ..database import get_db from ..database import get_db
from ..crud import statistics, requests from .. import crud, schemas
from ..utils.loggers import request_logger from ..utils.auth import get_current_admin
router = APIRouter() 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}") request_logger.error(f"Error getting statistics: {e}")
raise HTTPException(status_code=500, detail="Ошибка при получении статистики") raise HTTPException(status_code=500, detail="Ошибка при получении статистики")
@router.get("/requests") @router.get("/requests", response_model=List[schemas.Request])
async def get_all_requests(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)): async def get_all_requests(
"""Get all requests with employee details""" skip: int = 0,
limit: int = 100,
db: Session = Depends(get_db),
_: dict = Depends(get_current_admin)
):
"""
Получить список всех заявок (только для админа)
"""
try: 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: except Exception as e:
request_logger.error(f"Error getting requests: {e}") print(f"Error getting requests: {str(e)}")
raise HTTPException(status_code=500, detail="Ошибка при получении заявок") 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 WORKDIR /app
# Устанавливаем зависимости для сборки
RUN apk add --no-cache python3 make g++
# Копируем только файлы для установки зависимостей # Копируем только файлы для установки зависимостей
COPY frontend/package*.json ./ COPY frontend/package*.json ./
# Устанавливаем зависимости с кэшированием # Устанавливаем зависимости
RUN --mount=type=cache,target=/root/.npm \ RUN npm install --production
npm install
# Копируем остальные файлы проекта # Копируем остальные файлы проекта
COPY frontend/ . COPY frontend/ .
# Собираем приложение с кэшированием # Собираем приложение
RUN --mount=type=cache,target=/root/.npm \ RUN npm run build
npm run build
# Production stage # Production stage
FROM nginx:alpine FROM nginx:alpine
# Устанавливаем certbot и необходимые пакеты # Устанавливаем certbot
RUN apk add --no-cache certbot certbot-nginx RUN apk add --no-cache certbot certbot-nginx
# Копируем конфигурацию nginx # Копируем конфигурацию nginx и собранные файлы
COPY docker/frontend/nginx.conf /etc/nginx/conf.d/default.conf 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 COPY --from=build /app/dist /usr/share/nginx/html
# Создаем директории для Let's Encrypt # Копируем скрипт SSL и создаем директории
RUN mkdir -p /var/www/certbot /etc/letsencrypt 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 EXPOSE 80 443