diff --git a/backend/api/Documents-service/src/models/document.py b/backend/api/Documents-service/src/models/document.py index 82d8c25..7bcc58c 100644 --- a/backend/api/Documents-service/src/models/document.py +++ b/backend/api/Documents-service/src/models/document.py @@ -1,8 +1,3 @@ -from sqlalchemy import Column, Integer, String - -from database import Base - - class Document(Base): __tablename__ = "documents" diff --git a/backend/api/Documents-service/src/models/document_schema.py b/backend/api/Documents-service/src/models/document_schema.py index ac12019..48493be 100644 --- a/backend/api/Documents-service/src/models/document_schema.py +++ b/backend/api/Documents-service/src/models/document_schema.py @@ -1,20 +1,18 @@ -from typing import Optional - -from pydantic import BaseModel class DocumentBase(BaseModel): title: str content: str author: Optional[str] = None - - + + class DocumentCreate(DocumentBase): pass - + class Document(DocumentBase): id: int class Config: orm_mode = True + \ No newline at end of file diff --git a/backend/api/ExternalTools-service/adapters/__init__.py b/backend/api/ExternalTools-service/adapters/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/backend/api/ExternalTools-service/adapters/ai.py b/backend/api/ExternalTools-service/adapters/ai.py new file mode 100644 index 0000000..01c832f --- /dev/null +++ b/backend/api/ExternalTools-service/adapters/ai.py @@ -0,0 +1,8 @@ +from .manager import ExternalTool + + +class AIServiceAdapter(ExternalTool): + def execute(self, data): + # Lógica de IA simulada + content = data.get("content", "") + return {"summary": content[:100], "sentiment": "positive"} diff --git a/backend/api/ExternalTools-service/adapters/manager.py b/backend/api/ExternalTools-service/adapters/manager.py new file mode 100644 index 0000000..da951f4 --- /dev/null +++ b/backend/api/ExternalTools-service/adapters/manager.py @@ -0,0 +1,13 @@ +from abc import ABC, abstractmethod +from typing import Any + + +class ExternalTool(ABC): + @abstractmethod + def execute(self, data: Any) -> dict: + pass + + +class ExternalToolManager: + def use_tool(self, tool: ExternalTool, data: Any) -> dict: + return tool.execute(data) diff --git a/backend/api/ExternalTools-service/adapters/payment.py b/backend/api/ExternalTools-service/adapters/payment.py new file mode 100644 index 0000000..26548e7 --- /dev/null +++ b/backend/api/ExternalTools-service/adapters/payment.py @@ -0,0 +1,8 @@ +from .manager import ExternalTool + + +class PaymentAdapter(ExternalTool): + def execute(self, data): + # Logica simulada de procesamiento de pago + amount = data.get("amount", 0) + return {"status": "success", "charged": amount} diff --git a/backend/api/ExternalTools-service/adapters/storage.py b/backend/api/ExternalTools-service/adapters/storage.py new file mode 100644 index 0000000..a17ad38 --- /dev/null +++ b/backend/api/ExternalTools-service/adapters/storage.py @@ -0,0 +1,8 @@ +from .manager import ExternalTool + + +class CloudStorageAdapter(ExternalTool): + def execute(self, data): + # Logica simulada de URL de almacenamiento + filename = data.get("filename", "file.txt") + return {"url": f"https://storage.example.com/{filename}"} diff --git a/backend/api/ExternalTools-service/main.py b/backend/api/ExternalTools-service/main.py new file mode 100644 index 0000000..549ab37 --- /dev/null +++ b/backend/api/ExternalTools-service/main.py @@ -0,0 +1,36 @@ +from fastapi import FastAPI, Depends, HTTPException +from adapters.ai import AIServiceAdapter +from adapters.payment import PaymentAdapter +from adapters.storage import CloudStorageAdapter +from adapters.manager import ExternalToolManager +from fastapi.security import HTTPBasic, HTTPBasicCredentials + + +app = FastAPI() +security = HTTPBasic() + + +def require_auth(credentials: HTTPBasicCredentials = Depends(security)): + if credentials.username != "admin" or credentials.password != "123": + raise HTTPException(status_code=401, detail="Unauthorized") + + +@app.post("/analyze") +def analyze(data: dict, _=Depends(require_auth)): + tool = AIServiceAdapter() + manager = ExternalToolManager() + return manager.use_tool(tool, data) + + +@app.post("/pay") +def pay(data: dict, _=Depends(require_auth)): + tool = PaymentAdapter() + manager = ExternalToolManager() + return manager.use_tool(tool, data) + + +@app.get("/storage-url") +def get_storage_url(filename: str, _=Depends(require_auth)): + tool = CloudStorageAdapter() + manager = ExternalToolManager() + return manager.use_tool(tool, {"filename": filename})