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
All checks were successful
Build Docker Image / build (push) Successful in 1m46s
Reviewed-on: #119
This commit is contained in:
commit
6889499fff
@ -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.
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user