Spaces:
Sleeping
Sleeping
import json | |
from datetime import datetime, timezone | |
import pytz | |
class DashboardService: | |
def __init__(self, assignment_service, submission_service): | |
self.assignment_service = assignment_service | |
self.submission_service = submission_service | |
def get_dashboard_data(self, user_id): | |
assignments = self.assignment_service.get_user_assignments(user_id) | |
dashboard_data = [] | |
for assignment_id, assignment_info in assignments.items(): | |
assignment_data = self.assignment_service.get_assignment(assignment_id) | |
submission_ids = assignment_data.get("submission_ids", []) | |
submission_count = len(submission_ids) | |
dashboard_item = { | |
"assignment_id": assignment_id, | |
"topic": assignment_data["metadata"]["topic"], | |
"assignment_type": assignment_data["assignment_type"], | |
"submission_count": submission_count, | |
"creation_date": assignment_data["timestamp"], | |
"deadline": assignment_data["metadata"].get("submission_deadline") | |
} | |
dashboard_data.append(dashboard_item) | |
# 按創建日期降序排序 | |
dashboard_data.sort(key=lambda x: x["creation_date"], reverse=True) | |
return dashboard_data | |
def get_assignment_details(self, assignment_id): | |
assignment_data = self.assignment_service.get_assignment(assignment_id) | |
submission_ids = assignment_data.get("submission_ids", []) | |
submissions = [] | |
for submission_id in submission_ids: | |
submission_data = self.submission_service.get_submission_from_gcs(submission_id) | |
if submission_data: | |
submissions.append({ | |
"submission_id": submission_id, | |
"student_id": submission_data["student_id"], | |
"student_name": submission_data["student_name"], | |
"submission_date": submission_data["timestamp"] | |
}) | |
return { | |
"assignment_data": assignment_data, | |
"submissions": submissions | |
} | |
def get_submission_details(self, submission_id): | |
submission_data = self.submission_service.get_submission_from_gcs(submission_id) | |
if not submission_data: | |
return {"error": "找不到提交記錄"} | |
assignment_data = self.assignment_service.get_assignment(submission_data["assignment_id"]) | |
return { | |
"submission_data": submission_data, | |
"assignment_data": assignment_data | |
} | |
def get_all_submissions(self, user_id): | |
assignments = self.assignment_service.get_user_assignments(user_id) | |
all_submissions = [] | |
for assignment_id, assignment_info in assignments.items(): | |
assignment_data = self.assignment_service.get_assignment(assignment_id) | |
submission_ids = assignment_data.get("submission_ids", []) | |
for submission_id in submission_ids: | |
submission_data = self.submission_service.get_submission_from_gcs(submission_id) | |
if submission_data: | |
score = self.extract_score(submission_data) | |
all_submissions.append({ | |
"作業名稱": assignment_data["metadata"]["topic"], | |
"作業類型": assignment_data["assignment_type"], | |
"學生_id": submission_data["student_id"], | |
"學生姓名": submission_data["student_name"], | |
"繳交日期": submission_data["timestamp"], | |
"分數": score | |
}) | |
all_submissions.sort(key=lambda x: x["繳交日期"], reverse=True) | |
return all_submissions | |
def extract_score(self, submission_data): | |
try: | |
content = submission_data.get("submission_data", {}).get("content", {}) | |
if isinstance(content, str): | |
content = json.loads(content) | |
output_table = content.get("chinese_full_paragraph_evaluate_output_table", []) | |
for item in output_table: | |
if item.get("架構") == "綜合評分": | |
return item.get("評分", "N/A") | |
except Exception as e: | |
print(f"提取分數時出錯:{str(e)}") | |
print(f"提交數據:{submission_data}") | |
return "N/A" | |