blob: bc6247fbdff65c7351287f487fcc46180dff3def (
plain) (
blame)
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
|
using IOL.GreatOffice.Api.Models.Database;
namespace IOL.GreatOffice.Api.Endpoints.V1.Projects;
public class CreateProjectRoute : RouteBaseAsync.WithRequest<CreateProjectPayload>.WithActionResult
{
private readonly MainAppDatabase _database;
private readonly IStringLocalizer<SharedResources> _localizer;
public CreateProjectRoute(MainAppDatabase database, IStringLocalizer<SharedResources> localizer) {
_database = database;
_localizer = localizer;
}
[HttpPost("~/v{version:apiVersion}/projects/create")]
public override async Task<ActionResult> HandleAsync(CreateProjectPayload request, CancellationToken cancellationToken = default) {
var problem = new KnownProblemModel();
if (request.Name.IsNullOrEmpty()) {
problem.AddError("name", _localizer["Name is a required field"]);
}
var project = new Project(LoggedInUser) {
Name = request.Name,
Description = request.Description,
Start = request.Start,
Stop = request.Stop,
};
project.SetOwnerIds(default, LoggedInUser.TenantId);
foreach (var customerId in request.CustomerIds) {
var customer = _database.Customers.FirstOrDefault(c => c.Id == customerId);
if (customer == default) {
problem.AddError("customer_" + customerId, _localizer["Customer not found"]);
continue;
}
project.Customers.Add(customer);
}
foreach (var member in request.Members) {
var user = _database.Users.FirstOrDefault(c => c.Id == member.UserId);
if (user == default) {
problem.AddError("members_" + member.UserId, _localizer["User not found"]);
continue;
}
project.Members.Add(new ProjectMember() {
Project = project,
User = user,
Role = member.Role
});
}
if (problem.Errors.Any()) {
problem.Title = _localizer["Invalid form"];
problem.Subtitle = _localizer["One or more validation errors occured"];
return KnownProblem(problem);
}
_database.Projects.Add(project);
await _database.SaveChangesAsync(cancellationToken);
return Ok();
}
}
public class CreateProjectResponse
{ }
public class CreateProjectPayload
{
public string Name { get; set; }
public string Description { get; set; }
public DateTime Start { get; set; }
public DateTime Stop { get; set; }
public List<Guid> CustomerIds { get; set; }
public List<ProjectMember> Members { get; set; }
public class ProjectMember
{
public Guid UserId { get; set; }
public ProjectRole Role { get; set; }
}
}
|