using ErrorOr;
using Microsoft.AspNetCore.Mvc;
using MuiCharts.Contracts.Track;
using MuiCharts.Domain.Models;
using MuiCharts.Domain.Repositories;
namespace MuiCharts.Api.Controllers;
///
/// Controller for managing tracks.
///
/// The logger.
/// The track repository.
public class TracksController(
ILogger logger,
ITrackRepository trackRepository
) : ApiControllerBase(logger)
{
private readonly ITrackRepository _repository = trackRepository;
///
/// Creates a new track.
///
/// The request containing the track details.
/// An representing the asynchronous operation result.
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status409Conflict)]
[ProducesDefaultResponseType(typeof(ProblemDetails))]
public async Task CreateTrackAsync(UpsertTrackRequest request)
{
// TODO: Check if points exist
Logger.LogInformation("Creating track with first ID {FirstId} and second ID {SecondId}", request.FirstId, request.SecondId);
if (request.FirstId == request.SecondId)
return Problem([Error.Validation(description: "First ID and second ID cannot be the same.")]);
Track track = new()
{
FirstId = request.FirstId,
SecondId = request.SecondId,
Distance = request.Distance,
Surface = request.Surface,
MaxSpeed = request.MaxSpeed
};
ErrorOr