1234
This commit is contained in:
2
server/api/README.md
Normal file
2
server/api/README.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# api
|
||||
api-copp
|
||||
20
server/api/config_kafka.py
Normal file
20
server/api/config_kafka.py
Normal 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
15
server/api/dockerfile
Normal 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
9
server/api/main.py
Normal 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)
|
||||
13
server/api/model_messege.py
Normal file
13
server/api/model_messege.py
Normal 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
|
||||
6
server/api/requirements.txt
Normal file
6
server/api/requirements.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
fastapi
|
||||
uvicorn
|
||||
kafka-python
|
||||
python-dotenv
|
||||
redis
|
||||
httpx
|
||||
43
server/api/router.py
Normal file
43
server/api/router.py
Normal 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()
|
||||
Reference in New Issue
Block a user