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 ..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()
|
||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user