Changeset 615f18d for iknow-api


Ignore:
Timestamp:
12/10/25 13:44:07 (10 months ago)
Author:
Stefan-Saveski <stefansaveski19@…>
Branches:
master
Children:
f735dac
Parents:
ab652ff
Message:

Add getSemesters endpoint and related data access

Introduce a new getSemesters endpoint in UserController.cs to retrieve user semester data using JWT authentication.

Add DbSet<EnrolledSemesters> to AppDbContext.cs for database interaction.

Implement GetUserSemestersAsync in UserRepository.cs to fetch semesters by user ID, and update IUserRepository.cs to declare this method.

Add GetUserSemesters method in UserService.cs to extract user ID from JWT and retrieve semesters, updating IUserService.cs accordingly.

Location:
iknow-api
Files:
6 edited

Legend:

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

    rab652ff r615f18d  
    2929            }
    3030            return null;
    31            
     31
    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        //}
     58        [Authorize]
     59        [HttpGet("getSemesters")]
     60        public async Task<IActionResult> getSemesters()
     61        {
     62            var authHeader = Request.Headers["Authorization"].ToString();
     63            if (authHeader.StartsWith("Bearer "))
     64            {
     65                var token = authHeader.Substring("Bearer ".Length).Trim();
     66                // token = your JWT
     67                var userData = await _userService.GetUserSemesters(token);
     68                var results = new List<object>();
     69               
     70                for(int i=0; i<userData.Count; i++)
     71                {
     72                    var newResult = new
     73                    {
     74                        id = userData[i].Id,
     75                        semester = (userData[i].Type == 0 ? "Зимски" : "Летен") + $"({userData[i].Year}/{userData[i].Year + 1})",
     76                        direction = userData[i].Major?.Name ?? "",
     77                        quota = userData[i].QuotaType.ToString(),
     78                        note = "",
     79                        studentCom = "",
     80                        sum = "0,00",
     81                        paid = "0,00",
     82                        ukim = "",
     83                        createdOn = DateTime.Now.ToString("dd.MM.yyyy"),
     84                        dateChanged = DateTime.Now.ToString("dd.MM.yyyy"),
     85                        credits = "0,00",
     86                        type = "Ред.",
     87                        doc = "Не",
     88                        doc1 = "Не",
     89                        verified = "Не",
     90                        taxes = "0,00",
     91                        signatures = "0/5",
     92                        status = "валиден",
     93                        completed = "Не"
     94                    };
     95                    results.Add(newResult);
     96                }
     97                if (userData == null) return Ok(new { info = "can't get info" });
     98                return Ok(new { semesters = results });
     99            }
     100            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                //}
    33139    }
    34140}
  • iknow-api/Data/AppDbContext.cs

    rab652ff r615f18d  
    1919        public DbSet<Major> Majors { get; set; }
    2020        public DbSet<PassedSubject> PassedSubjects { get; set; }
     21        public DbSet<EnrolledSemesters> EnrolledSemesters { get; set; }
    2122
    2223
  • iknow-api/Repository/Implementations/UserRepository.cs

    rab652ff r615f18d  
    6363            return await _context.User.CountAsync();
    6464        }
     65        public async Task<List<EnrolledSemesters>> GetUserSemestersAsync(int id)
     66        {
     67            return await _context.EnrolledSemesters
     68                .Include(es => es.Major)
     69                .Where(es => es.UserId == id)
     70                .ToListAsync();
     71        }
    6572
    6673    }
  • iknow-api/Repository/Interface/IUserRepository.cs

    rab652ff r615f18d  
    1212        Task<int> GetUsersCountAsync();
    1313        Task<User?> GetUserByIdAsync(int id);
     14        Task<List<EnrolledSemesters>?> GetUserSemestersAsync(int id);
    1415        Task<User?> GetOnlyUserByIdAsync(int id);
    1516
  • iknow-api/Services/Implementations/UserService.cs

    rab652ff r615f18d  
    3333            else
    3434                return user;
     35        }
     36        public async Task<List<EnrolledSemesters>> GetUserSemesters(string JWT)
     37        {
     38            var userId = ExtractUserIdFromJwt(JWT);
     39            if (userId == null)
     40                return null;
     41
     42            // Now you can use userId to fetch user data
     43            var semesters = await _userRepository.GetUserSemestersAsync(userId.Value);
     44            if (semesters == null)
     45                return null;
     46            else
     47                return semesters;
    3548        }
    3649
  • iknow-api/Services/Interfaces/IUserService.cs

    rab652ff r615f18d  
    66    {
    77        Task<User> GetUserData(string userId);
     8        Task<List<EnrolledSemesters>> GetUserSemesters(string userId);
    89    }
    910}
Note: See TracChangeset for help on using the changeset viewer.