< Summary

Information
Class: LGDXRobotCloud.API.Areas.Navigation.Controllers.WaypointsController
Assembly: LGDXRobotCloud.API
File(s): /builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Areas/Navigation/Controllers/WaypointsController.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 41
Coverable lines: 41
Total lines: 101
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 10
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)0%2040%
GetWaypoints()0%620%
SearchWaypoints()100%210%
GetWaypoint()100%210%
CreateWaypoint()100%210%
UpdateWaypoint()0%620%
TestDeleteWaypoint()100%210%
DeleteWaypoint()0%620%

File(s)

/builds/yukaitung/lgdxrobot2-cloud/LGDXRobotCloud.API/Areas/Navigation/Controllers/WaypointsController.cs

#LineLine coverage
 1using LGDXRobotCloud.API.Authorisation;
 2using LGDXRobotCloud.API.Configurations;
 3using LGDXRobotCloud.API.Services.Navigation;
 4using LGDXRobotCloud.Data.Models.Business.Navigation;
 5using LGDXRobotCloud.Data.Models.DTOs.V1.Commands;
 6using LGDXRobotCloud.Data.Models.DTOs.V1.Responses;
 7using LGDXRobotCloud.Utilities.Constants;
 8using Microsoft.AspNetCore.Authentication.JwtBearer;
 9using Microsoft.AspNetCore.Authorization;
 10using Microsoft.AspNetCore.Mvc;
 11using Microsoft.Extensions.Options;
 12using System.Text.Json;
 13
 14namespace LGDXRobotCloud.API.Areas.Navigation.Controllers;
 15
 16[ApiController]
 17[Area("Navigation")]
 18[Route("[area]/[controller]")]
 19[Authorize(AuthenticationSchemes = LgdxRobotCloudAuthenticationSchemes.ApiKeyOrCertificationScheme)]
 20[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
 21[ValidateLgdxUserAccess]
 022public sealed class WaypointsController(
 023    IWaypointService waypointService,
 024    IOptionsSnapshot<LgdxRobotCloudConfiguration> lgdxRobotCloudConfiguration
 025  ) : ControllerBase
 26{
 027  private readonly IWaypointService _waypointService = waypointService ?? throw new ArgumentNullException(nameof(waypoin
 028  private readonly LgdxRobotCloudConfiguration _lgdxRobotCloudConfiguration = lgdxRobotCloudConfiguration.Value ?? throw
 29
 30  [HttpGet("")]
 31  [ProducesResponseType(typeof(IEnumerable<WaypointListDto>), StatusCodes.Status200OK)]
 32  public async Task<ActionResult<IEnumerable<WaypointListDto>>> GetWaypoints(int? realmId, string? name, int pageNumber 
 033  {
 034    pageSize = (pageSize > _lgdxRobotCloudConfiguration.ApiMaxPageSize) ? _lgdxRobotCloudConfiguration.ApiMaxPageSize : 
 035    var (waypoints, PaginationHelper) = await _waypointService.GetWaypointsAsync(realmId, name, pageNumber, pageSize);
 036    Response.Headers.Append("X-Pagination", JsonSerializer.Serialize(PaginationHelper));
 037    return Ok(waypoints.ToDto());
 038  }
 39
 40  [HttpGet("Search")]
 41  [ProducesResponseType(typeof(IEnumerable<WaypointSearchDto>), StatusCodes.Status200OK)]
 42  public async Task<ActionResult<IEnumerable<WaypointSearchDto>>> SearchWaypoints(int realmId, string? name)
 043  {
 044    var waypoints = await _waypointService.SearchWaypointsAsync(realmId, name);
 045    return Ok(waypoints.ToDto());
 046  }
 47
 48  [HttpGet("{id}", Name = "GetWaypoint")]
 49  [ProducesResponseType(typeof(WaypointDto), StatusCodes.Status200OK)]
 50  [ProducesResponseType(StatusCodes.Status404NotFound)]
 51  public async Task<ActionResult<WaypointDto>> GetWaypoint(int id)
 052  {
 053    var waypoint = await _waypointService.GetWaypointAsync(id);
 054    return Ok(waypoint.ToDto());
 055  }
 56
 57  [HttpPost("")]
 58  [ProducesResponseType(typeof(WaypointDto), StatusCodes.Status201Created)]
 59  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 60  public async Task<ActionResult> CreateWaypoint(WaypointCreateDto waypointCreateDto)
 061  {
 062    var waypoint = await _waypointService.CreateWaypointAsync(waypointCreateDto.ToBusinessModel());
 063    return CreatedAtRoute(nameof(GetWaypoint), new { id = waypoint.Id }, waypoint.ToDto());
 064  }
 65
 66  [HttpPut("{id}")]
 67  [ProducesResponseType(StatusCodes.Status204NoContent)]
 68  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 69  [ProducesResponseType(StatusCodes.Status404NotFound)]
 70  public async Task<ActionResult> UpdateWaypoint(int id, WaypointUpdateDto waypointUpdateDto)
 071  {
 072    if (!await _waypointService.UpdateWaypointAsync(id, waypointUpdateDto.ToBusinessModel()))
 073    {
 074      return NotFound();
 75    }
 076    return NoContent();
 077  }
 78
 79  [HttpPost("{id}/TestDelete")]
 80  [ProducesResponseType(StatusCodes.Status200OK)]
 81  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 82  public async Task<ActionResult> TestDeleteWaypoint(int id)
 083  {
 084    await _waypointService.TestDeleteWaypointAsync(id);
 085    return Ok();
 086  }
 87
 88  [HttpDelete("{id}")]
 89  [ProducesResponseType(StatusCodes.Status204NoContent)]
 90  [ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
 91  [ProducesResponseType(StatusCodes.Status404NotFound)]
 92  public async Task<ActionResult> DeleteWaypoint(int id)
 093  {
 094    await _waypointService.TestDeleteWaypointAsync(id);
 095    if (!await _waypointService.DeleteWaypointAsync(id))
 096    {
 097      return NotFound();
 98    }
 099    return NoContent();
 0100  }
 101}