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 ;
55using GradeManagement . Shared . Dtos . AssignmentEvents ;
66using GradeManagement . Shared . Enums ;
77
8+ using Microsoft . EntityFrameworkCore ;
89using 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}
0 commit comments