Ignore:
Timestamp:
12/16/25 23:05:19 (9 months ago)
Author:
Stefan-Saveski <stefansaveski19@…>
Branches:
master
Children:
bb02e3a
Parents:
61fd94e
Message:

Upgraded database, added get subjects and get passed subjects.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • iknow-api/Controllers/UserController.cs

    r61fd94e raee2b88  
    3131
    3232        }
    33         //"semesters": [
    34         //    {
    35         //      "id": 1,
    36         //      "semester": "Зимски(2025/2026)",
    37         //      "direction": "PIT23(2023)",
    38         //      "quota": "Не плаќа-Редовен(2023)",
    39         //      "note": "",
    40         //      "studentCom": "Ги имам си...",
    41         //      "sum": "0,30",
    42         //      "paid": "0,00",
    43         //      "ukim": "",
    44         //      "createdOn": "22.09.2025",
    45         //      "dateChanged": "22.09.2025",
    46         //      "credits": "0,01",
    47         //      "type": "Ред.",
    48         //      "doc": "Не",
    49         //      "doc1": "Не",
    50         //      "verified": "Не",
    51         //      "taxes": "0,00",
    52         //      "signatures": "0/5",
    53         //      "status": "валиден",
    54         //      "completed": "Не"
    55         //    },
    56         //    ]
    57         //}
    5833        [Authorize]
    5934        [HttpGet("getSemesters")]
     
    6742                var userData = await _userService.GetUserSemesters(token);
    6843                var results = new List<object>();
    69                
    70                 for(int i=0; i<userData.Count; i++)
     44
     45                for (int i = 0; i < userData.Count; i++)
    7146                {
    7247                    var newResult = new
    7348                    {
    7449                        id = userData[i].Id,
    75                         //semester = (userData[i].Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Year}/{userData[i].Year + 1})",
     50                        semester = (userData[i].Semester.Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Semester.Year}/{userData[i].Semester.Year + 1})",
    7651                        direction = userData[i].Major?.Name ?? "",
    7752                        quota = userData[i].QuotaType.ToString(),
     
    9974            }
    10075            return null;
    101 
    102         }
    103                 //        {
    104                 //    "user": [
    105                 //        {
    106                 //            "id": 2,
    107                 //            "userId": 1,
    108                 //            "user": null,
    109                 //            "year": 2025,
    110                 //            "type": 1,
    111                 //            "quotaType": "privatna",
    112                 //            "majorId": 1,
    113                 //            "major": {
    114                 //                "id": 1,
    115                 //                "name": "PIT(2023)",
    116                 //                "subjects": null
    117                 //            },
    118                 //            "users": null,
    119                 //            "semesterSubjects": null
    120                 //        },
    121                 //        {
    122                 //    "id": 1,
    123                 //            "userId": 1,
    124                 //            "user": null,
    125                 //            "year": 2025,
    126                 //            "type": 0,
    127                 //            "quotaType": "privatna",
    128                 //            "majorId": 1,
    129                 //            "major": {
    130                 //        "id": 1,
    131                 //                "name": "PIT(2023)",
    132                 //                "subjects": null
    133                 //            },
    134                 //            "users": null,
    135                 //            "semesterSubjects": null
    136                 //        }
    137                 //    ]
    138                 //}
     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
    139217    }
    140218}
Note: See TracChangeset for help on using the changeset viewer.