Skip to content

Commit

Permalink
fix(models, cist): fix cist teachers faculties models
Browse files Browse the repository at this point in the history
(adjustment to new cist broken json)
  • Loading branch information
music-soul1-1 committed Aug 4, 2024
1 parent 775d600 commit 6fe35a0
Show file tree
Hide file tree
Showing 6 changed files with 79 additions and 97 deletions.
2 changes: 1 addition & 1 deletion NureTimetableAPI/Models/Cist/CistTeachersFaculty.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,5 @@ public class CistTeachersFaculty
public string FullName { get; set; } = "";

[JsonProperty("departments")]
public List<CistTeachersDepartment> Departments { get; set; } = [];
public List<CistTeachersInnerFaculty> InnerFaculties { get; set; } = [];
}
34 changes: 34 additions & 0 deletions NureTimetableAPI/Models/Cist/CistTeachersInnerFaculty.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using Newtonsoft.Json;
using NureTimetableAPI.Models.Domain;

namespace NureTimetableAPI.Models.Cist;

public class CistTeachersInnerFaculty : Department
{
[JsonProperty("departments")]
public List<CistTeachersInnerInnerFaculty> InnerInnerFaculties { get; set; } = [];

public Department ToDepartment()
{
return new Department
{
Id = Id,
ShortName = ShortName,
FullName = FullName,
Teachers = Teachers,
};
}

public DepartmentDomain ToDepartmentDomain(TeachersFacultyDomain teachersFacultyDomain)
{
return new DepartmentDomain
{
DepartmentId = Id,
ShortName = ShortName,
FullName = FullName,
Teachers = Teachers,
TeachersFaculty = teachersFacultyDomain,
TeachersFacultyDomainId = teachersFacultyDomain.Id,
};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace NureTimetableAPI.Models.Cist;
/// This class is used in implementation of <see cref="Repositories.ICistRepository.FetchTeachersAsync"/>
/// </br>
/// </summary>
public class CistTeachersDepartment : Department
public class CistTeachersInnerInnerFaculty : Department
{
[JsonProperty("departments")]
public List<Department> Departments { get; set; } = [];
Expand Down
84 changes: 8 additions & 76 deletions NureTimetableAPI/Repositories/CistRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,48 +89,6 @@ public class CistRepository() : ICistRepository
return teachersFaculties;
}

public async Task<List<Department>?> GetTeachersDepartments()
{
if (departments == null)
{
var response = await httpClient.GetAsync("https://cist.nure.ua/ias/app/tt/P_API_PODR_JSON");
var jsonString = await HttpResponseDecoder.ConvertToString(response);

// Fixing Cist JSON
jsonString = jsonString.Trim().Remove(jsonString.Length - 2);
jsonString += "]}}";

var data = JsonConvert.DeserializeObject<CistTeachersStructureResponse>(jsonString);
List<Department>? departments = [];

if (data == null)
{
return null;
}

foreach (var faculty in data.University.Faculties)
{
foreach (var department in faculty.Departments)
{
if (department.Teachers.Count > 0)
{
departments.Add(department.ToDepartment());
}
else
{
foreach (var innerDepartment in department.Departments)
{
departments.Add(innerDepartment);
}
}
}
}
this.departments = departments;
}

return departments;
}

#endregion

#region Additional Getters
Expand Down Expand Up @@ -239,45 +197,19 @@ public class CistRepository() : ICistRepository
if (teachersFaculties != null)
{
teachers.AddRange(teachersFaculties
.SelectMany(f => f.Departments)
.SelectMany(f => f.InnerFaculties)
.SelectMany(d => d.Teachers));

teachers.AddRange(teachersFaculties
.SelectMany(f => f.Departments)
.SelectMany(d => d.Departments)
.SelectMany(f => f.InnerFaculties)
.SelectMany(d => d.InnerInnerFaculties)
.SelectMany(d => d.Teachers));
}

return teachers;
}

public async Task<List<Teacher>?> GetTeachers(int departmentId)
{
if (teachersFaculties == null)
{
await GetTeachersFacultiesAsync();
}

var teachers = new List<Teacher>();

if (teachersFaculties != null)
{
if (teachersFaculties.Any(f => f.Departments.Any(d => d.Id == departmentId)))
{
teachers.AddRange(teachersFaculties
.SelectMany(f => f.Departments)
.First(d => d.Id == departmentId)
.Teachers);
}

if (teachersFaculties.Any(f => f.Departments.Any(d => d.Departments.Any(d => d.Id == departmentId))))
{
teachers.AddRange(teachersFaculties
.SelectMany(f => f.Departments)
.SelectMany(d => d.Departments)
.First(d => d.Id == departmentId)
.Teachers);
}
teachers.AddRange(teachersFaculties
.SelectMany(f => f.InnerFaculties)
.SelectMany(d => d.InnerInnerFaculties)
.SelectMany(d => d.Departments)
.SelectMany(d => d.Teachers));
}

return teachers;
Expand Down
4 changes: 0 additions & 4 deletions NureTimetableAPI/Repositories/ICistRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,8 @@ public interface ICistRepository

public Task<List<CistTeachersFaculty>?> GetTeachersFacultiesAsync();

public Task<List<Department>?> GetTeachersDepartments();

public Task<List<Teacher>?> GetTeachers();

public Task<List<Teacher>?> GetTeachers(int departmentId);

public Task<List<CistBuilding>?> GetAuditoriesBuildingsAsync();

public Task<List<Direction>?> GetDirections(int facultyId);
Expand Down
50 changes: 35 additions & 15 deletions NureTimetableAPI/Repositories/SQLRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -885,33 +885,53 @@ private async Task<List<LessonDomain>> ConvertCistScheduleToLessons(CistSchedule
Departments = [],
};

foreach (var department in faculty.Departments)
foreach (var innerFaculty in faculty.InnerFaculties)
{
if (department.Teachers.Count > 0)
if (innerFaculty.Teachers.Count > 0)
{
facultyDomain.Departments.Add(department.ToDepartmentDomain(facultyDomain));
facultyDomain.Departments.Add(innerFaculty.ToDepartmentDomain(facultyDomain));
}
else
{
var subFacultyDomain = new TeachersFacultyDomain
{
FacultyId = department.Id,
ShortName = department.ShortName,
FullName = department.FullName,
FacultyId = innerFaculty.Id,
ShortName = innerFaculty.ShortName,
FullName = innerFaculty.FullName,
Departments = [],
};

foreach (var subDepartment in department.Departments)
foreach (var innerInnerFaculty in innerFaculty.InnerInnerFaculties)
{
subFacultyDomain.Departments.Add(new DepartmentDomain
if (innerInnerFaculty.Teachers.Count > 0)
{
DepartmentId = subDepartment.Id,
ShortName = subDepartment.ShortName,
FullName = subDepartment.FullName,
Teachers = subDepartment.Teachers,
TeachersFaculty = subFacultyDomain,
TeachersFacultyDomainId = subFacultyDomain.Id,
});
subFacultyDomain.Departments.Add(innerInnerFaculty.ToDepartmentDomain(subFacultyDomain));
}
else
{
var subSubFacultyDomain = new TeachersFacultyDomain
{
FacultyId = innerInnerFaculty.Id,
ShortName = innerInnerFaculty.ShortName,
FullName = innerInnerFaculty.FullName,
Departments = [],
};

foreach (var innerInnerDepartment in innerInnerFaculty.Departments)
{
subSubFacultyDomain.Departments.Add(new DepartmentDomain
{
DepartmentId = innerInnerDepartment.Id,
ShortName = innerInnerDepartment.ShortName,
FullName = innerInnerDepartment.FullName,
Teachers = innerInnerDepartment.Teachers,
TeachersFaculty = subSubFacultyDomain,
TeachersFacultyDomainId = subSubFacultyDomain.Id,
});
}

teachersFaculties.Add(subSubFacultyDomain);
}
}
teachersFaculties.Add(subFacultyDomain);
}
Expand Down

0 comments on commit 6fe35a0

Please sign in to comment.