aboutsummaryrefslogtreecommitdiffstats
path: root/code/api/src/Endpoints/V1/Labels/CreateLabelRoute.cs
blob: d6106aa21fbab4d45a093ba01c87f9f2b2f8e19b (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
namespace IOL.GreatOffice.Api.Endpoints.V1.Labels;

public class CreateLabelRoute : RouteBaseSync.WithRequest<TimeLabel.TimeLabelDto>.WithActionResult<TimeLabel.TimeLabelDto>
{
    private readonly MainAppDatabase _database;

    public CreateLabelRoute(MainAppDatabase database) {
        _database = database;
    }

    /// <summary>
    /// Create a time entry label.
    /// </summary>
    /// <param name="labelTimeLabelDto"></param>
    /// <returns></returns>
    [ApiVersion(ApiSpecV1.VERSION_STRING)]
    [BasicAuthentication(AppConstants.TOKEN_ALLOW_CREATE)]
    [HttpPost("~/v{version:apiVersion}/labels/create")]
    public override ActionResult<TimeLabel.TimeLabelDto> Handle(TimeLabel.TimeLabelDto labelTimeLabelDto) {
        var duplicate = _database.TimeLabels
            .Where(c => c.UserId == LoggedInUser.Id)
            .Any(c => c.Name.Trim() == labelTimeLabelDto.Name.Trim());
        if (duplicate) {
            var label = _database.TimeLabels
                .Where(c => c.UserId == LoggedInUser.Id)
                .SingleOrDefault(c => c.Name.Trim() == labelTimeLabelDto.Name.Trim());

            if (label != default) {
                return Ok(label.AsDto);
            }
        }

        var newLabel = new TimeLabel(LoggedInUser) {
            Name = labelTimeLabelDto.Name.Trim(),
            Color = labelTimeLabelDto.Color
        };
        newLabel.SetOwnerIds(LoggedInUser.Id);

        _database.TimeLabels.Add(newLabel);
        _database.SaveChanges();
        labelTimeLabelDto.Id = newLabel.Id;
        return Ok(labelTimeLabelDto);
    }
}