This commit is contained in:
jze9
2025-04-01 23:27:36 +05:00
commit 4c72b79e86
49 changed files with 19305 additions and 0 deletions

2
server/api/README.md Normal file
View File

@@ -0,0 +1,2 @@
# api
api-copp

View File

@@ -0,0 +1,20 @@
from kafka import KafkaProducer,KafkaConsumer
import redis
import json
redis_client = redis.StrictRedis(host="redis", port=6379, db=0)
consumer = KafkaConsumer(
'login-topic',
bootstrap_servers='kafka:9092',
value_deserializer=lambda x: json.loads(x.decode('utf-8')),
api_version = (0,10,2),
auto_offset_reset='earliest',
group_id='0'
)
producer = KafkaProducer(
bootstrap_servers='kafka:9092',
api_version = (0,10,2),
value_serializer=lambda v: json.dumps(v).encode('utf-8')
)

15
server/api/dockerfile Normal file
View File

@@ -0,0 +1,15 @@
# Используем официальный образ Python
FROM python:3.11.8-slim AS build
# Устанавливаем рабочую директорию
WORKDIR /api
# Копируем файл с зависимостями в контейнер
COPY ./server/api/requirements.txt .
# Устанавливаем необходимые зависимости
RUN pip install -r requirements.txt
# Копируем файл с кодом в контейнер
COPY ./server/api/ .
FROM build AS final
WORKDIR /api
# Команда для запуска приложения
CMD ["python", "-u", "main.py"]

9
server/api/main.py Normal file
View File

@@ -0,0 +1,9 @@
from fastapi import FastAPI
from router import router
app = FastAPI(title="api")
app.include_router(router)
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)

View File

@@ -0,0 +1,13 @@
from pydantic import BaseModel
class collection_form(BaseModel):
login:str
data:list
class Message(BaseModel):
key: str
value: str
class Login(BaseModel):
login:str
password:str

View File

@@ -0,0 +1,6 @@
fastapi
uvicorn
kafka-python
python-dotenv
redis
httpx

43
server/api/router.py Normal file
View File

@@ -0,0 +1,43 @@
import model_messege as mm
from config_kafka import producer, consumer, redis_client
import threading
import json
from fastapi import APIRouter
import httpx
router = APIRouter(prefix="/api")
@router.post("/api/validation_collection_form")
async def validation_collection_form():
return {
"message": "Ошибка валидации формы"
}
@router.post("/api/login")
async def login(auth_request: mm.Login):
login = auth_request.login
password = auth_request.password
print(f"login: {login}, password: {password}")
# Отправляем данные в другую API
async with httpx.AsyncClient() as client:
response = await client.post("http://api-data-base:8001/api-data-base/login", json={'login': login, 'password': password})
# Проверяем статус ответа
if response.status_code == 200:
user_data = response.json()
return {
"message": "Авторизация успешна.",
"user": user_data
}
else:
return {
"message": "Ошибка авторизации",
"user": None
}
@router.on_event("shutdown")
def shutdown_event():
producer.close()