diff --git a/.vs/ProjectEvaluation/interview-integrationstask.metadata.v9.bin b/.vs/ProjectEvaluation/interview-integrationstask.metadata.v9.bin
new file mode 100644
index 0000000..1815e7a
Binary files /dev/null and b/.vs/ProjectEvaluation/interview-integrationstask.metadata.v9.bin differ
diff --git a/.vs/ProjectEvaluation/interview-integrationstask.projects.v9.bin b/.vs/ProjectEvaluation/interview-integrationstask.projects.v9.bin
new file mode 100644
index 0000000..495127b
Binary files /dev/null and b/.vs/ProjectEvaluation/interview-integrationstask.projects.v9.bin differ
diff --git a/.vs/ProjectEvaluation/interview-integrationstask.strings.v9.bin b/.vs/ProjectEvaluation/interview-integrationstask.strings.v9.bin
new file mode 100644
index 0000000..d1ad9e8
Binary files /dev/null and b/.vs/ProjectEvaluation/interview-integrationstask.strings.v9.bin differ
diff --git a/.vs/interview-integrationstask/DesignTimeBuild/.dtbcache.v2 b/.vs/interview-integrationstask/DesignTimeBuild/.dtbcache.v2
new file mode 100644
index 0000000..94a57e8
Binary files /dev/null and b/.vs/interview-integrationstask/DesignTimeBuild/.dtbcache.v2 differ
diff --git a/.vs/interview-integrationstask/FileContentIndex/01983fa3-3ad7-434f-b6e7-9264b809d657.vsidx b/.vs/interview-integrationstask/FileContentIndex/01983fa3-3ad7-434f-b6e7-9264b809d657.vsidx
new file mode 100644
index 0000000..fda9557
Binary files /dev/null and b/.vs/interview-integrationstask/FileContentIndex/01983fa3-3ad7-434f-b6e7-9264b809d657.vsidx differ
diff --git a/.vs/interview-integrationstask/FileContentIndex/10b794ec-de61-4210-a3ae-be0c082e874d.vsidx b/.vs/interview-integrationstask/FileContentIndex/10b794ec-de61-4210-a3ae-be0c082e874d.vsidx
new file mode 100644
index 0000000..305ac98
Binary files /dev/null and b/.vs/interview-integrationstask/FileContentIndex/10b794ec-de61-4210-a3ae-be0c082e874d.vsidx differ
diff --git a/.vs/interview-integrationstask/FileContentIndex/8435d6b8-55c1-489e-9789-4430c7c6774f.vsidx b/.vs/interview-integrationstask/FileContentIndex/8435d6b8-55c1-489e-9789-4430c7c6774f.vsidx
new file mode 100644
index 0000000..bfa276a
Binary files /dev/null and b/.vs/interview-integrationstask/FileContentIndex/8435d6b8-55c1-489e-9789-4430c7c6774f.vsidx differ
diff --git a/.vs/interview-integrationstask/FileContentIndex/e78ecd4c-7f11-4c75-b8a1-04bb389fcd60.vsidx b/.vs/interview-integrationstask/FileContentIndex/e78ecd4c-7f11-4c75-b8a1-04bb389fcd60.vsidx
new file mode 100644
index 0000000..1591295
Binary files /dev/null and b/.vs/interview-integrationstask/FileContentIndex/e78ecd4c-7f11-4c75-b8a1-04bb389fcd60.vsidx differ
diff --git a/.vs/interview-integrationstask/FileContentIndex/fd4ba989-f841-4422-9dec-ce4e35b791b3.vsidx b/.vs/interview-integrationstask/FileContentIndex/fd4ba989-f841-4422-9dec-ce4e35b791b3.vsidx
new file mode 100644
index 0000000..b556325
Binary files /dev/null and b/.vs/interview-integrationstask/FileContentIndex/fd4ba989-f841-4422-9dec-ce4e35b791b3.vsidx differ
diff --git a/.vs/interview-integrationstask/config/applicationhost.config b/.vs/interview-integrationstask/config/applicationhost.config
new file mode 100644
index 0000000..e4243d8
--- /dev/null
+++ b/.vs/interview-integrationstask/config/applicationhost.config
@@ -0,0 +1,999 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.vs/interview-integrationstask/v17/.futdcache.v2 b/.vs/interview-integrationstask/v17/.futdcache.v2
new file mode 100644
index 0000000..8d7c751
Binary files /dev/null and b/.vs/interview-integrationstask/v17/.futdcache.v2 differ
diff --git a/.vs/interview-integrationstask/v17/.suo b/.vs/interview-integrationstask/v17/.suo
new file mode 100644
index 0000000..cd3767c
Binary files /dev/null and b/.vs/interview-integrationstask/v17/.suo differ
diff --git a/.vs/interview-integrationstask/v17/DocumentLayout.backup.json b/.vs/interview-integrationstask/v17/DocumentLayout.backup.json
new file mode 100644
index 0000000..43e52dd
--- /dev/null
+++ b/.vs/interview-integrationstask/v17/DocumentLayout.backup.json
@@ -0,0 +1,140 @@
+{
+ "Version": 1,
+ "WorkspaceRootPath": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\",
+ "Documents": [
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\halftime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\halftime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\fulltime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\fulltime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\score.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\score.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\match.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\match.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\services\\footballservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\services\\footballservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\matchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\matchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\controllers\\footballcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\controllers\\footballcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ }
+ ],
+ "DocumentGroupContainers": [
+ {
+ "Orientation": 0,
+ "VerticalTabListWidth": 256,
+ "DocumentGroups": [
+ {
+ "DockedWidth": 200,
+ "SelectedChildIndex": 1,
+ "Children": [
+ {
+ "$type": "Document",
+ "DocumentIndex": 4,
+ "Title": "FootballService.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Services\\FootballService.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Services\\FootballService.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Services\\FootballService.cs",
+ "RelativeToolTip": "interview-integrationstask\\Services\\FootballService.cs",
+ "ViewState": "AgIAABkAAAAAAAAAAAApwCcAAAAQAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T12:43:39.311Z",
+ "IsPinned": true,
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 0,
+ "Title": "HalfTime.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\HalfTime.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\HalfTime.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\HalfTime.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\HalfTime.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAATAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:24:33.342Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 1,
+ "Title": "FullTime.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\FullTime.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\FullTime.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\FullTime.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\FullTime.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAmAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:24:25.649Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 3,
+ "Title": "Match.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Match.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\Match.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Match.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\Match.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAABoAAAASAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:23:43.885Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "Score.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Score.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\Score.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Score.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\Score.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAtAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:23:21.961Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 6,
+ "Title": "FootballController.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Controllers\\FootballController.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Controllers\\FootballController.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Controllers\\FootballController.cs",
+ "RelativeToolTip": "interview-integrationstask\\Controllers\\FootballController.cs",
+ "ViewState": "AgIAABsAAAAAAAAAAAAUwC8AAAAJAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:16:27.148Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 5,
+ "Title": "MatchInfo.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\MatchInfo.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\MatchInfo.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\MatchInfo.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\MatchInfo.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAuwAQAAAARAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T22:23:14.594Z",
+ "EditorCaption": ""
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/.vs/interview-integrationstask/v17/DocumentLayout.json b/.vs/interview-integrationstask/v17/DocumentLayout.json
new file mode 100644
index 0000000..f4c9fa8
--- /dev/null
+++ b/.vs/interview-integrationstask/v17/DocumentLayout.json
@@ -0,0 +1,140 @@
+{
+ "Version": 1,
+ "WorkspaceRootPath": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\",
+ "Documents": [
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\services\\footballservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\services\\footballservice.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\halftime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\halftime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\fulltime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\fulltime.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\score.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\score.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\match.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\match.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\models\\matchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\models\\matchinfo.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ },
+ {
+ "AbsoluteMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|c:\\users\\lapee\\documents\\github\\interview-integrationstask\\interview-integrationstask\\controllers\\footballcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}",
+ "RelativeMoniker": "D:0:0:{AF1AD1DE-A671-0966-1476-F38C71F00BE9}|interview-integrationstask\\interview-integrationstask.csproj|solutionrelative:interview-integrationstask\\controllers\\footballcontroller.cs||{A6C744A8-0E4A-4FC6-886A-064283054674}"
+ }
+ ],
+ "DocumentGroupContainers": [
+ {
+ "Orientation": 0,
+ "VerticalTabListWidth": 256,
+ "DocumentGroups": [
+ {
+ "DockedWidth": 200,
+ "SelectedChildIndex": 0,
+ "Children": [
+ {
+ "$type": "Document",
+ "DocumentIndex": 0,
+ "Title": "FootballService.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Services\\FootballService.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Services\\FootballService.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Services\\FootballService.cs",
+ "RelativeToolTip": "interview-integrationstask\\Services\\FootballService.cs",
+ "ViewState": "AgIAAB4AAAAAAAAAAAAYwJgAAAAtAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T12:43:39.311Z",
+ "IsPinned": true,
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 1,
+ "Title": "HalfTime.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\HalfTime.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\HalfTime.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\HalfTime.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\HalfTime.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAATAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:24:33.342Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 2,
+ "Title": "FullTime.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\FullTime.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\FullTime.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\FullTime.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\FullTime.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAmAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:24:25.649Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 4,
+ "Title": "Match.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Match.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\Match.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Match.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\Match.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAABoAAAASAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:23:43.885Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 3,
+ "Title": "Score.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Score.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\Score.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\Score.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\Score.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAAAAsAAAAtAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:23:21.961Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 6,
+ "Title": "FootballController.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Controllers\\FootballController.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Controllers\\FootballController.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Controllers\\FootballController.cs",
+ "RelativeToolTip": "interview-integrationstask\\Controllers\\FootballController.cs",
+ "ViewState": "AgIAABsAAAAAAAAAAAAUwC8AAAAJAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T23:16:27.148Z",
+ "EditorCaption": ""
+ },
+ {
+ "$type": "Document",
+ "DocumentIndex": 5,
+ "Title": "MatchInfo.cs",
+ "DocumentMoniker": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\MatchInfo.cs",
+ "RelativeDocumentMoniker": "interview-integrationstask\\Models\\MatchInfo.cs",
+ "ToolTip": "C:\\Users\\lapee\\Documents\\GitHub\\interview-integrationstask\\interview-integrationstask\\Models\\MatchInfo.cs",
+ "RelativeToolTip": "interview-integrationstask\\Models\\MatchInfo.cs",
+ "ViewState": "AgIAAAAAAAAAAAAAAAAuwAQAAAARAAAAAAAAAA==",
+ "Icon": "ae27a6b0-e345-4288-96df-5eaf394ee369.000738|",
+ "WhenOpened": "2025-01-27T22:23:14.594Z",
+ "EditorCaption": ""
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/interview-integrationstask/Controllers/FootballController.cs b/interview-integrationstask/Controllers/FootballController.cs
index 3d0bc35..6939d71 100644
--- a/interview-integrationstask/Controllers/FootballController.cs
+++ b/interview-integrationstask/Controllers/FootballController.cs
@@ -1,43 +1,60 @@
+using interview_integrationstask.Interfaces.Services;
using Microsoft.AspNetCore.Mvc;
namespace interview_integrationstask.Controllers
{
-
[ApiController]
[Route("api/[controller]")]
- public class FootballController: ControllerBase
+ public class FootballController : ControllerBase
{
+ private readonly IFootballService _footballService;
- [HttpGet("teams")]
- public IActionResult GetTeams()
- {
- return Ok("Teams:");
- }
-
- [HttpGet("teams/{name}")]
- public IActionResult GetTeamByName()
+ public FootballController(IFootballService footballService)
{
- return Ok("Team:");
+ _footballService = footballService;
}
- [HttpGet("league/{name}")]
- public IActionResult GetLeagueByName()
+ [HttpGet("team/{teamId}")]
+ public async Task GetTeamById(int teamId, int? season = null)
{
- return Ok("League:");
+ try
+ {
+ var teamInfo = await _footballService.GetTeamById(teamId, season);
+
+ return Ok(teamInfo);
+ }
+ catch (Exception ex)
+ {
+ return BadRequest(new { Message = ex.Message });
+ }
}
- [HttpGet("fixtures")]
- public IActionResult GetFixtures()
+ [HttpGet("matches/recent/{teamId}")]
+ public async Task GetRecentMatches(int teamId, DateTime? dateFrom = null, DateTime? dateTo = null, int? season = null, string? venue = null, int? limit = null)
{
- return Ok("Fixtures:");
+ try
+ {
+ var matches = await _footballService.GetRecentMatchesByTeam(teamId, dateFrom, dateTo, season, venue, limit);
+ return Ok(matches);
+ }
+ catch (Exception ex)
+ {
+ return BadRequest(new { Message = ex.Message });
+ }
}
- [HttpGet("scores")]
- public IActionResult GetScores()
+ [HttpGet("matches/upcoming/{teamId}")]
+ public async Task GetUpcomingFixturesByTeam(int teamId, DateTime? dateFrom = null, DateTime? dateTo = null, int? season = null, string? venue = null, int? limit = null)
{
- return Ok("Scores:");
+ try
+ {
+ var fixtures = await _footballService.GetUpcomingFixturesByTeam(teamId, dateFrom, dateTo, season, venue, limit);
+ return Ok(fixtures);
+ }
+ catch (Exception ex)
+ {
+ return BadRequest(new { Message = ex.Message });
+ }
}
-
}
-
-}
\ No newline at end of file
+}
diff --git a/interview-integrationstask/Interfaces/Services/IFootballService.cs b/interview-integrationstask/Interfaces/Services/IFootballService.cs
new file mode 100644
index 0000000..868027c
--- /dev/null
+++ b/interview-integrationstask/Interfaces/Services/IFootballService.cs
@@ -0,0 +1,11 @@
+using interview_integrationstask.Models;
+
+namespace interview_integrationstask.Interfaces.Services
+{
+ public interface IFootballService
+ {
+ Task GetTeamById(int teamId, int? season = null);
+ Task GetRecentMatchesByTeam(int teamId, DateTime? dateFrom = null, DateTime? dateTo = null, int? season = null, string? venue = null, int? limit = null);
+ Task GetUpcomingFixturesByTeam(int teamId, DateTime? dateFrom = null, DateTime? dateTo = null, int? season = null, string? venue = null, int? limit = null);
+ }
+}
diff --git a/interview-integrationstask/Models/Area.cs b/interview-integrationstask/Models/Area.cs
new file mode 100644
index 0000000..b02edfe
--- /dev/null
+++ b/interview-integrationstask/Models/Area.cs
@@ -0,0 +1,20 @@
+using System.Text.Json.Serialization;
+using Newtonsoft.Json;
+
+namespace interview_integrationstask.Models
+{
+ public class Area
+ {
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("name")]
+ public string Name { get; set; }
+
+ [JsonPropertyName("code")]
+ public string Code { get; set; }
+
+ [JsonPropertyName("flag")]
+ public string Flag { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Coach.cs b/interview-integrationstask/Models/Coach.cs
new file mode 100644
index 0000000..d63fcbe
--- /dev/null
+++ b/interview-integrationstask/Models/Coach.cs
@@ -0,0 +1,29 @@
+using System.Text.Json.Serialization;
+using Newtonsoft.Json;
+
+namespace interview_integrationstask.Models
+{
+ public class Coach
+ {
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("firstName")]
+ public string FirstName { get; set; }
+
+ [JsonPropertyName("lastName")]
+ public string LastName { get; set; }
+
+ [JsonPropertyName("name")]
+ public string Name { get; set; }
+
+ [JsonPropertyName("dateOfBirth")]
+ public string DateOfBirth { get; set; }
+
+ [JsonPropertyName("nationality")]
+ public string Nationality { get; set; }
+
+ [JsonPropertyName("contract")]
+ public Contract Contract { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Competition.cs b/interview-integrationstask/Models/Competition.cs
new file mode 100644
index 0000000..4e9e443
--- /dev/null
+++ b/interview-integrationstask/Models/Competition.cs
@@ -0,0 +1,35 @@
+using System.Text.Json.Serialization;
+using Newtonsoft.Json;
+
+namespace interview_integrationstask.Models
+{
+ public class Competition
+ {
+ [JsonPropertyName("id")]
+ public int? Id { get; set; }
+
+ [JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ [JsonPropertyName("code")]
+ public string? Code { get; set; }
+
+ [JsonPropertyName("type")]
+ public string? Type { get; set; }
+
+ [JsonPropertyName("emblem")]
+ public string? EmblemUrl { get; set; }
+
+ [JsonPropertyName("area")]
+ public Area? Area { get; set; }
+
+ [JsonPropertyName("currentSeason")]
+ public Season? CurrentSeason { get; init; }
+
+ [JsonPropertyName("seasons")]
+ public List? Seasons { get; init; }
+
+ [JsonPropertyName("lastUpdated")]
+ public DateTime? LastUpdated { get; init; }
+ }
+}
diff --git a/interview-integrationstask/Models/CompetitionInfo.cs b/interview-integrationstask/Models/CompetitionInfo.cs
new file mode 100644
index 0000000..6998af8
--- /dev/null
+++ b/interview-integrationstask/Models/CompetitionInfo.cs
@@ -0,0 +1,31 @@
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class CompetitionInfo
+ {
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("name")]
+ public string Name { get; set; }
+
+ [JsonPropertyName("code")]
+ public string? Code { get; set; }
+
+ [JsonPropertyName("type")]
+ public string? Type { get; set; }
+
+ [JsonPropertyName("emblem")]
+ public string? EmblemUrl { get; set; }
+
+ [JsonPropertyName("currentSeason")]
+ public Season? Season { get; set; }
+
+ [JsonPropertyName("seasons")]
+ public List? Seasons { get; set; }
+
+ [JsonPropertyName("lastUpdated")]
+ public DateTime? LastUpdated { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Contract.cs b/interview-integrationstask/Models/Contract.cs
new file mode 100644
index 0000000..234e330
--- /dev/null
+++ b/interview-integrationstask/Models/Contract.cs
@@ -0,0 +1,14 @@
+using System.Text.Json.Serialization;
+using Newtonsoft.Json;
+
+namespace interview_integrationstask.Models
+{
+ public class Contract
+ {
+ [JsonPropertyName("start")]
+ public string Start { get; set; }
+
+ [JsonPropertyName("until")]
+ public string Until { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Filters.cs b/interview-integrationstask/Models/Filters.cs
new file mode 100644
index 0000000..a4bab15
--- /dev/null
+++ b/interview-integrationstask/Models/Filters.cs
@@ -0,0 +1,19 @@
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class Filters
+ {
+ [JsonPropertyName("competitions")]
+ public string Competitions { get; set; }
+
+ [JsonPropertyName("permission")]
+ public string Permission { get; set; }
+
+ [JsonPropertyName("status")]
+ public List Status { get; set; }
+
+ [JsonPropertyName("limit")]
+ public int Limit { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/FootballData.cs b/interview-integrationstask/Models/FootballData.cs
new file mode 100644
index 0000000..04487c2
--- /dev/null
+++ b/interview-integrationstask/Models/FootballData.cs
@@ -0,0 +1,9 @@
+namespace interview_integrationstask.Models
+{
+ public class FootballData
+ {
+ public string ApiKey { get; set; }
+ public string ApiUrl { get; set; }
+
+ }
+}
diff --git a/interview-integrationstask/Models/FullTime.cs b/interview-integrationstask/Models/FullTime.cs
new file mode 100644
index 0000000..53a4913
--- /dev/null
+++ b/interview-integrationstask/Models/FullTime.cs
@@ -0,0 +1,14 @@
+
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class FullTime
+ {
+ [JsonPropertyName("home")]
+ public int? Home { get; set; }
+
+ [JsonPropertyName("away")]
+ public int? Away { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/HalfTime.cs b/interview-integrationstask/Models/HalfTime.cs
new file mode 100644
index 0000000..460d135
--- /dev/null
+++ b/interview-integrationstask/Models/HalfTime.cs
@@ -0,0 +1,14 @@
+
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class HalfTime
+ {
+ [JsonPropertyName("home")]
+ public int? Home { get; set; }
+
+ [JsonPropertyName("away")]
+ public int? Away { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/interview-integrationstask/Models/Match.cs b/interview-integrationstask/Models/Match.cs
new file mode 100644
index 0000000..de3a19d
--- /dev/null
+++ b/interview-integrationstask/Models/Match.cs
@@ -0,0 +1,53 @@
+using System.Security.Cryptography.Xml;
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class Match
+ {
+ [JsonPropertyName("area")]
+ public Area Area { get; set; }
+
+ [JsonPropertyName("competition")]
+ public Competition Competition { get; set; }
+
+ [JsonPropertyName("season")]
+ public Season Season { get; set; }
+
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("utcDate")]
+ public DateTime UtcDate { get; set; }
+
+ [JsonPropertyName("status")]
+ public string Status { get; set; }
+
+ [JsonPropertyName("matchday")]
+ public int Matchday { get; set; }
+
+ [JsonPropertyName("stage")]
+ public string Stage { get; set; }
+
+ [JsonPropertyName("group")]
+ public object Group { get; set; }
+
+ [JsonPropertyName("lastUpdated")]
+ public DateTime LastUpdated { get; set; }
+
+ [JsonPropertyName("homeTeam")]
+ public TeamInfo HomeTeam { get; set; }
+
+ [JsonPropertyName("awayTeam")]
+ public TeamInfo AwayTeam { get; set; }
+
+ [JsonPropertyName("score")]
+ public Score? Score { get; set; }
+
+ [JsonPropertyName("odds")]
+ public Odds? Odds { get; set; }
+
+ [JsonPropertyName("referees")]
+ public List? Referees { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/MatchInfo.cs b/interview-integrationstask/Models/MatchInfo.cs
new file mode 100644
index 0000000..fe6e302
--- /dev/null
+++ b/interview-integrationstask/Models/MatchInfo.cs
@@ -0,0 +1,16 @@
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class MatchInfo
+ {
+ [JsonPropertyName("filters")]
+ public Filters Filters { get; set; }
+
+ [JsonPropertyName("resultSet")]
+ public ResultSet ResultSet { get; set; }
+
+ [JsonPropertyName("matches")]
+ public List Matches { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Odds.cs b/interview-integrationstask/Models/Odds.cs
new file mode 100644
index 0000000..cecc321
--- /dev/null
+++ b/interview-integrationstask/Models/Odds.cs
@@ -0,0 +1,10 @@
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class Odds
+ {
+ [JsonPropertyName("msg")]
+ public string Msg { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Referee.cs b/interview-integrationstask/Models/Referee.cs
new file mode 100644
index 0000000..a9dff16
--- /dev/null
+++ b/interview-integrationstask/Models/Referee.cs
@@ -0,0 +1,19 @@
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class Referee
+ {
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("name")]
+ public string Name { get; set; }
+
+ [JsonPropertyName("type")]
+ public string Type { get; set; }
+
+ [JsonPropertyName("nationality")]
+ public string Nationality { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/ResultSet.cs b/interview-integrationstask/Models/ResultSet.cs
new file mode 100644
index 0000000..3e4149c
--- /dev/null
+++ b/interview-integrationstask/Models/ResultSet.cs
@@ -0,0 +1,31 @@
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class ResultSet
+ {
+ [JsonPropertyName("count")]
+ public int Count { get; set; }
+
+ [JsonPropertyName("competitions")]
+ public string Competitions { get; set; }
+
+ [JsonPropertyName("first")]
+ public string First { get; set; }
+
+ [JsonPropertyName("last")]
+ public string Last { get; set; }
+
+ [JsonPropertyName("played")]
+ public int Played { get; set; }
+
+ [JsonPropertyName("wins")]
+ public int Wins { get; set; }
+
+ [JsonPropertyName("draws")]
+ public int Draws { get; set; }
+
+ [JsonPropertyName("losses")]
+ public int Losses { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Score.cs b/interview-integrationstask/Models/Score.cs
new file mode 100644
index 0000000..3e9240a
--- /dev/null
+++ b/interview-integrationstask/Models/Score.cs
@@ -0,0 +1,20 @@
+
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class Score
+ {
+ [JsonPropertyName("winner")]
+ public string? Winner { get; set; }
+
+ [JsonPropertyName("duration")]
+ public string? Duration { get; set; }
+
+ [JsonPropertyName("fullTime")]
+ public FullTime? FullTime { get; set; }
+
+ [JsonPropertyName("halfTime")]
+ public HalfTime? HalfTime { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/Season.cs b/interview-integrationstask/Models/Season.cs
new file mode 100644
index 0000000..f17ea85
--- /dev/null
+++ b/interview-integrationstask/Models/Season.cs
@@ -0,0 +1,26 @@
+using System.Text.Json.Serialization;
+using Newtonsoft.Json;
+
+namespace interview_integrationstask.Models
+{
+ public class Season
+ {
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("startDate")]
+ public DateTime StartDate { get; set; }
+
+ [JsonPropertyName("endDate")]
+ public DateTime EndDate { get; set; }
+
+ [JsonPropertyName("currentMatchday")]
+ public int? CurrentMatchday { get; set; }
+
+ [JsonPropertyName("winner")]
+ public TeamInfo? Winner { get; set; }
+
+ [JsonPropertyName("stages")]
+ public List Stages { get; set; } = new List();
+ }
+}
diff --git a/interview-integrationstask/Models/Squad.cs b/interview-integrationstask/Models/Squad.cs
new file mode 100644
index 0000000..5bec828
--- /dev/null
+++ b/interview-integrationstask/Models/Squad.cs
@@ -0,0 +1,23 @@
+using System.Text.Json.Serialization;
+using Newtonsoft.Json;
+
+namespace interview_integrationstask.Models
+{
+ public class Squad
+ {
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("name")]
+ public string Name { get; set; }
+
+ [JsonPropertyName("position")]
+ public string Position { get; set; }
+
+ [JsonPropertyName("dateOfBirth")]
+ public string DateOfBirth { get; set; }
+
+ [JsonPropertyName("nationality")]
+ public string Nationality { get; set; }
+ }
+}
diff --git a/interview-integrationstask/Models/TeamInfo.cs b/interview-integrationstask/Models/TeamInfo.cs
new file mode 100644
index 0000000..266b5f1
--- /dev/null
+++ b/interview-integrationstask/Models/TeamInfo.cs
@@ -0,0 +1,47 @@
+using System.Text.Json.Serialization;
+
+namespace interview_integrationstask.Models
+{
+ public class TeamInfo
+ {
+ [JsonPropertyName("id")]
+ public int Id { get; set; }
+
+ [JsonPropertyName("name")]
+ public string Name { get; set; }
+
+ [JsonPropertyName("shortName")]
+ public string? ShortName { get; set; }
+
+ [JsonPropertyName("tla")]
+ public string? Tla { get; set; }
+
+ [JsonPropertyName("crest")]
+ public string? CrestUrl { get; set; }
+
+ [JsonPropertyName("founded")]
+ public int? Founded { get; set; }
+
+ [JsonPropertyName("venue")]
+ public string? Venue { get; set; }
+
+ [JsonPropertyName("runningCompetitions")]
+ public List? RunningCompetitions { get; set; } = new List();
+
+ [JsonPropertyName("area")]
+ public Area? Area { get; set; }
+
+ [JsonPropertyName("coach")]
+ public Coach? Coach { get; set; }
+
+ [JsonPropertyName("squad")]
+ public List? Squad { get; set; }
+
+ [JsonPropertyName("staff")]
+ public List