Merge pull request 'fix: update chart_service path from data/ to storage/' (#119) from fix/chart-service-storage-path into main
All checks were successful
Build Docker Image / build (push) Successful in 1m46s

Reviewed-on: #119
This commit is contained in:
cal 2026-03-21 02:01:55 +00:00
commit 6889499fff

View File

@ -4,6 +4,7 @@ Chart Service for managing gameplay charts and infographics.
This service handles loading, saving, and managing chart definitions This service handles loading, saving, and managing chart definitions
from the JSON configuration file. from the JSON configuration file.
""" """
import json import json
import logging import logging
from pathlib import Path from pathlib import Path
@ -18,6 +19,7 @@ logger = logging.getLogger(__name__)
@dataclass @dataclass
class Chart: class Chart:
"""Represents a gameplay chart or infographic.""" """Represents a gameplay chart or infographic."""
key: str key: str
name: str name: str
category: str category: str
@ -27,17 +29,17 @@ class Chart:
def to_dict(self) -> Dict[str, Any]: def to_dict(self) -> Dict[str, Any]:
"""Convert chart to dictionary (excluding key).""" """Convert chart to dictionary (excluding key)."""
return { return {
'name': self.name, "name": self.name,
'category': self.category, "category": self.category,
'description': self.description, "description": self.description,
'urls': self.urls "urls": self.urls,
} }
class ChartService: class ChartService:
"""Service for managing gameplay charts and infographics.""" """Service for managing gameplay charts and infographics."""
CHARTS_FILE = Path(__file__).parent.parent / 'data' / 'charts.json' CHARTS_FILE = Path(__file__).parent.parent / "storage" / "charts.json"
def __init__(self): def __init__(self):
"""Initialize the chart service.""" """Initialize the chart service."""
@ -54,21 +56,21 @@ class ChartService:
self._categories = {} self._categories = {}
return return
with open(self.CHARTS_FILE, 'r') as f: with open(self.CHARTS_FILE, "r") as f:
data = json.load(f) data = json.load(f)
# Load categories # Load categories
self._categories = data.get('categories', {}) self._categories = data.get("categories", {})
# Load charts # Load charts
charts_data = data.get('charts', {}) charts_data = data.get("charts", {})
for key, chart_data in charts_data.items(): for key, chart_data in charts_data.items():
self._charts[key] = Chart( self._charts[key] = Chart(
key=key, key=key,
name=chart_data['name'], name=chart_data["name"],
category=chart_data['category'], category=chart_data["category"],
description=chart_data.get('description', ''), description=chart_data.get("description", ""),
urls=chart_data.get('urls', []) urls=chart_data.get("urls", []),
) )
logger.info(f"Loaded {len(self._charts)} charts from {self.CHARTS_FILE}") logger.info(f"Loaded {len(self._charts)} charts from {self.CHARTS_FILE}")
@ -81,20 +83,17 @@ class ChartService:
def _save_charts(self) -> None: def _save_charts(self) -> None:
"""Save charts to JSON file.""" """Save charts to JSON file."""
try: try:
# Ensure data directory exists # Ensure storage directory exists
self.CHARTS_FILE.parent.mkdir(parents=True, exist_ok=True) self.CHARTS_FILE.parent.mkdir(parents=True, exist_ok=True)
# Build data structure # Build data structure
data = { data = {
'charts': { "charts": {key: chart.to_dict() for key, chart in self._charts.items()},
key: chart.to_dict() "categories": self._categories,
for key, chart in self._charts.items()
},
'categories': self._categories
} }
# Write to file # Write to file
with open(self.CHARTS_FILE, 'w') as f: with open(self.CHARTS_FILE, "w") as f:
json.dump(data, f, indent=2) json.dump(data, f, indent=2)
logger.info(f"Saved {len(self._charts)} charts to {self.CHARTS_FILE}") logger.info(f"Saved {len(self._charts)} charts to {self.CHARTS_FILE}")
@ -134,10 +133,7 @@ class ChartService:
Returns: Returns:
List of charts in the specified category List of charts in the specified category
""" """
return [ return [chart for chart in self._charts.values() if chart.category == category]
chart for chart in self._charts.values()
if chart.category == category
]
def get_chart_keys(self) -> List[str]: def get_chart_keys(self) -> List[str]:
""" """
@ -157,8 +153,9 @@ class ChartService:
""" """
return self._categories.copy() return self._categories.copy()
def add_chart(self, key: str, name: str, category: str, def add_chart(
urls: List[str], description: str = "") -> None: self, key: str, name: str, category: str, urls: List[str], description: str = ""
) -> None:
""" """
Add a new chart. Add a new chart.
@ -176,18 +173,19 @@ class ChartService:
raise BotException(f"Chart '{key}' already exists") raise BotException(f"Chart '{key}' already exists")
self._charts[key] = Chart( self._charts[key] = Chart(
key=key, key=key, name=name, category=category, description=description, urls=urls
name=name,
category=category,
description=description,
urls=urls
) )
self._save_charts() self._save_charts()
logger.info(f"Added chart: {key}") logger.info(f"Added chart: {key}")
def update_chart(self, key: str, name: Optional[str] = None, def update_chart(
category: Optional[str] = None, urls: Optional[List[str]] = None, self,
description: Optional[str] = None) -> None: key: str,
name: Optional[str] = None,
category: Optional[str] = None,
urls: Optional[List[str]] = None,
description: Optional[str] = None,
) -> None:
""" """
Update an existing chart. Update an existing chart.