This commit is contained in:
dv 2026-03-26 00:34:03 +03:00
parent 074ca16f7c
commit d3dc448552
10 changed files with 37 additions and 33 deletions

8
.dockerignore Normal file
View file

@ -0,0 +1,8 @@
__pycache__/
**/__pycache__/
*.pyc
*.pyo
.env
data/
*.db
.git/

View file

@ -1,20 +1,15 @@
FROM python:3.12-slim
FROM python:3.11-slim
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
WORKDIR /app
# Устанавливаем maxapi из локального источника
# (build context = родительская папка caps/)
COPY maxapi-main/ /maxapi-main/
RUN pip install --no-cache-dir /maxapi-main/
# Устанавливаем зависимости приложения
COPY support_bot/requirements.txt ./requirements.txt
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копируем исходный код
COPY support_bot/ .
COPY . .
# Папка для SQLite-файла
RUN mkdir -p /app/data
EXPOSE 8080

View file

@ -23,9 +23,9 @@ async def list_bot_users(
)
orgs = await get_all_organizations()
return templates.TemplateResponse(
"bot_users/list.html",
{
"request": request,
request=request,
name="bot_users/list.html",
context={
"users": users,
"orgs": orgs,
"filter_authorized": is_authorized,

View file

@ -12,7 +12,7 @@ router = APIRouter(prefix="/chat-log", dependencies=[Depends(require_admin)])
async def chat_list(request: Request):
chats = await get_chat_list()
return templates.TemplateResponse(
"chat_log/list.html", {"request": request, "chats": chats}
request=request, name="chat_log/list.html", context={"chats": chats}
)
@ -20,6 +20,7 @@ async def chat_list(request: Request):
async def chat_history(request: Request, max_user_id: int):
messages = await get_message_log(max_user_id=max_user_id, limit=200)
return templates.TemplateResponse(
"chat_log/history.html",
{"request": request, "messages": messages, "max_user_id": max_user_id},
request=request,
name="chat_log/history.html",
context={"messages": messages, "max_user_id": max_user_id},
)

View file

@ -28,8 +28,9 @@ async def list_org_users(request: Request, org_id: int | None = None):
users = await get_org_users(org_id=org_id)
orgs = await get_all_organizations()
return templates.TemplateResponse(
"org_users/list.html",
{"request": request, "users": users, "orgs": orgs, "filter_org_id": org_id},
request=request,
name="org_users/list.html",
context={"users": users, "orgs": orgs, "filter_org_id": org_id},
)
@ -37,7 +38,7 @@ async def list_org_users(request: Request, org_id: int | None = None):
async def create_org_user_form(request: Request):
orgs = await get_all_organizations()
return templates.TemplateResponse(
"org_users/create.html", {"request": request, "orgs": orgs}
request=request, name="org_users/create.html", context={"orgs": orgs}
)

View file

@ -19,13 +19,13 @@ router = APIRouter(prefix="/orgs", dependencies=[Depends(require_admin)])
async def list_orgs(request: Request):
orgs = await get_all_organizations()
return templates.TemplateResponse(
"orgs/list.html", {"request": request, "orgs": orgs}
request=request, name="orgs/list.html", context={"orgs": orgs}
)
@router.get("/create", response_class=HTMLResponse)
async def create_org_form(request: Request):
return templates.TemplateResponse("orgs/create.html", {"request": request})
return templates.TemplateResponse(request=request, name="orgs/create.html", context={})
@router.post("/create")
@ -39,7 +39,7 @@ async def create_org(name: str = Form(...)):
async def edit_org_form(request: Request, org_id: int):
org = await get_organization(org_id)
return templates.TemplateResponse(
"orgs/edit.html", {"request": request, "org": org}
request=request, name="orgs/edit.html", context={"org": org}
)

View file

@ -19,9 +19,9 @@ async def list_tickets(
tickets = await get_all_tickets(org_id=org_id, status=status)
orgs = await get_all_organizations()
return templates.TemplateResponse(
"tickets/list.html",
{
"request": request,
request=request,
name="tickets/list.html",
context={
"tickets": tickets,
"orgs": orgs,
"filter_org_id": org_id,
@ -35,8 +35,9 @@ async def ticket_detail(request: Request, ticket_id: int):
ticket = await get_ticket(ticket_id)
attachments = await get_attachments(ticket_id)
return templates.TemplateResponse(
"tickets/detail.html",
{"request": request, "ticket": ticket, "attachments": attachments},
request=request,
name="tickets/detail.html",
context={"ticket": ticket, "attachments": attachments},
)

Binary file not shown.

Binary file not shown.

View file

@ -1,14 +1,12 @@
services:
support_bot:
build:
context: .. # родительская папка caps/ — нужна для доступа к maxapi-main/
dockerfile: support_bot/Dockerfile
build: .
env_file: .env
environment:
DB_PATH: /app/data/support.db # переопределяем путь внутри контейнера
DB_PATH: /app/data/support.db
ADMIN_HOST: "0.0.0.0"
ports:
- "${ADMIN_PORT:-8080}:8080"
volumes:
- ./data:/app/data # SQLite-файл живёт здесь — данные сохраняются между перезапусками
- ./data:/app/data
restart: unless-stopped