-
Notifications
You must be signed in to change notification settings - Fork 22
Expand file tree
/
Copy pathExpertsController.cs
More file actions
136 lines (119 loc) · 5.55 KB
/
Copy pathExpertsController.cs
File metadata and controls
136 lines (119 loc) · 5.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
using System.Net;
using System.Threading.Tasks;
using AutoMapper;
using HwProj.AuthService.Client;
using HwProj.CoursesService.Client;
using HwProj.Models.AuthService.DTO;
using HwProj.Models.AuthService.ViewModels;
using HwProj.Models.CoursesService.DTO;
using HwProj.Models.Result;
using HwProj.Models.Roles;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace HwProj.APIGateway.API.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ExpertsController : AggregationController
{
private readonly ICoursesServiceClient _coursesClient;
private readonly IMapper _mapper;
public ExpertsController(ICoursesServiceClient coursesClient,
IAuthServiceClient authServiceClient,
IMapper mapper) : base(authServiceClient)
{
_coursesClient = coursesClient;
_mapper = mapper;
}
[HttpPost("invite")]
[Authorize(Roles = Roles.LecturerRole)]
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
public async Task<IActionResult> Invite(InviteExpertViewModel inviteExpertView)
{
var expert = await AuthServiceClient.GetAccountDataByEmail(inviteExpertView.UserEmail);
if (expert == null)
return NotFound("Эксперт с такой почтой не найден");
if (expert.Role != Roles.ExpertRole || inviteExpertView.UserId != expert.UserId)
return BadRequest("Пользователь с такой почтой не является экспертом");
if (inviteExpertView.UserId != expert.UserId)
return BadRequest("Идентификатор эксперта с такой почтой не соответствует переданному идентификатору");
var courseFilterDto = _mapper.Map<CreateCourseFilterDTO>(inviteExpertView);
var courseFilterCreationResult =
await _coursesClient.CreateOrUpdateCourseFilter(inviteExpertView.CourseId, courseFilterDto);
if (!courseFilterCreationResult.Succeeded) return BadRequest(courseFilterCreationResult.Errors);
var acceptanceResult = await _coursesClient.AcceptLecturer(inviteExpertView.CourseId,
inviteExpertView.UserEmail, inviteExpertView.UserId);
return Ok(acceptanceResult);
}
[HttpPost("register")]
[Authorize(Roles = Roles.LecturerRole)]
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
public async Task<IActionResult> Register(RegisterExpertViewModel model)
{
var result = await AuthServiceClient.RegisterExpert(model, UserId);
return Ok(result);
}
[HttpPost("login")]
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
public async Task<IActionResult> Login(TokenCredentials credentials)
{
var result = await AuthServiceClient.LoginExpert(credentials).ConfigureAwait(false);
return Ok(result);
}
[HttpGet("getToken")]
[Authorize(Roles = Roles.LecturerRole)]
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> GetToken(string expertEmail)
{
var tokenMeta = await AuthServiceClient.GetExpertToken(expertEmail);
return Ok(tokenMeta);
}
[HttpPost("setProfileIsEdited")]
[Authorize(Roles = Roles.ExpertRole)]
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
public async Task<IActionResult> SetProfileIsEdited()
{
var result = await AuthServiceClient.SetExpertProfileIsEdited(UserId);
return Ok(result);
}
[HttpGet("isProfileEdited")]
[Authorize(Roles = Roles.ExpertRole)]
[ProducesResponseType(typeof(Result<bool>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> GetIsProfileEdited()
{
var result = await AuthServiceClient.GetIsExpertProfileEdited(UserId);
return Ok(result);
}
[HttpGet("getAll")]
[Authorize(Roles = Roles.LecturerRole)]
[ProducesResponseType(typeof(ExpertDataDTO[]), (int)HttpStatusCode.OK)]
public async Task<IActionResult> GetAll()
{
var result = await AuthServiceClient.GetAllExperts();
return Ok(result);
}
[HttpPost("updateTags")]
[Authorize(Roles = Roles.LecturerRole)]
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
public async Task<IActionResult> UpdateTags(UpdateExpertTagsDTO updateExpertTagsDto)
{
var result = await AuthServiceClient.UpdateExpertTags(UserId, updateExpertTagsDto);
return Ok(result);
}
[HttpGet("getStudentToken")]
[Authorize(Roles = Roles.LecturerRole)]
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> GetStudentToken(string expertEmail)
{
var tokenMeta = await AuthServiceClient.GetStudentToken(expertEmail);
return Ok(tokenMeta);
}
[HttpPost("loginWithToken")]
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
public async Task<IActionResult> LoginWithToken([FromBody] TokenCredentials credentials)
{
var result = await AuthServiceClient.LoginWithToken(credentials);
return Ok(result);
}
}
}