source: iknow-api/Controllers/UserController.cs@ bf18ca4

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

Added dockerfile and changes to GET user.

  • Property mode set to 100644
File size: 15.5 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
18 // "birthInfo": {
19 // "placeOfBirth": "Скопје",
20 // "municipalityOfBirth": "Скопје",
21 // "country": "Република Северна Македонија"
22 // },
23 // "previousEducation": {
24 // "type": "Гимназиско образование",
25 // "profession": "",
26 // "average": "54,857",
27 // "language": "Македонски",
28 // "country": "",
29 // "previousUniversity": "Гимназиско образование",
30 // "previousFaculty": "",
31 // "previousStudyMode": ""
32 // },
33 // "enrollmentInfo": {
34 // "enrollmentYear": "2023",
35 // "status": "Редовен",
36 // "cycle": "Прв циклус",
37 // "program": "Примена на информациски технологии",
38 // "quota": "Кофинансирање-Редовен (2023, 24600)",
39 // "secondaryEducationNumber": "",
40 // "previousEducationCredits": ""
41 // },
42 // "contact": {
43 // "placeOfResidence": "Скопје",
44 // "municipalityOfResidence": "Кисела Вода - Скопје",
45 // "country": "Република Северна Македонија",
46 // "address": "Драчево",
47 // "temporaryAddress": "",
48 // "phone": "",
49 // "mobilePhone": "075295582",
50 // "passportNumber": "",
51 // "passportExpiryDate": "",
52 // "email": "stefansaveski19@gmail.com",
53 // "microsoftEmail": "stefan.saveski@students.finki.ukim.mk"
54 // }
55 //}
56 [Authorize]
57 [HttpGet("getUser")]
58 public async Task<IActionResult> getUser()
59 {
60 //{
61 // "personalInfo": {
62 // "index": "233149/2023",
63 // "embg": "/////////////",
64 // "lastName": "Савески",
65 // "middleName": "Дејан",
66 // "firstName": "Стефан",
67 // "maidenName": "",
68 // "dateOfBirth": "19.08.2004",
69 // "gender": "машки",
70 // "nationality": "Македонец",
71 // "citizenship": "Република Северна Македонија",
72 // "scholarship": "Користи",
73 // "currentPlan": "2023",
74 // "registryNumber": "",
75 // "notes": "Систематски преглед Студира 3 години",
76 // "studyGroup": ""
77 // },
78 var authHeader = Request.Headers["Authorization"].ToString();
79 if (authHeader.StartsWith("Bearer "))
80 {
81 var token = authHeader.Substring("Bearer ".Length).Trim();
82 // token = your JWT
83 var userData = await _userService.GetUserData(token);
84 if (userData == null) return Ok(new { info = "can't get info" });
85 var personalInfo = new
86 {
87 index = userData.Index ?? "",
88 embg = userData.EMBG ?? "",
89 lastName = userData.Surname ?? "",
90 middleName = userData.MiddleName ?? "",
91 firstName = userData.Name ?? "",
92 maidenName = "", // Property doesn't exist in User model
93 dateOfBirth = userData.Bday.ToString("dd.MM.yyyy"),
94 gender = userData.Gender ?? "",
95 nationality = userData.Nationality ?? "",
96 citizenship = userData.Citizenship ?? "",
97 scholarship = "",
98 currentPlan = userData.EnrollmentInfo?.EnrollmentYear.ToString() ?? "",
99 registryNumber = "",
100 notes = "",
101 studyGroup = ""
102 };
103 var birthInfo = new
104 {
105 placeOfBirth = userData.ContactInfo?.City ?? "",
106 municipalityOfBirth = userData.ContactInfo?.Municipality ?? "",
107 country = userData.Citizenship ?? ""
108 };
109 var previousEducation = new
110 {
111 type = userData.HighSchool?.HighSchoolType.ToString() ?? "",
112 profession = "",
113 average = userData.HighSchool?.GPA.ToString() ?? "",
114 language = userData.Nationality ?? "",
115 country = userData.Nationality ?? "",
116 previousUniversity = userData.HighSchool?.HighSchoolType.ToString() ?? "",
117 previousFaculty = "", // Property doesn't exist in HighSchool model
118 previousStudyMode = "" // Property doesn't exist in HighSchool model
119 };
120 var enrollmentInfo = new
121 {
122 enrollmentYear = userData.EnrollmentInfo?.EnrollmentYear.ToString() ?? "",
123 status = userData.EnrollmentInfo?.StudyStatus ?? "",
124 cycle = "Прв циклус",
125 program = userData.EnrollmentInfo?.Major?.Name ?? "",
126 quota = userData.EnrollmentInfo?.Quota.ToString() ?? "",
127 secondaryEducationNumber = "",
128 previousEducationCredits = ""
129 };
130 var contact = new
131 {
132 placeOfResidence = userData.ContactInfo?.City ?? "",
133 municipalityOfResidence = userData.ContactInfo?.Municipality ?? "",
134 country = userData.Citizenship ?? "",
135 address = userData.ContactInfo?.Address ?? "",
136 temporaryAddress = "",
137 phone = "",
138 mobilePhone = userData.ContactInfo?.PhoneNumber ?? "",
139 passportNumber = "",
140 passportExpiryDate = "",
141 email = userData.Email ?? "",
142 microsoftEmail = userData.ContactInfo?.MicrosoftEmail ?? ""
143 };
144 return Ok(new { personalInfo = personalInfo, birthInfo = birthInfo, previousEducation = previousEducation, enrollmentInfo = enrollmentInfo, contact = contact });
145 //return Ok(new { User = userData });
146 }
147 return null;
148
149 }
150 [Authorize]
151 [HttpGet("getSemesters")]
152 public async Task<IActionResult> getSemesters()
153 {
154 var authHeader = Request.Headers["Authorization"].ToString();
155 if (authHeader.StartsWith("Bearer "))
156 {
157 var token = authHeader.Substring("Bearer ".Length).Trim();
158 // token = your JWT
159 var userData = await _userService.GetUserSemesters(token);
160 var results = new List<object>();
161
162 for (int i = 0; i < userData.Count; i++)
163 {
164 var newResult = new
165 {
166 id = userData[i].Id,
167 semester = (userData[i].Semester.Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Semester.Year}/{userData[i].Semester.Year + 1})",
168 direction = userData[i].Major?.Name ?? "",
169 quota = userData[i].QuotaType.ToString(),
170 note = "",
171 studentCom = "",
172 sum = "0,00",
173 paid = "0,00",
174 ukim = "",
175 createdOn = DateTime.Now.ToString("dd.MM.yyyy"),
176 dateChanged = DateTime.Now.ToString("dd.MM.yyyy"),
177 credits = "0,00",
178 type = "Ред.",
179 doc = "Не",
180 doc1 = "Не",
181 verified = "Не",
182 taxes = "0,00",
183 signatures = "0/5",
184 status = "валиден",
185 completed = "Не"
186 };
187 results.Add(newResult);
188 }
189 if (userData == null) return Ok(new { info = "can't get info" });
190 return Ok(new { semesters = results });
191 }
192 return null;
193 }
194
195 [Authorize]
196 [HttpGet("getSubjects")]
197 public async Task<IActionResult> getSubjects()
198 {
199 var authHeader = Request.Headers["Authorization"].ToString();
200 var token = authHeader.Substring("Bearer ".Length).Trim();
201 // token = your JWT
202 var userData = await _userService.GetUserSemesters(token);
203 var results = new List<object>();
204 var random = new Random();
205 for (int i = 0; i < userData.Count; i++)
206 {
207 var newResult = new
208 {
209 id = userData[i].Id,
210 name = (userData[i].Semester.Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Semester.Year}/{userData[i].Semester.Year + 1})",
211 status = "валиден",
212 serviceNumber = 1000000 + random.Next(10000, 100000)
213 };
214 results.Add(newResult);
215 }
216
217
218 var subjectsBySemester = new Dictionary<string, List<object>>();
219
220 foreach (var enrollment in userData)
221 {
222 // Create semester key like "winter_2025_2026" or "summer_2025_2026"
223 var semesterType = enrollment.Semester.Type == 0 ? "winter" : "summer";
224 var semesterKey = $"{semesterType}_{enrollment.Semester.Year}_{enrollment.Semester.Year + 1}";
225
226 // Initialize list if this semester key doesn't exist
227 if (!subjectsBySemester.ContainsKey(semesterKey))
228 {
229 subjectsBySemester[semesterKey] = new List<object>();
230 }
231
232 // Add subjects from this semester enrollment
233 if (enrollment.SemesterSubjects != null)
234 {
235 foreach (var semesterSubject in enrollment.SemesterSubjects)
236 {
237 var subject = semesterSubject.Subject;
238 if (subject != null)
239 {
240 var subjectData = new
241 {
242 id = subject.Id,
243 code = subject.Code ?? "",
244 hours = "2+4", // You may need to add this to your Subject model
245 kojPat = 1, // You may need to add this field
246 name = subject.Name ?? "",
247 semester = 5, // You may need to calculate or add this field
248 status = "Зад.", // Determine based on PassedSubject or other logic
249 signature = semesterSubject.Signature ? "Да" : "Не",
250 group = "", // You may need to add this field
251 professor = semesterSubject.Professor?.Name + " " + semesterSubject.Professor?.Surname ?? "",
252 };
253 subjectsBySemester[semesterKey].Add(subjectData);
254 }
255 }
256 }
257
258 }
259 var currentSemester = userData.FirstOrDefault(); // Get the most recent/current semester
260 var semesterTypeGlobal = currentSemester.Semester.Type == 0 ? "winter" : "summer";
261 var semesterData = new
262 {
263 id = $"{semesterTypeGlobal}_{currentSemester.Semester.Year}_{currentSemester.Semester.Year + 1}",
264 name = (currentSemester.Semester.Type == 0 ? "Зимски" : "Летен") + $" ({currentSemester.Semester.Year}/{currentSemester.Semester.Year + 1})",
265 status = "валиден",
266 serviceNumber = (1000000 + random.Next(10000, 100000)).ToString(),
267 ticketNumber = random.Next(100000, 1000000).ToString(),
268 debt = "0,00",
269 financialInfo = new
270 {
271 sum = 1,
272 paid = "0,00",
273 due = "0,00",
274 materialCosts = "Осигурување, Административна такса, Тетратки (испити), зимски семестар: 1000,00",
275 credits = "30,00",
276 totalCredits = "30,00",
277 MKSA = "750,00",
278 electronicRegistration = "100,00",
279 eUKIM = "350,00",
280 bankProvision = "25,00",
281 total = "2226,00"
282 }
283 };
284 if (userData == null) return Ok(new { info = "can't get info" });
285 //return Ok(new { semester = userData });
286 return Ok(new { semesters = results, currentSemestar = semesterData, subjectsBySemester = subjectsBySemester });
287 }
288
289 [Authorize]
290 [HttpGet("getPassedSubjects")]
291 public async Task<IActionResult> getPassedSubjects()
292 {
293 var authHeader = Request.Headers["Authorization"].ToString();
294 if (!authHeader.StartsWith("Bearer "))
295 return Unauthorized();
296
297 var token = authHeader.Substring("Bearer ".Length).Trim();
298 var passedSubjects = await _userService.GetUserPassedSubjects(token);
299
300 if (passedSubjects == null || !passedSubjects.Any())
301 return Ok(new { info = "No passed subjects found", passedSubjects = new List<object>() });
302
303 var results = new List<object>();
304
305 foreach (var passed in passedSubjects)
306 {
307 if (passed.SemesterSubject?.Subject != null)
308 {
309 var result = new
310 {
311 id = passed.Id,
312 subjectId = passed.SemesterSubject.Subject.Id,
313 code = passed.SemesterSubject.Subject.Code ?? "",
314 subject = passed.SemesterSubject.Subject.Name ?? "",
315 credits = passed.SemesterSubject.Subject.AwardedCredits ?? 0,
316 grade = (int)passed.Grade,
317 gradeText = passed.Grade.ToString(),
318 date = passed.DatePassed.ToString("dd.MM.yyyy"),
319 semester = passed.SemesterSubject.EnrolledSemester?.Semester != null
320 ? (passed.SemesterSubject.EnrolledSemester.Semester.Type == 0 ? "Зимски" : "Летен") +
321 $" ({passed.SemesterSubject.EnrolledSemester.Semester.Year}/{passed.SemesterSubject.EnrolledSemester.Semester.Year + 1})"
322 : "",
323 professor = passed.SemesterSubject.Professor != null
324 ? $"{passed.SemesterSubject.Professor.Name} {passed.SemesterSubject.Professor.Surname}".Trim()
325 : ""
326 };
327 results.Add(result);
328 }
329 }
330
331 return Ok(new { passedSubjects = results });
332 }
333
334 }
335}
Note: See TracBrowser for help on using the repository browser.