from fastapi import FastAPI, HTTPException from fastapi.responses import RedirectResponse from fastapi.responses import JSONResponse from pydantic import BaseModel, Field from uuid import UUID, uuid4 import requests app = FastAPI(title="Document service") product_url = 'http://product_server:8009' # Добавили автогенерацию уникального идентификатора class Document(BaseModel): uuid_: UUID = Field(default_factory=uuid4) title: str | None content: str | None manager: str | None # Наше хранилище данных # Пару id указываем явно, остальные генерируются случайно DATA_LIST: list[Document] = [ Document(uuid_="4a3f30c3-823f-4278-8f98-76177ad083bd", title="Document 1", content="Content 1", manager="Manager 1"), Document(uuid_="9c7f1ecb-1aac-4337-bcd0-f863cc73aeb0", title="Document 2", content="Content 2", manager="Manager 2"), Document(title="Document 3", content="Content 3", manager="Manager 3"), Document(title="Document 4", content="Content 4", manager="Manager 4"), ] @app.get("/") async def redirect_to_docs(): return RedirectResponse(url="/docs") @app.get("/documents/all/", tags=["Document"]) def all_documents(): return DATA_LIST @app.get("/documents/{document_id}", tags=["Document"]) def get_document(document_id: UUID): document = next((x for x in DATA_LIST if x.uuid_ == document_id), None) if not document: return HTTPException(status_code=404, detail="Документ не найден") return document @app.get("/documents/full/{document_id}", tags=["Document"]) def get_full_document(document_id: UUID): document = next((x for x in DATA_LIST if x.uuid_ == document_id), None) if not document: return HTTPException(status_code=404, detail="Продукт не найден") result_dict = document.model_dump() if type(result_dict['uuid_']) is UUID: products = requests.get(f"{product_url}/products/list/documents/{document_id}") if not products: return HTTPException(status_code=404, detail="Продукты не найдены") result_dict["products"] = products.json() return result_dict @app.post("/documents/", tags=["Document"]) def create_document(title: str, content: str, manager: str): document = Document(title=title, content=content, manager=manager) try: DATA_LIST.append(document) return JSONResponse(content={"message": "Успешное создание документа"}, status_code=200) except Exception as e: return HTTPException(status_code=404, detail={"Неудачная попытка добавления документа": str(e)}) @app.put("/documents/{document_id}", tags=["Document"]) def update_document(document_id: UUID, title: str = None, content: str = None, manager: str = None): document = get_document(document_id) if type(document) is Document: index = DATA_LIST.index(document) if title: DATA_LIST[index].title = title if content: DATA_LIST[index].content = content if manager: DATA_LIST[index].manager = manager return JSONResponse(content={"message": "Успешное обновление документа"}, status_code=201) else: return HTTPException(status_code=404, detail=document) @app.delete("/documents/{document_id}", tags=["Document"]) def delete_document(document_id: UUID): document = get_document(document_id) if type(document) is Document: index = DATA_LIST.index(document) print(index) del DATA_LIST[index] return JSONResponse(content={"message": "Успешное удаление документа"}, status_code=201) return HTTPException(status_code=404, detail=document) if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8008)