Skip to content

Commit 708961e

Browse files
committed
Merge branch 'refs/heads/dev-apilayer2' into authentication
# Conflicts: # grade-management-new/GradeManagement.Server/Controllers/BaseControllers/RestrictedCrudControllerBaseTwoParams.cs # grade-management-new/GradeManagement.Server/Controllers/SubjectController.cs # grade-management-new/GradeManagement.Server/GradeManagement.Server.csproj # grade-management-new/GradeManagement.Server/Program.cs
2 parents 4c8312b + 22c0082 commit 708961e

File tree

97 files changed

+4388
-269
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

97 files changed

+4388
-269
lines changed

grade-management-new/GradeManagement.Bll/AssignmentLogService.cs

Lines changed: 0 additions & 6 deletions
This file was deleted.

grade-management-new/GradeManagement.Bll/GradeManagement.Bll.csproj

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,6 @@
1414
<ItemGroup>
1515
<PackageReference Include="AutoMapper" Version="13.0.1" />
1616
<PackageReference Include="AutSoft.Linq" Version="0.10.0" />
17-
<PackageReference Include="CsvHelper" Version="32.0.1" />
18-
<PackageReference Include="Microsoft.Net.Http.Headers" Version="8.0.4" />
17+
<PackageReference Include="CsvHelper" Version="32.0.3" />
1918
</ItemGroup>
20-
21-
<ItemGroup>
22-
<Reference Include="Microsoft.AspNetCore.Mvc.Core">
23-
<HintPath>..\..\..\..\..\..\..\Program Files\dotnet\shared\Microsoft.AspNetCore.App\8.0.2\Microsoft.AspNetCore.Mvc.Core.dll</HintPath>
24-
</Reference>
25-
</ItemGroup>
26-
2719
</Project>

grade-management-new/GradeManagement.Bll/GroupTeacherService.cs

Lines changed: 0 additions & 44 deletions
This file was deleted.

grade-management-new/GradeManagement.Server/Profiles/AutoMapperProfile.cs renamed to grade-management-new/GradeManagement.Bll/Profiles/AutoMapperProfile.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@
22

33
using GradeManagement.Data.Models;
44

5-
namespace GradeManagement.Server.Profiles;
5+
namespace GradeManagement.Bll.Profiles;
66

77
public class AutoMapperProfile : Profile
88
{
99
public AutoMapperProfile()
1010
{
1111
CreateMap<Assignment, Shared.Dtos.Assignment>();
12-
CreateMap<AssignmentLog, Shared.Dtos.AssignmentLog>();
1312
CreateMap<Course, Shared.Dtos.Course>();
1413
CreateMap<Exercise, Shared.Dtos.Exercise>();
1514
CreateMap<Group, Shared.Dtos.Response.Group>();
1615
CreateMap<Language, Shared.Dtos.Language>();
1716
CreateMap<PullRequest, Shared.Dtos.PullRequest>();
17+
CreateMap<PullRequest, Shared.Dtos.PullRequestForDashboard>();
1818
CreateMap<Score, Shared.Dtos.Score>();
19+
CreateMap<ScoreType, Shared.Dtos.ScoreType>();
1920
CreateMap<Semester, Shared.Dtos.Semester>();
2021
CreateMap<Student, Shared.Dtos.Response.Student>();
2122
CreateMap<Subject, Shared.Dtos.Response.Subject>();
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using GradeManagement.Bll.Services;
2+
3+
using Microsoft.Extensions.DependencyInjection;
4+
5+
namespace GradeManagement.Bll;
6+
7+
public static class ServiceCollectionExtensions
8+
{
9+
public static IServiceCollection AddBllServices(this IServiceCollection services)
10+
{
11+
services.AddTransient<AssignmentService>();
12+
services.AddTransient<DashboardService>();
13+
services.AddTransient<AssignmentLogService>();
14+
services.AddTransient<AssignmentEventProcessorService>();
15+
services.AddTransient<CourseService>();
16+
services.AddTransient<GroupService>();
17+
services.AddTransient<LanguageService>();
18+
services.AddTransient<PullRequestService>();
19+
services.AddTransient<ScoreService>();
20+
services.AddTransient<SemesterService>();
21+
services.AddTransient<StudentService>();
22+
services.AddTransient<SubjectService>();
23+
services.AddTransient<ExerciseService>();
24+
services.AddTransient<UserService>();
25+
services.AddTransient<SubjectTeacherService>();
26+
27+
return services;
28+
}
29+
}

grade-management-new/GradeManagement.Bll/AssingmentEventConsumerService.cs renamed to grade-management-new/GradeManagement.Bll/Services/AssignmentEventProcessorService.cs

Lines changed: 94 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,53 @@
1-
using AutoMapper;
1+
using AutSoft.Linq.Enumerable;
22

3-
using GradeManagement.Data.Data;
4-
using GradeManagement.Shared.Dtos;
3+
using GradeManagement.Data;
4+
using GradeManagement.Data.Models;
55
using GradeManagement.Shared.Dtos.AssignmentEvents;
66
using GradeManagement.Shared.Enums;
77

8+
using Microsoft.EntityFrameworkCore;
89
using Microsoft.IdentityModel.Tokens;
910

10-
namespace GradeManagement.Bll;
11+
using Assignment = GradeManagement.Shared.Dtos.Assignment;
12+
using PullRequest = GradeManagement.Shared.Dtos.PullRequest;
1113

12-
public class AssingmentEventConsumerService
14+
namespace GradeManagement.Bll.Services;
15+
16+
public class AssignmentEventProcessorService
1317
{
1418
private readonly GradeManagementDbContext _gradeManagementDbContext;
15-
private readonly IMapper _mapper;
1619
private readonly AssignmentService _assignmentService;
20+
private readonly AssignmentLogService _assignmentLogService;
1721
private readonly ExerciseService _exerciseService;
1822
private readonly StudentService _studentService;
1923
private readonly PullRequestService _pullRequestService;
2024
private readonly ScoreService _scoreService;
2125
private readonly UserService _userService;
2226

23-
public AssingmentEventConsumerService(
24-
GradeManagementDbContext gradeManagementDbContext, IMapper mapper, AssignmentService assignmentService,
27+
public AssignmentEventProcessorService(
28+
GradeManagementDbContext gradeManagementDbContext, AssignmentService assignmentService,
29+
AssignmentLogService assignmentLogService,
2530
ExerciseService exerciseService, StudentService studentService,
2631
PullRequestService pullRequestService, ScoreService scoreService, UserService userService)
2732
{
2833
_gradeManagementDbContext = gradeManagementDbContext;
29-
_mapper = mapper;
3034
_assignmentService = assignmentService;
3135
_exerciseService = exerciseService;
3236
_studentService = studentService;
3337
_pullRequestService = pullRequestService;
3438
_scoreService = scoreService;
3539
_userService = userService;
40+
_assignmentLogService = assignmentLogService;
3641
}
3742

3843
public string GetRepositoryNameFromUrl(string url)
3944
{
4045
var uri = new Uri(url);
4146
var segments = uri.AbsolutePath.Split('/');
42-
return string.Join("/", segments.Skip(2)); // Skip the first 2 segments: "", "{subjectcode}", Join with "/" is needed to account for the possibility of the repository name containing slashes
47+
return
48+
string.Join("/",
49+
segments.Skip(
50+
2)); // Skip the first 2 segments: "", "{subjectcode}", Join with "/" is needed to account for the possibility of the repository name containing slashes
4351
}
4452

4553
public async Task ConsumeAssignmentAcceptedEventAsync(AssignmentAccepted assignmentAccepted)
@@ -50,12 +58,23 @@ public async Task ConsumeAssignmentAcceptedEventAsync(AssignmentAccepted assignm
5058
var student = await _studentService.GetOrCreateStudentByGitHubIdAsync(studentGitHubId);
5159
var assignment = new Assignment()
5260
{
53-
GithubRepoName = repositoryName, StudentId = student.Id, ExerciseId = exercise.Id
61+
GithubRepoName = repositoryName,
62+
GithubRepoUrl = assignmentAccepted.GitHubRepositoryUrl,
63+
StudentId = student.Id,
64+
ExerciseId = exercise.Id
65+
};
66+
assignment = await _assignmentService.CreateAsync(assignment);
67+
68+
var assignmentLog = new AssignmentLog()
69+
{
70+
EventType = EventType.AssignmentAccepted,
71+
Description = $"Assignment for exercise {exercise.Name} accepted by student {studentGitHubId}",
72+
AssignmentId = assignment.Id
5473
};
55-
await _assignmentService.CreateAsync(assignment);
74+
await _assignmentLogService.CreateAsync(assignmentLog);
5675
}
5776

58-
public async Task ConsumePullRequestOpenedEvent(PullRequestOpened pullRequestOpened)
77+
public async Task ConsumePullRequestOpenedEventAsync(PullRequestOpened pullRequestOpened)
5978
{
6079
var repositoryName = GetRepositoryNameFromUrl(pullRequestOpened.GitHubRepositoryUrl);
6180
var assignment = await _assignmentService.GetAssignmentModelByGitHubRepoNameAsync(repositoryName);
@@ -67,10 +86,19 @@ public async Task ConsumePullRequestOpenedEvent(PullRequestOpened pullRequestOpe
6786
BranchName = pullRequestOpened.BranchName,
6887
AssignmentId = assignment.Id
6988
};
70-
await _pullRequestService.CreateAsync(pullRequest);
89+
pullRequest = await _pullRequestService.CreateAsync(pullRequest);
90+
91+
var assignmentLog = new AssignmentLog()
92+
{
93+
EventType = EventType.PullRequestOpened,
94+
Description = $"Pull request opened for assignment {assignment.GithubRepoUrl} with id {assignment.Id}",
95+
AssignmentId = assignment.Id,
96+
PullRequestId = pullRequest.Id
97+
};
98+
await _assignmentLogService.CreateAsync(assignmentLog);
7199
}
72100

73-
public async Task ConsumeCiEvaluationCompletedEvent(CiEvaluationCompleted ciEvaluationCompleted)
101+
public async Task ConsumeCiEvaluationCompletedEventAsync(CiEvaluationCompleted ciEvaluationCompleted)
74102
{
75103
var pullRequest = await _pullRequestService.GetModelByUrlAsync(ciEvaluationCompleted.PullRequestUrl);
76104

@@ -82,29 +110,54 @@ public async Task ConsumeCiEvaluationCompletedEvent(CiEvaluationCompleted ciEval
82110

83111
if (student.NeptunCode.IsNullOrEmpty())
84112
{
85-
await _studentService.DeleteAsync(student.Id);
86-
student = await _studentService.GetStudentModelByNeptunAsync(ciEvaluationCompleted.StudentNeptun);
87-
student.GithubId = studentGitHubId;
88-
assignment.StudentId = student.Id;
113+
var newStudent = await _studentService.GetStudentModelByNeptunAsync(ciEvaluationCompleted.StudentNeptun);
114+
newStudent.GithubId = studentGitHubId;
115+
await _assignmentService.ChangeStudentIdOnAllAssignmentsAsync(student.Id, newStudent.Id);
89116
await _gradeManagementDbContext.SaveChangesAsync();
117+
await _studentService.DeleteAsync(student.Id);
118+
student = newStudent;
90119
}
91120

92121
foreach (var scoreEvent in ciEvaluationCompleted.Scores)
93122
{
94123
await _scoreService.CreateScoreBasedOnEventScoreAsync(scoreEvent, pullRequest.Id);
95124
}
125+
126+
var assignmentLog = new AssignmentLog()
127+
{
128+
EventType = EventType.CiEvaluationCompleted,
129+
Description =
130+
$"CI evaluation completed for assignment {assignment.GithubRepoUrl} with id {assignment.Id}",
131+
AssignmentId = assignment.Id,
132+
PullRequestId = pullRequest.Id
133+
};
134+
await _assignmentLogService.CreateAsync(assignmentLog);
96135
}
97136

98-
public async Task ConsumeTeacherAssignedEvent(TeacherAssigned teacherAssigned)
137+
public async Task ConsumeTeacherAssignedEventAsync(TeacherAssigned teacherAssigned)
99138
{
139+
var repositoryName = GetRepositoryNameFromUrl(teacherAssigned.GitHubRepositoryUrl);
140+
var assignment = await _assignmentService.GetAssignmentModelByGitHubRepoNameAsync(repositoryName);
100141
var teacher = await _userService.GetModelByGitHubIdAsync(teacherAssigned.TeacherGitHubId);
101142
var pullRequest = await _pullRequestService.GetModelByUrlAsync(teacherAssigned.PullRequestUrl);
102143
pullRequest.TeacherId = teacher.Id;
103144
await _gradeManagementDbContext.SaveChangesAsync();
145+
146+
var assignmentLog = new AssignmentLog()
147+
{
148+
EventType = EventType.TeacherAssigned,
149+
Description =
150+
$"Teacher {teacher.GithubId} assigned to pull request {pullRequest.Url} with id {pullRequest.Id}",
151+
AssignmentId = assignment.Id,
152+
PullRequestId = pullRequest.Id
153+
};
154+
await _assignmentLogService.CreateAsync(assignmentLog);
104155
}
105156

106-
public async Task ConsumeAssignmentGradedByTeacherEvent(AssignmentGradedByTeacher assignmentGradedByTeacher)
157+
public async Task ConsumeAssignmentGradedByTeacherEventAsync(AssignmentGradedByTeacher assignmentGradedByTeacher)
107158
{
159+
var repositoryName = GetRepositoryNameFromUrl(assignmentGradedByTeacher.GitHubRepositoryUrl);
160+
var assignment = await _assignmentService.GetAssignmentModelByGitHubRepoNameAsync(repositoryName);
108161
var teacher = await _userService.GetModelByGitHubIdAsync(assignmentGradedByTeacher.TeacherGitHubId);
109162
var pullRequest = await _pullRequestService.GetModelByUrlAsync(assignmentGradedByTeacher.PullRequestUrl);
110163

@@ -126,12 +179,32 @@ public async Task ConsumeAssignmentGradedByTeacherEvent(AssignmentGradedByTeache
126179
await _scoreService.CreateOrApprovePointsFromTeacherInput(eventScore, pullRequest.Id, teacher.Id);
127180
}
128181
}
182+
183+
var assignmentLog = new AssignmentLog()
184+
{
185+
EventType = EventType.AssignmentGradedByTeacher,
186+
Description =
187+
$"Assignment {assignment.GithubRepoUrl} with id {assignment.Id} graded by teacher {teacher.GithubId}",
188+
AssignmentId = assignment.Id,
189+
PullRequestId = pullRequest.Id
190+
};
191+
await _assignmentLogService.CreateAsync(assignmentLog);
129192
}
130193

131194
public async Task ConsumePullRequestStatusChangedEventAsync(PullRequestStatusChanged pullRequestStatusChanged)
132195
{
133196
var pullRequest = await _pullRequestService.GetModelByUrlAsync(pullRequestStatusChanged.PullRequestUrl);
134197
pullRequest.Status = pullRequestStatusChanged.pullRequestStatus;
135198
await _gradeManagementDbContext.SaveChangesAsync();
199+
200+
var assignmentLog = new AssignmentLog()
201+
{
202+
EventType = EventType.PullRequestStatusChanged,
203+
Description =
204+
$"Pull request {pullRequest.Url} with id {pullRequest.Id} status changed to {pullRequest.Status}",
205+
AssignmentId = pullRequest.AssignmentId,
206+
PullRequestId = pullRequest.Id
207+
};
208+
await _assignmentLogService.CreateAsync(assignmentLog);
136209
}
137210
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using GradeManagement.Data;
2+
using GradeManagement.Data.Models;
3+
4+
namespace GradeManagement.Bll.Services;
5+
6+
public class AssignmentLogService(GradeManagementDbContext gradeManagementDbContext)
7+
{
8+
public async Task<AssignmentLog> CreateAsync(AssignmentLog assignmentLog)
9+
{
10+
gradeManagementDbContext.Add(assignmentLog);
11+
await gradeManagementDbContext.SaveChangesAsync();
12+
return assignmentLog;
13+
}
14+
}

grade-management-new/GradeManagement.Bll/AssignmentService.cs renamed to grade-management-new/GradeManagement.Bll/Services/AssignmentService.cs

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
using AutSoft.Linq.Queryable;
55

6-
using GradeManagement.Bll.BaseServices;
7-
using GradeManagement.Data.Data;
6+
using GradeManagement.Bll.Services.BaseServices;
7+
using GradeManagement.Data;
88
using GradeManagement.Shared.Dtos;
99
using GradeManagement.Shared.Enums;
1010

1111
using Microsoft.EntityFrameworkCore;
1212

13-
namespace GradeManagement.Bll;
13+
namespace GradeManagement.Bll.Services;
1414

1515
public class AssignmentService : IQueryServiceBase<Assignment>
1616
{
@@ -44,6 +44,7 @@ public async Task<Assignment> CreateAsync(Assignment requestDto)
4444
{
4545
Id = requestDto.Id,
4646
GithubRepoName = requestDto.GithubRepoName,
47+
GithubRepoUrl = requestDto.GithubRepoUrl,
4748
StudentId = requestDto.StudentId,
4849
ExerciseId = requestDto.ExerciseId
4950
};
@@ -71,4 +72,16 @@ public async Task<IEnumerable<PullRequest>> GetAllPullRequestsByIdAsync(long id)
7172
return await _gradeManagementDbContext.Assignment
7273
.SingleEntityAsync(a => githubRepoName == a.GithubRepoName, 0);
7374
}
75+
76+
public async Task ChangeStudentIdOnAllAssignmentsAsync(long studentIdFrom, long studentIdTo)
77+
{
78+
var assignments = await _gradeManagementDbContext.Assignment.Where(a => a.StudentId == studentIdFrom)
79+
.ToListAsync();
80+
foreach (var assignment in assignments)
81+
{
82+
assignment.StudentId = studentIdTo;
83+
}
84+
85+
await _gradeManagementDbContext.SaveChangesAsync();
86+
}
7487
}

grade-management-new/GradeManagement.Bll/BaseServices/ICrudServiceBase.cs renamed to grade-management-new/GradeManagement.Bll/Services/BaseServices/ICrudServiceBase.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace GradeManagement.Bll.BaseServices;
1+
namespace GradeManagement.Bll.Services.BaseServices;
22

33
public interface ICrudServiceBase<TDto> : IRestrictedCrudServiceBase<TDto>
44
{

grade-management-new/GradeManagement.Bll/BaseServices/ICrudServiceBaseTwoParams.cs renamed to grade-management-new/GradeManagement.Bll/Services/BaseServices/ICrudServiceBaseTwoParams.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace GradeManagement.Bll.BaseServices;
1+
namespace GradeManagement.Bll.Services.BaseServices;
22

33
public interface ICrudServiceBase<TRequestDto, TResponseDto> : IRestrictedCrudServiceBase<TRequestDto, TResponseDto>
44
{

0 commit comments

Comments
 (0)