init2
This commit is contained in:
parent
074ca16f7c
commit
d3dc448552
10 changed files with 37 additions and 33 deletions
8
.dockerignore
Normal file
8
.dockerignore
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
__pycache__/
|
||||
**/__pycache__/
|
||||
*.pyc
|
||||
*.pyo
|
||||
.env
|
||||
data/
|
||||
*.db
|
||||
.git/
|
||||
17
Dockerfile
17
Dockerfile
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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},
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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}
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue