20
20
using Cite . Api . Infrastructure . Options ;
21
21
using Cite . Api . Infrastructure . QueryParameters ;
22
22
using Cite . Api . ViewModels ;
23
- using Cite . Api . Migrations . PostgreSQL . Migrations ;
24
23
25
24
namespace Cite . Api . Services
26
25
{
27
26
public interface ISubmissionService
28
27
{
29
28
Task < IEnumerable < ViewModels . Submission > > GetAsync ( SubmissionGet queryParameters , CancellationToken ct ) ;
29
+ Task < IEnumerable < ViewModels . Submission > > GetByEvaluationAsync ( Guid evaluationId , CancellationToken ct ) ;
30
30
Task < IEnumerable < ViewModels . Submission > > GetMineByEvaluationAsync ( Guid evaluationId , CancellationToken ct ) ;
31
31
Task < IEnumerable < ViewModels . Submission > > GetByEvaluationTeamAsync ( Guid evaluationId , Guid teamId , CancellationToken ct ) ;
32
32
Task < ViewModels . Submission > GetAsync ( Guid id , CancellationToken ct ) ;
@@ -137,6 +137,25 @@ public SubmissionService(
137
137
return _mapper . Map < IEnumerable < Submission > > ( await submissions . ToListAsync ( ) ) ;
138
138
}
139
139
140
+ public async Task < IEnumerable < ViewModels . Submission > > GetByEvaluationAsync ( Guid evaluationId , CancellationToken ct )
141
+ {
142
+ if ( ! ( await _authorizationService . AuthorizeAsync ( _user , null , new ContentDeveloperRequirement ( ) ) ) . Succeeded )
143
+ throw new ForbiddenException ( ) ;
144
+
145
+ var currentMoveNumber = ( await _context . Evaluations . FindAsync ( evaluationId ) ) . CurrentMoveNumber ;
146
+ var scoringModel = ( await _context . Evaluations . Include ( e => e . ScoringModel ) . SingleOrDefaultAsync ( e => e . Id == evaluationId ) ) . ScoringModel ;
147
+ var submissionEntities = _context . Submissions
148
+ . Include ( sm => sm . SubmissionCategories )
149
+ . ThenInclude ( sc => sc . SubmissionOptions )
150
+ . ThenInclude ( so => so . SubmissionComments )
151
+ . Where ( sm => sm . EvaluationId == evaluationId && sm . MoveNumber <= currentMoveNumber ) ;
152
+ var submissionEntityList = await submissionEntities
153
+ . ToListAsync ( ) ;
154
+ var submissions = _mapper . Map < IEnumerable < Submission > > ( submissionEntityList ) . ToList ( ) ;
155
+
156
+ return submissions ;
157
+ }
158
+
140
159
public async Task < IEnumerable < ViewModels . Submission > > GetMineByEvaluationAsync ( Guid evaluationId , CancellationToken ct )
141
160
{
142
161
if ( ! ( await _authorizationService . AuthorizeAsync ( _user , null , new BaseUserRequirement ( ) ) ) . Succeeded )
@@ -151,11 +170,16 @@ public SubmissionService(
151
170
var isContributor = team . TeamType . IsOfficialScoreContributor ;
152
171
var currentMoveNumber = ( await _context . Evaluations . FindAsync ( evaluationId ) ) . CurrentMoveNumber ;
153
172
var scoringModel = ( await _context . Evaluations . Include ( e => e . ScoringModel ) . SingleOrDefaultAsync ( e => e . Id == evaluationId ) ) . ScoringModel ;
154
- var submissionEntities = _context . Submissions . Where ( sm =>
155
- ( sm . UserId == userId && sm . TeamId == teamId && sm . EvaluationId == evaluationId ) ||
156
- ( sm . UserId == null && sm . TeamId == teamId && sm . EvaluationId == evaluationId ) ||
157
- ( sm . UserId == null && sm . TeamId == null && sm . EvaluationId == evaluationId && sm . MoveNumber < currentMoveNumber ) ||
158
- ( sm . UserId == null && sm . TeamId == null && sm . EvaluationId == evaluationId && sm . MoveNumber == currentMoveNumber && isContributor ) ) ;
173
+ var submissionEntities = _context . Submissions
174
+ . Include ( sm => sm . SubmissionCategories )
175
+ . ThenInclude ( sc => sc . SubmissionOptions )
176
+ . ThenInclude ( so => so . SubmissionComments )
177
+ . Where ( sm =>
178
+ ( sm . UserId == userId && sm . TeamId == teamId && sm . EvaluationId == evaluationId ) ||
179
+ ( sm . UserId == null && sm . TeamId == teamId && sm . EvaluationId == evaluationId ) ||
180
+ ( sm . UserId == null && sm . TeamId == null && sm . EvaluationId == evaluationId && sm . MoveNumber < currentMoveNumber ) ||
181
+ ( sm . UserId == null && sm . TeamId == null && sm . EvaluationId == evaluationId && sm . MoveNumber == currentMoveNumber && isContributor )
182
+ ) ;
159
183
if ( ! scoringModel . UseUserScore )
160
184
{
161
185
submissionEntities = submissionEntities . Where ( sm => ! ( sm . UserId == userId ) ) ;
@@ -173,9 +197,6 @@ public SubmissionService(
173
197
submissionEntities = submissionEntities . Where ( sm => ! ( sm . UserId == null && sm . TeamId == null ) ) ;
174
198
}
175
199
var submissionEntityList = await submissionEntities
176
- . Include ( sm => sm . SubmissionCategories )
177
- . ThenInclude ( sc => sc . SubmissionOptions )
178
- . ThenInclude ( so => so . SubmissionComments )
179
200
. ToListAsync ( ) ;
180
201
var submissions = _mapper . Map < IEnumerable < Submission > > ( submissionEntityList ) . ToList ( ) ;
181
202
var averageSubmissions = await GetTeamAndTypeAveragesAsync ( evaluationId , team , currentMoveNumber , scoringModel . UseTeamAverageScore , scoringModel . UseTypeAverageScore , ct ) ;
@@ -317,7 +338,7 @@ public SubmissionService(
317
338
{
318
339
throw new ForbiddenException ( "TeamType " + teamType . Name + " cannot view the average score for the TeamType." ) ;
319
340
}
320
- var isObserver = ( await _authorizationService . AuthorizeAsync ( _user , null , new EvaluationObserverRequirement ( submission . EvaluationId , _context ) ) ) . Succeeded ;
341
+ var isObserver = ( await _authorizationService . AuthorizeAsync ( _user , null , new EvaluationObserverRequirement ( submission . EvaluationId , _context ) ) ) . Succeeded ;
321
342
var userId = _user . GetId ( ) ;
322
343
var teamIdList = await _context . Teams . Where ( t => t . EvaluationId == submission . EvaluationId && t . TeamTypeId == submission . GroupId ) . Select ( t => t . Id ) . ToListAsync ( ct ) ;
323
344
var canSeeTeamTypeAverage = await _context . TeamUsers . Where ( tu => teamIdList . Contains ( tu . TeamId ) && tu . UserId == userId ) . AnyAsync ( ct ) ;
@@ -468,19 +489,20 @@ public async Task<Submission> GetTypeAverageAsync(Submission submission, Cancell
468
489
{
469
490
_logger . LogDebug ( "Requested submission was created before this call could create it" ) ;
470
491
// find the requested submission entity
471
- requestedSubmissionEntity = await _context . Submissions . FirstOrDefaultAsync ( s =>
472
- s . UserId == submission . UserId &&
473
- s . TeamId == submission . TeamId &&
474
- s . EvaluationId == submission . EvaluationId &&
475
- s . MoveNumber == submission . MoveNumber
476
- ) ;
492
+ requestedSubmissionEntity = await _context . Submissions
493
+ . FirstOrDefaultAsync ( s =>
494
+ s . UserId == submission . UserId &&
495
+ s . TeamId == submission . TeamId &&
496
+ s . EvaluationId == submission . EvaluationId &&
497
+ s . MoveNumber == submission . MoveNumber
498
+ ) ;
477
499
}
478
500
479
501
// create and send xapi statement
480
502
var verb = new Uri ( "https://w3id.org/xapi/dod-isd/verbs/initiated" ) ;
481
503
await LogXApiAsync ( verb , submission , null , ct ) ;
482
504
483
- return _mapper . Map < ViewModels . Submission > ( requestedSubmissionEntity ) ;
505
+ return await GetAsync ( requestedSubmissionEntity . Id , ct ) ;
484
506
}
485
507
486
508
public async Task < ViewModels . Submission > UpdateAsync ( Guid id , ViewModels . Submission submission , CancellationToken ct )
@@ -587,7 +609,7 @@ public async Task<Submission> GetTypeAverageAsync(Submission submission, Cancell
587
609
}
588
610
await LogXApiAsync ( verb , null , _mapper . Map < SubmissionOption > ( submissionOptionToUpdate ) , ct ) ;
589
611
590
- return _mapper . Map < Submission > ( submissionEntity ) ;
612
+ return await GetAsync ( submissionEntity . Id , ct ) ;
591
613
}
592
614
593
615
private async Task < SubmissionEntity > createRequestedSubmissionAndOthers ( ViewModels . Submission submission , CancellationToken ct )
@@ -836,7 +858,7 @@ public async Task<bool> DeleteAsync(Guid id, CancellationToken ct)
836
858
submissionEntity . DateModified = submissionComment . DateCreated ;
837
859
submissionEntity . ModifiedBy = submissionComment . CreatedBy ;
838
860
await _context . SaveChangesAsync ( ct ) ;
839
-
861
+
840
862
return await GetAsync ( submissionId , ct ) ;
841
863
}
842
864
@@ -864,7 +886,7 @@ public async Task<bool> DeleteAsync(Guid id, CancellationToken ct)
864
886
submissionEntity . DateModified = submissionComment . DateCreated ;
865
887
submissionEntity . ModifiedBy = submissionComment . CreatedBy ;
866
888
await _context . SaveChangesAsync ( ct ) ;
867
-
889
+
868
890
return await GetAsync ( submissionId , ct ) ;
869
891
}
870
892
@@ -886,7 +908,7 @@ public async Task<bool> DeleteAsync(Guid id, CancellationToken ct)
886
908
submissionEntity . DateModified = DateTime . UtcNow ;
887
909
submissionEntity . ModifiedBy = _user . GetId ( ) ;
888
910
await _context . SaveChangesAsync ( ct ) ;
889
-
911
+
890
912
return await GetAsync ( submissionId , ct ) ;
891
913
}
892
914
@@ -1182,7 +1204,7 @@ private async Task<bool> HasOptionAccess(SubmissionEntity submissionEntity, Canc
1182
1204
1183
1205
1184
1206
1185
-
1207
+
1186
1208
}
1187
1209
1188
1210
}
@@ -1196,4 +1218,3 @@ public class CategoryScore
1196
1218
}
1197
1219
1198
1220
}
1199
-
0 commit comments