Rakshitjan commited on
Commit
77d4988
·
verified ·
1 Parent(s): b6fda8e

Create main.py

Browse files
Files changed (1) hide show
  1. main.py +47 -0
main.py ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Additional imports
2
+ from typing import List, Dict
3
+
4
+ # Merge roadmaps
5
+ def merge_roadmaps(regular_roadmap: Dict, test_roadmap: Dict) -> Dict:
6
+ """Merge two roadmaps into one, combining overlapping and non-overlapping dates."""
7
+ def schedule_to_dict(schedule: List[Dict]) -> Dict:
8
+ """Convert a roadmap's schedule into a dictionary indexed by dates."""
9
+ return {day["date"]: day for day in schedule}
10
+
11
+ # Convert schedules to dictionaries for quick lookup
12
+ regular_schedule_dict = schedule_to_dict(regular_roadmap["schedule"])
13
+ test_schedule_dict = schedule_to_dict(test_roadmap["schedule"])
14
+
15
+ # Parse dates from schedules
16
+ regular_dates = [datetime.strptime(day["date"], "%Y-%m-%d") for day in regular_roadmap["schedule"]]
17
+ test_dates = [datetime.strptime(day["date"], "%Y-%m-%d") for day in test_roadmap["schedule"]]
18
+
19
+ # Identify start and end dates for both roadmaps
20
+ regular_start, regular_end = min(regular_dates), max(regular_dates)
21
+ test_start, test_end = min(test_dates), max(test_dates)
22
+
23
+ # Merge overlapping dates
24
+ for date, test_day in test_schedule_dict.items():
25
+ if date in regular_schedule_dict:
26
+ # Append test roadmap subjects to matching days in regular roadmap
27
+ regular_schedule_dict[date]["subjects"].extend(test_day["subjects"])
28
+ else:
29
+ # Add non-overlapping test roadmap dates
30
+ regular_schedule_dict[date] = test_day
31
+
32
+ # Convert the merged schedule dictionary back to a sorted list
33
+ merged_schedule = sorted(regular_schedule_dict.values(), key=lambda x: x["date"])
34
+
35
+ return {"schedule": merged_schedule}
36
+
37
+ # New endpoint for merging roadmaps
38
+ @app.post("/merge-roadmaps/")
39
+ def merge_roadmaps_endpoint(roadmap1: Dict, roadmap2: Dict):
40
+ """
41
+ Merge two roadmaps into one, combining overlapping and non-overlapping dates.
42
+ """
43
+ try:
44
+ merged_roadmap = merge_roadmaps(roadmap1, roadmap2)
45
+ return merged_roadmap
46
+ except Exception as e:
47
+ raise HTTPException(status_code=500, detail=f"Error merging roadmaps: {e}")