Skip to content

Commit 5df91ba

Browse files
DedSec256Алексей Бережных
authored andcommitted
Критерии оценивания
Co-authored-by: Alexey.Berezhnykh <alexey.berezhnykh@jetbrains.com> Co-committed-by: Alexey.Berezhnykh <alexey.berezhnykh@jetbrains.com>
1 parent 4d9d51e commit 5df91ba

39 files changed

Lines changed: 1910 additions & 453 deletions

HwProj.APIGateway/HwProj.APIGateway.API/Controllers/CoursesController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public async Task<CoursePreviewView[]> GetAllCourses()
4949
[ProducesResponseType(typeof(CourseAllData), (int)HttpStatusCode.OK)]
5050
public async Task<IActionResult> GetAllCourseData(long courseId)
5151
{
52-
var courseResult = await _coursesClient.GetAllCourseData(courseId);
52+
var courseResult = await _coursesClient.GetCourseDataRaw(courseId);
5353
if (!courseResult.Succeeded)
5454
return BadRequest(courseResult.Errors[0]);
5555

@@ -66,7 +66,7 @@ public async Task<IActionResult> GetAllCourseData(long courseId)
6666
[ProducesResponseType(typeof(CourseViewModel), (int)HttpStatusCode.OK)]
6767
public async Task<IActionResult> GetCourseData(long courseId)
6868
{
69-
var course = await _coursesClient.GetCourseById(courseId);
69+
var course = await _coursesClient.GetCourseView(courseId);
7070
if (course == null) return NotFound();
7171

7272
var result = await ToCourseViewModel(course);

HwProj.APIGateway/HwProj.APIGateway.API/Controllers/TasksController.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public class TasksController(ICoursesServiceClient coursesClient) : ControllerBa
1616
[HttpGet("get/{taskId}")]
1717
[Authorize]
1818
[ProducesResponseType(typeof(HomeworkTaskViewModel), (int)HttpStatusCode.OK)]
19-
public async Task<IActionResult> GetTask(long taskId)
19+
public async Task<IActionResult> GetTask(long taskId, [FromQuery] bool? withCriteria)
2020
{
21-
var result = await coursesClient.GetTask(taskId);
21+
var result = await coursesClient.GetTask(taskId, withCriteria ?? false);
2222
return result == null
2323
? NotFound()
2424
: Ok(result);
@@ -38,7 +38,7 @@ public async Task<IActionResult> GetForEditingTask(long taskId)
3838
[HttpPost("add/{homeworkId}")]
3939
[Authorize(Roles = Roles.LecturerRole)]
4040
[ProducesResponseType(typeof(Result<HomeworkTaskViewModel>), (int)HttpStatusCode.OK)]
41-
public async Task<IActionResult> AddTask(long homeworkId, CreateTaskViewModel taskViewModel)
41+
public async Task<IActionResult> AddTask(long homeworkId, PostTaskViewModel taskViewModel)
4242
{
4343
var result = await coursesClient.AddTask(homeworkId, taskViewModel);
4444
return result.Succeeded
@@ -57,7 +57,7 @@ public async Task<IActionResult> DeleteTask(long taskId)
5757
[HttpPut("update/{taskId}")]
5858
[Authorize(Roles = Roles.LecturerRole)]
5959
[ProducesResponseType(typeof(Result<HomeworkTaskViewModel>), (int)HttpStatusCode.OK)]
60-
public async Task<IActionResult> UpdateTask(long taskId, CreateTaskViewModel taskViewModel)
60+
public async Task<IActionResult> UpdateTask(long taskId, PostTaskViewModel taskViewModel)
6161
{
6262
var result = await coursesClient.UpdateTask(taskId, taskViewModel);
6363
return Ok(result);
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.ComponentModel.DataAnnotations;
2+
3+
namespace HwProj.Models.CoursesService.ViewModels
4+
{
5+
public enum CriterionType
6+
{
7+
Free = 0
8+
}
9+
10+
public class CriterionViewModel
11+
{
12+
public long Id { get; set; }
13+
public CriterionType Type { get; set; }
14+
[Required] public string Name { get; set; } = null!;
15+
[Range(0, int.MaxValue)] public int MaxPoints { get; set; }
16+
}
17+
}

HwProj.Common/HwProj.Models/CoursesService/ViewModels/HomeworkTaskViewModels.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
using System;
1+
using Newtonsoft.Json;
2+
using System;
3+
using System.Collections.Generic;
24
using System.ComponentModel.DataAnnotations;
3-
using Newtonsoft.Json;
45

56
namespace HwProj.Models.CoursesService.ViewModels
67
{
@@ -35,6 +36,8 @@ public class HomeworkTaskViewModel
3536
public bool IsGroupWork { get; set; }
3637

3738
public bool IsDeferred { get; set; }
39+
40+
public List<CriterionViewModel>? Criteria { get; set; } = new List<CriterionViewModel>();
3841
}
3942

4043
public class HomeworkTaskForEditingViewModel
@@ -44,7 +47,7 @@ public class HomeworkTaskForEditingViewModel
4447
public HomeworkViewModel Homework { get; set; }
4548
}
4649

47-
public class CreateTaskViewModel
50+
public class PostTaskViewModel
4851
{
4952
[Required]
5053
[RegularExpression(@"^\S+.*", ErrorMessage = "Name shouldn't start with white spaces.")]
@@ -63,5 +66,7 @@ public class CreateTaskViewModel
6366
[Required] public int MaxRating { get; set; }
6467

6568
public ActionOptions? ActionOptions { get; set; }
69+
70+
public List<CriterionViewModel> Criteria { get; set; }
6671
}
6772
}

HwProj.Common/HwProj.Models/CoursesService/ViewModels/HomeworkViewModels.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public class CreateHomeworkViewModel
2424

2525
public List<string> Tags { get; set; } = new List<string>();
2626

27-
public List<CreateTaskViewModel> Tasks { get; set; } = new List<CreateTaskViewModel>();
27+
public List<PostTaskViewModel> Tasks { get; set; } = new List<PostTaskViewModel>();
2828

2929
public ActionOptions? ActionOptions { get; set; }
3030
}

HwProj.CoursesService/HwProj.CoursesService.API/ApplicationProfile.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public ApplicationProfile()
1717

1818
CreateMap<CreateHomeworkViewModel, Homework>();
1919
CreateMap<HomeworkTask, HomeworkTaskViewModel>().ReverseMap();
20-
CreateMap<CreateTaskViewModel, HomeworkTask>().ReverseMap();
20+
CreateMap<PostTaskViewModel, HomeworkTask>().ReverseMap();
2121

2222
CreateMap<CreateCourseFilterDTO, CreateCourseFilterModel>();
2323
CreateMap<Filter, CourseFilterDTO>();

HwProj.CoursesService/HwProj.CoursesService.API/Controllers/CoursesController.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,13 @@ public class CoursesController : Controller
2525
private readonly ICoursesService _coursesService;
2626
private readonly ICourseFilterService _courseFilterService;
2727
private readonly IHomeworksRepository _homeworksRepository;
28-
private readonly IMapper _mapper;
2928

3029
public CoursesController(ICoursesService coursesService,
3130
IHomeworksRepository homeworksRepository,
32-
IMapper mapper,
3331
ICourseFilterService courseFilterService)
3432
{
3533
_coursesService = coursesService;
3634
_homeworksRepository = homeworksRepository;
37-
_mapper = mapper;
3835
_courseFilterService = courseFilterService;
3936
}
4037

@@ -46,6 +43,17 @@ public async Task<CoursePreview[]> GetAll()
4643
return courses;
4744
}
4845

46+
[CourseDataFilter]
47+
[HttpGet("view/{courseId}")]
48+
public async Task<IActionResult> GetView(long courseId)
49+
{
50+
var userId = Request.GetUserIdFromHeader();
51+
var course = await _coursesService.GetAsync(courseId, userId, true);
52+
if (course == null) return NotFound();
53+
54+
return Ok(course);
55+
}
56+
4957
[CourseDataFilter]
5058
[HttpGet("{courseId}")]
5159
public async Task<IActionResult> Get(long courseId)
@@ -103,7 +111,7 @@ public async Task<IActionResult> AddCourse([FromBody] CreateCourseViewModel cour
103111
}
104112

105113
var courseId = await _coursesService.AddAsync(courseViewModel, baseCourse, mentorId);
106-
114+
107115
return Ok(courseId);
108116
}
109117

HwProj.CoursesService/HwProj.CoursesService.API/Controllers/TasksController.cs

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
using System;
2-
using System.Linq;
3-
using System.Threading.Tasks;
41
using HwProj.CoursesService.API.Domains;
52
using HwProj.CoursesService.API.Filters;
63
using HwProj.CoursesService.API.Models;
@@ -10,6 +7,9 @@
107
using HwProj.Models.Roles;
118
using HwProj.Utils.Authorization;
129
using Microsoft.AspNetCore.Mvc;
10+
using System;
11+
using System.Linq;
12+
using System.Threading.Tasks;
1313

1414
namespace HwProj.CoursesService.API.Controllers
1515
{
@@ -32,47 +32,44 @@ public TasksController(ITasksService tasksService, ICoursesService coursesServic
3232
}
3333

3434
[HttpGet("get/{taskId}")]
35-
public async Task<IActionResult> GetTask(long taskId)
35+
public async Task<IActionResult> GetTask(long taskId, [FromQuery] bool withCriteria)
3636
{
37-
var taskFromDb = await _tasksService.GetTaskAsync(taskId);
38-
if (taskFromDb == null) return NotFound();
37+
var task = await _tasksService.GetTaskAsync(taskId, withCriteria);
38+
if (task == null) return NotFound();
3939

40-
if (taskFromDb.PublicationDate > DateTime.UtcNow)
40+
if (task.PublicationDate > DateTime.UtcNow)
4141
{
4242
var userId = Request.GetUserIdFromHeader();
43-
var homework = taskFromDb.Homework;
43+
var homework = await _homeworksService.GetHomeworkAsync(task.HomeworkId);
4444
var lecturers = await _coursesService.GetCourseLecturers(homework.CourseId);
4545
if (!lecturers.Contains(userId)) return BadRequest();
4646
}
47-
48-
var task = taskFromDb.ToHomeworkTaskViewModel();
49-
return Ok(task);
47+
return Ok(task.ToHomeworkTaskViewModel());
5048
}
5149

5250
[HttpGet("getForEditing/{taskId}")]
5351
[ServiceFilter(typeof(CourseMentorOnlyAttribute))]
5452
public async Task<IActionResult> GetForEditingTask(long taskId)
5553
{
56-
var taskFromDb = await _tasksService.GetForEditingTaskAsync(taskId);
54+
var task = await _tasksService.GetForEditingTaskAsync(taskId);
5755

58-
if (taskFromDb == null)
56+
if (task == null)
5957
{
6058
return NotFound();
6159
}
6260

63-
var task = taskFromDb.ToHomeworkTaskForEditingViewModel();
64-
return Ok(task);
61+
return Ok(task.ToHomeworkTaskForEditingViewModel());
6562
}
6663

6764
[HttpPost("add/{homeworkId}")]
6865
[ServiceFilter(typeof(CourseMentorOnlyAttribute))]
69-
public async Task<IActionResult> AddTask(long homeworkId, [FromBody] CreateTaskViewModel taskViewModel)
66+
public async Task<IActionResult> AddTask(long homeworkId, [FromBody] PostTaskViewModel taskViewModel)
7067
{
7168
var homework = await _homeworksService.GetHomeworkAsync(homeworkId);
7269
var validationResult = Validator.ValidateTask(taskViewModel, homework);
7370
if (validationResult.Any()) return BadRequest(validationResult);
7471

75-
var task = await _tasksService.AddTaskAsync(homeworkId, taskViewModel.ToHomeworkTask());
72+
var task = await _tasksService.AddTaskAsync(homeworkId, taskViewModel);
7673

7774
return Ok(task);
7875
}
@@ -86,7 +83,7 @@ public async Task DeleteTask(long taskId)
8683

8784
[HttpPut("update/{taskId}")]
8885
[ServiceFilter(typeof(CourseMentorOnlyAttribute))]
89-
public async Task<IActionResult> UpdateTask(long taskId, [FromBody] CreateTaskViewModel taskViewModel)
86+
public async Task<IActionResult> UpdateTask(long taskId, [FromBody] PostTaskViewModel taskViewModel)
9087
{
9188
var previousState = await _tasksService.GetForEditingTaskAsync(taskId);
9289
var validationResult = Validator.ValidateTask(taskViewModel,
@@ -95,7 +92,7 @@ public async Task<IActionResult> UpdateTask(long taskId, [FromBody] CreateTaskVi
9592
if (validationResult.Any()) return BadRequest(validationResult);
9693

9794
var updatedTask =
98-
await _tasksService.UpdateTaskAsync(taskId, taskViewModel.ToHomeworkTask(),
95+
await _tasksService.UpdateTaskAsync(taskId, taskViewModel,
9996
taskViewModel.ActionOptions ?? ActionOptions.Default);
10097
return Ok(updatedTask.ToHomeworkTaskViewModel());
10198
}

HwProj.CoursesService/HwProj.CoursesService.API/Domains/MappingExtensions.cs

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using HwProj.Models.CoursesService;
66
using HwProj.Models.CoursesService.DTO;
77
using Microsoft.EntityFrameworkCore.Internal;
8+
using CriterionType = HwProj.Models.CoursesService.ViewModels.CriterionType;
89

910
namespace HwProj.CoursesService.API.Domains
1011
{
@@ -55,6 +56,14 @@ public static HomeworkTaskViewModel ToHomeworkTaskViewModel(this HomeworkTask ta
5556
IsGroupWork = tags.Contains(HomeworkTags.GroupWork),
5657
HomeworkId = task.HomeworkId,
5758
Tags = tags,
59+
Criteria = task.Criteria.Select(c => new CriterionViewModel
60+
{
61+
Id = c.Id,
62+
Type = (CriterionType)c.Type,
63+
Name = c.Name,
64+
MaxPoints = c.MaxPoints
65+
})
66+
.ToList(),
5867
};
5968
}
6069

@@ -103,16 +112,25 @@ public static CoursePreview ToCoursePreview(this Course course)
103112
MentorIds = course.MentorIds.Split('/', splitOptions),
104113
};
105114

106-
public static HomeworkTask ToHomeworkTask(this CreateTaskViewModel createTaskViewModel)
115+
public static Criterion ToCriterion(this CriterionViewModel criterion) => new Criterion
116+
{
117+
Id = criterion.Id,
118+
Type = (Models.CriterionType)criterion.Type,
119+
Name = criterion.Name,
120+
MaxPoints = criterion.MaxPoints
121+
};
122+
123+
public static HomeworkTask ToHomeworkTask(this PostTaskViewModel postTaskViewModel)
107124
=> new HomeworkTask()
108125
{
109-
Title = createTaskViewModel.Title,
110-
Description = createTaskViewModel.Description,
111-
MaxRating = createTaskViewModel.MaxRating,
112-
HasDeadline = createTaskViewModel.HasDeadline,
113-
DeadlineDate = createTaskViewModel.DeadlineDate,
114-
IsDeadlineStrict = createTaskViewModel.IsDeadlineStrict,
115-
PublicationDate = createTaskViewModel.PublicationDate,
126+
Title = postTaskViewModel.Title,
127+
Description = postTaskViewModel.Description,
128+
MaxRating = postTaskViewModel.MaxRating,
129+
HasDeadline = postTaskViewModel.HasDeadline,
130+
DeadlineDate = postTaskViewModel.DeadlineDate,
131+
IsDeadlineStrict = postTaskViewModel.IsDeadlineStrict,
132+
PublicationDate = postTaskViewModel.PublicationDate,
133+
Criteria = postTaskViewModel.Criteria.Select(x => x.ToCriterion()).ToList(),
116134
};
117135

118136
public static Homework ToHomework(this CreateHomeworkViewModel createHomeworkViewModel)

HwProj.CoursesService/HwProj.CoursesService.API/Domains/Validations.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ namespace HwProj.CoursesService.API.Domains
88
{
99
public static class Validator
1010
{
11-
public static List<string> ValidateTask(CreateTaskViewModel task, Homework homework,
11+
public static List<string> ValidateTask(PostTaskViewModel task, Homework homework,
1212
HomeworkTask? previousState = null)
1313
{
1414
var errors = new List<string>();

0 commit comments

Comments
 (0)