source: iknow-api/Controllers/UserController.cs@ 2e17229

Last change on this file since 2e17229 was 2e17229, checked in by Stefan-Saveski <stefansaveski19@…>, 9 months ago

Upgraded database, added get subjects and get passed subjects.

  • Property mode set to 100644
File size: 9.8 KB
Line 
1using iknow_api.DTOs;
2using Microsoft.AspNetCore.Authorization;
3using Microsoft.AspNetCore.Mvc;
4using iknow_api.Services;
5
6namespace iknow_api.Controllers
7{
8 [ApiController]
9 [Route("api/[controller]")]
10 public class UserController : Controller
11 {
12 IUserService _userService;
13 public UserController(IUserService userService)
14 {
15 _userService = userService;
16 }
17 [Authorize]
18 [HttpGet("getUser")]
19 public async Task<IActionResult> getUser()
20 {
21 var authHeader = Request.Headers["Authorization"].ToString();
22 if (authHeader.StartsWith("Bearer "))
23 {
24 var token = authHeader.Substring("Bearer ".Length).Trim();
25 // token = your JWT
26 var userData = await _userService.GetUserData(token);
27 if (userData == null) return Ok(new { info = "can't get info" });
28 return Ok(new { User = userData });
29 }
30 return null;
31
32 }
33 [Authorize]
34 [HttpGet("getSemesters")]
35 public async Task<IActionResult> getSemesters()
36 {
37 var authHeader = Request.Headers["Authorization"].ToString();
38 if (authHeader.StartsWith("Bearer "))
39 {
40 var token = authHeader.Substring("Bearer ".Length).Trim();
41 // token = your JWT
42 var userData = await _userService.GetUserSemesters(token);
43 var results = new List<object>();
44
45 for (int i = 0; i < userData.Count; i++)
46 {
47 var newResult = new
48 {
49 id = userData[i].Id,
50 semester = (userData[i].Semester.Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Semester.Year}/{userData[i].Semester.Year + 1})",
51 direction = userData[i].Major?.Name ?? "",
52 quota = userData[i].QuotaType.ToString(),
53 note = "",
54 studentCom = "",
55 sum = "0,00",
56 paid = "0,00",
57 ukim = "",
58 createdOn = DateTime.Now.ToString("dd.MM.yyyy"),
59 dateChanged = DateTime.Now.ToString("dd.MM.yyyy"),
60 credits = "0,00",
61 type = "Ред.",
62 doc = "Не",
63 doc1 = "Не",
64 verified = "Не",
65 taxes = "0,00",
66 signatures = "0/5",
67 status = "валиден",
68 completed = "Не"
69 };
70 results.Add(newResult);
71 }
72 if (userData == null) return Ok(new { info = "can't get info" });
73 return Ok(new { semesters = results });
74 }
75 return null;
76 }
77
78 [Authorize]
79 [HttpGet("getSubjects")]
80 public async Task<IActionResult> getSubjects()
81 {
82 var authHeader = Request.Headers["Authorization"].ToString();
83 var token = authHeader.Substring("Bearer ".Length).Trim();
84 // token = your JWT
85 var userData = await _userService.GetUserSemesters(token);
86 var results = new List<object>();
87 var random = new Random();
88 for (int i = 0; i < userData.Count; i++)
89 {
90 var newResult = new
91 {
92 id = userData[i].Id,
93 name = (userData[i].Semester.Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Semester.Year}/{userData[i].Semester.Year + 1})",
94 status = "валиден",
95 serviceNumber = 1000000 + random.Next(10000, 100000)
96 };
97 results.Add(newResult);
98 }
99
100
101 var subjectsBySemester = new Dictionary<string, List<object>>();
102
103 foreach (var enrollment in userData)
104 {
105 // Create semester key like "winter_2025_2026" or "summer_2025_2026"
106 var semesterType = enrollment.Semester.Type == 0 ? "winter" : "summer";
107 var semesterKey = $"{semesterType}_{enrollment.Semester.Year}_{enrollment.Semester.Year + 1}";
108
109 // Initialize list if this semester key doesn't exist
110 if (!subjectsBySemester.ContainsKey(semesterKey))
111 {
112 subjectsBySemester[semesterKey] = new List<object>();
113 }
114
115 // Add subjects from this semester enrollment
116 if (enrollment.SemesterSubjects != null)
117 {
118 foreach (var semesterSubject in enrollment.SemesterSubjects)
119 {
120 var subject = semesterSubject.Subject;
121 if (subject != null)
122 {
123 var subjectData = new
124 {
125 id = subject.Id,
126 code = subject.Code ?? "",
127 hours = "2+4", // You may need to add this to your Subject model
128 kojPat = 1, // You may need to add this field
129 name = subject.Name ?? "",
130 semester = 5, // You may need to calculate or add this field
131 status = "Зад.", // Determine based on PassedSubject or other logic
132 signature = semesterSubject.Signature ? "Да" : "Не",
133 group = "", // You may need to add this field
134 professor = semesterSubject.Professor?.Name + " " + semesterSubject.Professor?.Surname ?? "",
135 };
136 subjectsBySemester[semesterKey].Add(subjectData);
137 }
138 }
139 }
140
141 }
142 var currentSemester = userData.FirstOrDefault(); // Get the most recent/current semester
143 var semesterTypeGlobal = currentSemester.Semester.Type == 0 ? "winter" : "summer";
144 var semesterData = new
145 {
146 id = $"{semesterTypeGlobal}_{currentSemester.Semester.Year}_{currentSemester.Semester.Year + 1}",
147 name = (currentSemester.Semester.Type == 0 ? "Зимски" : "Летен") + $" ({currentSemester.Semester.Year}/{currentSemester.Semester.Year + 1})",
148 status = "валиден",
149 serviceNumber = (1000000 + random.Next(10000, 100000)).ToString(),
150 ticketNumber = random.Next(100000, 1000000).ToString(),
151 debt = "0,00",
152 financialInfo = new
153 {
154 sum = 1,
155 paid = "0,00",
156 due = "0,00",
157 materialCosts = "Осигурување, Административна такса, Тетратки (испити), зимски семестар: 1000,00",
158 credits = "30,00",
159 totalCredits = "30,00",
160 MKSA = "750,00",
161 electronicRegistration = "100,00",
162 eUKIM = "350,00",
163 bankProvision = "25,00",
164 total = "2226,00"
165 }
166 };
167 if (userData == null) return Ok(new { info = "can't get info" });
168 //return Ok(new { semester = userData });
169 return Ok(new { semesters = results, currentSemestar = semesterData, subjectsBySemester = subjectsBySemester });
170 }
171
172 [Authorize]
173 [HttpGet("getPassedSubjects")]
174 public async Task<IActionResult> getPassedSubjects()
175 {
176 var authHeader = Request.Headers["Authorization"].ToString();
177 if (!authHeader.StartsWith("Bearer "))
178 return Unauthorized();
179
180 var token = authHeader.Substring("Bearer ".Length).Trim();
181 var passedSubjects = await _userService.GetUserPassedSubjects(token);
182
183 if (passedSubjects == null || !passedSubjects.Any())
184 return Ok(new { info = "No passed subjects found", passedSubjects = new List<object>() });
185
186 var results = new List<object>();
187
188 foreach (var passed in passedSubjects)
189 {
190 if (passed.SemesterSubject?.Subject != null)
191 {
192 var result = new
193 {
194 id = passed.Id,
195 subjectId = passed.SemesterSubject.Subject.Id,
196 code = passed.SemesterSubject.Subject.Code ?? "",
197 subject = passed.SemesterSubject.Subject.Name ?? "",
198 credits = passed.SemesterSubject.Subject.AwardedCredits ?? 0,
199 grade = (int)passed.Grade,
200 gradeText = passed.Grade.ToString(),
201 date = passed.DatePassed.ToString("dd.MM.yyyy"),
202 semester = passed.SemesterSubject.EnrolledSemester?.Semester != null
203 ? (passed.SemesterSubject.EnrolledSemester.Semester.Type == 0 ? "Зимски" : "Летен") +
204 $" ({passed.SemesterSubject.EnrolledSemester.Semester.Year}/{passed.SemesterSubject.EnrolledSemester.Semester.Year + 1})"
205 : "",
206 professor = passed.SemesterSubject.Professor != null
207 ? $"{passed.SemesterSubject.Professor.Name} {passed.SemesterSubject.Professor.Surname}".Trim()
208 : ""
209 };
210 results.Add(result);
211 }
212 }
213
214 return Ok(new { passedSubjects = results });
215 }
216
217 }
218}
Note: See TracBrowser for help on using the repository browser.