Skip to content

Commit e06fafb

Browse files
committed
wip
1 parent 3d1a2a1 commit e06fafb

File tree

226 files changed

+6462
-6732
lines changed

Some content is hidden

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

226 files changed

+6462
-6732
lines changed

HwProj.APIGateway/HwProj.APIGateway.API/Controllers/AccountController.cs

Lines changed: 109 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -14,135 +14,134 @@
1414
using Microsoft.AspNetCore.Authorization;
1515
using Microsoft.AspNetCore.Mvc;
1616

17-
namespace HwProj.APIGateway.API.Controllers
18-
{
19-
[Route("api/[controller]")]
20-
[ApiController]
21-
public class AccountController : AggregationController
22-
{
23-
private readonly ICoursesServiceClient _coursesClient;
24-
private readonly ISolutionsServiceClient _solutionsServiceClient;
17+
namespace HwProj.APIGateway.API.Controllers;
2518

26-
public AccountController(
27-
IAuthServiceClient authClient,
28-
ICoursesServiceClient coursesClient,
29-
ISolutionsServiceClient solutionsServiceClient) : base(authClient)
30-
{
31-
_coursesClient = coursesClient;
32-
_solutionsServiceClient = solutionsServiceClient;
33-
}
19+
[Route("api/[controller]")]
20+
[ApiController]
21+
public class AccountController : AggregationController
22+
{
23+
private readonly ICoursesServiceClient _coursesClient;
24+
private readonly ISolutionsServiceClient _solutionsServiceClient;
3425

35-
[HttpGet("getUserData/{userId}")]
36-
[ProducesResponseType(typeof(AccountDataDto), (int)HttpStatusCode.OK)]
37-
public async Task<IActionResult> GetUserDataById(string userId)
38-
{
39-
var result = await AuthServiceClient.GetAccountData(userId);
40-
return result == null
41-
? NotFound() as IActionResult
42-
: Ok(result);
43-
}
26+
public AccountController(
27+
IAuthServiceClient authClient,
28+
ICoursesServiceClient coursesClient,
29+
ISolutionsServiceClient solutionsServiceClient) : base(authClient)
30+
{
31+
_coursesClient = coursesClient;
32+
_solutionsServiceClient = solutionsServiceClient;
33+
}
4434

45-
//TODO: separate for mentor and student
46-
[HttpGet("getUserData")]
47-
[Authorize]
48-
[ProducesResponseType(typeof(UserDataDto), (int)HttpStatusCode.OK)]
49-
public async Task<IActionResult> GetUserData()
50-
{
51-
var getAccountDataTask = AuthServiceClient.GetAccountData(UserId);
52-
var getCoursesTask = _coursesClient.GetAllUserCourses();
35+
[HttpGet("getUserData/{userId}")]
36+
[ProducesResponseType(typeof(AccountDataDto), (int)HttpStatusCode.OK)]
37+
public async Task<IActionResult> GetUserDataById(string userId)
38+
{
39+
var result = await AuthServiceClient.GetAccountData(userId);
40+
return result == null
41+
? NotFound()
42+
: Ok(result);
43+
}
5344

54-
await Task.WhenAll(getAccountDataTask, getCoursesTask);
45+
//TODO: separate for mentor and student
46+
[HttpGet("getUserData")]
47+
[Authorize]
48+
[ProducesResponseType(typeof(UserDataDto), (int)HttpStatusCode.OK)]
49+
public async Task<IActionResult> GetUserData()
50+
{
51+
var getAccountDataTask = AuthServiceClient.GetAccountData(UserId);
52+
var getCoursesTask = _coursesClient.GetAllUserCourses();
5553

56-
var courses = GetCoursePreviews(getCoursesTask.Result);
54+
await Task.WhenAll(getAccountDataTask, getCoursesTask);
5755

58-
if (User.IsInRole(Roles.LecturerRole))
59-
{
60-
return Ok(new UserDataDto
61-
{
62-
UserData = getAccountDataTask.Result,
63-
Courses = await courses,
64-
TaskDeadlines = Array.Empty<TaskDeadlineView>()
65-
});
66-
}
67-
68-
var taskDeadlines = await _coursesClient.GetTaskDeadlines();
69-
var taskIds = taskDeadlines.Select(t => t.TaskId).ToArray();
70-
var solutions = await _solutionsServiceClient.GetLastTaskSolutions(taskIds, UserId);
71-
var taskDeadlinesInfo = taskDeadlines.Select((d, i) => new TaskDeadlineView
72-
{
73-
Deadline = d,
74-
SolutionState = solutions[i]?.State,
75-
Rating = solutions[i]?.Rating,
76-
MaxRating = taskDeadlines[i].MaxRating
77-
}).ToArray();
56+
var courses = GetCoursePreviews(getCoursesTask.Result);
7857

79-
var aggregatedResult = new UserDataDto
58+
if (User.IsInRole(Roles.LecturerRole))
59+
{
60+
return Ok(new UserDataDto
8061
{
8162
UserData = getAccountDataTask.Result,
8263
Courses = await courses,
83-
TaskDeadlines = taskDeadlinesInfo
84-
};
85-
return Ok(aggregatedResult);
64+
TaskDeadlines = Array.Empty<TaskDeadlineView>()
65+
});
8666
}
8767

88-
[HttpPost("register")]
89-
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
90-
public async Task<IActionResult> Register(RegisterViewModel model)
68+
var taskDeadlines = await _coursesClient.GetTaskDeadlines();
69+
var taskIds = taskDeadlines.Select(t => t.TaskId).ToArray();
70+
var solutions = await _solutionsServiceClient.GetLastTaskSolutions(taskIds, UserId);
71+
var taskDeadlinesInfo = taskDeadlines.Select((d, i) => new TaskDeadlineView
9172
{
92-
var result = await AuthServiceClient.Register(model);
93-
return Ok(result);
94-
}
73+
Deadline = d,
74+
SolutionState = solutions[i]?.State,
75+
Rating = solutions[i]?.Rating,
76+
MaxRating = taskDeadlines[i].MaxRating
77+
}).ToArray();
9578

96-
[HttpPost("login")]
97-
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
98-
public async Task<IActionResult> Login(LoginViewModel model)
79+
var aggregatedResult = new UserDataDto
9980
{
100-
var tokenMeta = await AuthServiceClient.Login(model).ConfigureAwait(false);
101-
return Ok(tokenMeta);
102-
}
81+
UserData = getAccountDataTask.Result,
82+
Courses = await courses,
83+
TaskDeadlines = taskDeadlinesInfo
84+
};
85+
return Ok(aggregatedResult);
86+
}
10387

104-
[HttpPut("edit")]
105-
[Authorize]
106-
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
107-
public async Task<IActionResult> Edit(EditAccountViewModel model)
108-
{
109-
var result = await AuthServiceClient.Edit(model, UserId);
110-
return Ok(result);
111-
}
88+
[HttpPost("register")]
89+
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
90+
public async Task<IActionResult> Register(RegisterViewModel model)
91+
{
92+
var result = await AuthServiceClient.Register(model);
93+
return Ok(result);
94+
}
11295

113-
[HttpPost("inviteNewLecturer")]
114-
[Authorize(Roles = Roles.LecturerRole)]
115-
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
116-
public async Task<IActionResult> InviteNewLecturer(InviteLecturerViewModel model)
117-
{
118-
var result = await AuthServiceClient.InviteNewLecturer(model).ConfigureAwait(false);
119-
return Ok(result);
120-
}
96+
[HttpPost("login")]
97+
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
98+
public async Task<IActionResult> Login(LoginViewModel model)
99+
{
100+
var tokenMeta = await AuthServiceClient.Login(model).ConfigureAwait(false);
101+
return Ok(tokenMeta);
102+
}
121103

122-
[HttpPost("google")]
123-
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
124-
public async Task<IActionResult> LoginByGoogle(string tokenId)
125-
{
126-
var tokenMeta = await AuthServiceClient.LoginByGoogle(tokenId).ConfigureAwait(false);
127-
return Ok(tokenMeta);
128-
}
104+
[HttpPut("edit")]
105+
[Authorize]
106+
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
107+
public async Task<IActionResult> Edit(EditAccountViewModel model)
108+
{
109+
var result = await AuthServiceClient.Edit(model, UserId);
110+
return Ok(result);
111+
}
129112

130-
[HttpPut("editExternal")]
131-
[Authorize]
132-
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
133-
public async Task<IActionResult> EditExternal(EditExternalViewModel model)
134-
{
135-
var result = await AuthServiceClient.EditExternal(model, UserId);
136-
return Ok(result);
137-
}
113+
[HttpPost("inviteNewLecturer")]
114+
[Authorize(Roles = Roles.LecturerRole)]
115+
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
116+
public async Task<IActionResult> InviteNewLecturer(InviteLecturerViewModel model)
117+
{
118+
var result = await AuthServiceClient.InviteNewLecturer(model).ConfigureAwait(false);
119+
return Ok(result);
120+
}
138121

139-
[HttpGet("getAllStudents")]
140-
[Authorize(Roles = Roles.LecturerRole)]
141-
[ProducesResponseType(typeof(AccountDataDto[]), (int)HttpStatusCode.OK)]
142-
public async Task<IActionResult> GetAllStudents()
143-
{
144-
var result = await AuthServiceClient.GetAllStudents();
145-
return Ok(result);
146-
}
122+
[HttpPost("google")]
123+
[ProducesResponseType(typeof(Result<TokenCredentials>), (int)HttpStatusCode.OK)]
124+
public async Task<IActionResult> LoginByGoogle(string tokenId)
125+
{
126+
var tokenMeta = await AuthServiceClient.LoginByGoogle(tokenId).ConfigureAwait(false);
127+
return Ok(tokenMeta);
128+
}
129+
130+
[HttpPut("editExternal")]
131+
[Authorize]
132+
[ProducesResponseType(typeof(Result), (int)HttpStatusCode.OK)]
133+
public async Task<IActionResult> EditExternal(EditExternalViewModel model)
134+
{
135+
var result = await AuthServiceClient.EditExternal(model, UserId);
136+
return Ok(result);
137+
}
138+
139+
[HttpGet("getAllStudents")]
140+
[Authorize(Roles = Roles.LecturerRole)]
141+
[ProducesResponseType(typeof(AccountDataDto[]), (int)HttpStatusCode.OK)]
142+
public async Task<IActionResult> GetAllStudents()
143+
{
144+
var result = await AuthServiceClient.GetAllStudents();
145+
return Ok(result);
147146
}
148147
}

HwProj.APIGateway/HwProj.APIGateway.API/Controllers/AggregationController.cs

Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,38 @@
55
using HwProj.Models.CoursesService.ViewModels;
66
using Microsoft.AspNetCore.Mvc;
77

8-
namespace HwProj.APIGateway.API.Controllers
8+
namespace HwProj.APIGateway.API.Controllers;
9+
10+
public class AggregationController : ControllerBase
911
{
10-
public class AggregationController : ControllerBase
11-
{
12-
protected readonly IAuthServiceClient AuthServiceClient;
12+
protected readonly IAuthServiceClient AuthServiceClient;
1313

14-
protected AggregationController(IAuthServiceClient authServiceClient)
15-
{
16-
AuthServiceClient = authServiceClient;
17-
}
14+
protected AggregationController(IAuthServiceClient authServiceClient)
15+
{
16+
AuthServiceClient = authServiceClient;
17+
}
1818

19-
protected string? UserId =>
20-
Request.HttpContext.User.Claims
21-
.FirstOrDefault(claim => claim.Type.ToString() == "_id")
22-
?.Value;
19+
protected string? UserId =>
20+
Request.HttpContext.User.Claims
21+
.FirstOrDefault(claim => claim.Type.ToString() == "_id")
22+
?.Value;
2323

24-
protected async Task<CoursePreviewView[]> GetCoursePreviews(CoursePreview[] courses)
25-
{
26-
var getMentorsTasks = courses.Select(t => AuthServiceClient.GetAccountsData(t.MentorIds)).ToList();
27-
await Task.WhenAll(getMentorsTasks);
28-
var mentorDTOs = getMentorsTasks.Select(t => t.Result);
24+
protected async Task<CoursePreviewView[]> GetCoursePreviews(CoursePreview[] courses)
25+
{
26+
var getMentorsTasks = courses.Select(t => AuthServiceClient.GetAccountsData(t.MentorIds)).ToList();
27+
await Task.WhenAll(getMentorsTasks);
28+
var mentorDTOs = getMentorsTasks.Select(t => t.Result);
2929

30-
var result = courses.Zip(mentorDTOs, (course, mentors) =>
31-
new CoursePreviewView
32-
{
33-
Id = course.Id,
34-
Name = course.Name,
35-
GroupName = course.GroupName,
36-
IsCompleted = course.IsCompleted,
37-
Mentors = mentors.Where(t => t != null).ToArray()
38-
}).ToArray();
30+
var result = courses.Zip(mentorDTOs, (course, mentors) =>
31+
new CoursePreviewView
32+
{
33+
Id = course.Id,
34+
Name = course.Name,
35+
GroupName = course.GroupName,
36+
IsCompleted = course.IsCompleted,
37+
Mentors = mentors.Where(t => t != null).ToArray()
38+
}).ToArray();
3939

40-
return result;
41-
}
40+
return result;
4241
}
43-
}
42+
}

0 commit comments

Comments
 (0)