from abc import ABC, abstractmethod from typing import Dict, Any from utils.claude_client import ClaudeClient class BaseDesigner(ABC): """Abstract base class for all technology designers""" def __init__(self): self.claude_client = ClaudeClient() @abstractmethod async def design_architecture(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design architecture for specific technology""" pass @abstractmethod def get_technology_name(self) -> str: """Get the technology this designer specializes in""" pass class BaseFrontendDesigner(BaseDesigner): """Base class for frontend technology designers""" @abstractmethod async def design_components(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design frontend components""" pass @abstractmethod async def design_routing(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design routing structure""" pass @abstractmethod async def design_state_management(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design state management""" pass class BaseBackendDesigner(BaseDesigner): """Base class for backend technology designers""" @abstractmethod async def design_api_endpoints(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design API endpoints""" pass @abstractmethod async def design_middleware(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design middleware chain""" pass @abstractmethod async def design_services(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design service layer""" pass class BaseDatabaseDesigner(BaseDesigner): """Base class for database technology designers""" @abstractmethod async def design_schema(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design database schema""" pass @abstractmethod async def design_indexes(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design database indexes""" pass @abstractmethod async def design_relationships(self, context: Dict[str, Any]) -> Dict[str, Any]: """Design table relationships""" pass