using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Newtonsoft.Json.Linq; using System.Linq.Expressions; using System.Reflection.Metadata; using System.Text.Json; using TIAM.Core.Enums; using TIAM.Database.DataLayers; using TIAM.Database.DataLayers.Admins; using TIAM.Database.DataLayers.TransferDestinations; using TIAM.Database.DataLayers.Users; using TIAM.Database.DbContexts; using TIAM.Entities.Transfers; using TIAM.Entities.Users; using TIAMWebApp.Shared.Application.Models; using TIAMWebApp.Shared.Application.Models.ClientSide.UI.WizardModels; using TIAMWebApp.Shared.Application.Models.PageModels; namespace TIAMWebApp.Server.Controllers { [ApiController] [Route("api/v1/[controller]")] public class TransferDataAPIController : ControllerBase { //private static readonly TransferDestination[] Names = new TransferDestination[] //{ // /*"Castle of Buda", "Hungarian National Museum", "Parliament of Hungary", "Heroes square", "Gellert Hill", "Margaret Island"*/ // new() { DestinationId = 1, DestinationName = "Airport", DestinationDescription = "International airport of Budapest", DestinationLatitude = 42.234444f, DestinationLongitude = 39.100010f }, // new() { DestinationId = 2, DestinationName = "Castle of Buda", DestinationDescription = "International airport of Budapest", DestinationLatitude = 42.234444f, DestinationLongitude = 39.100010f }, // new() { DestinationId = 3, DestinationName = "Hungarian National Museum", DestinationDescription = "International airport of Budapest", DestinationLatitude = 42.234444f, DestinationLongitude = 39.100010f }, // new() { DestinationId = 4, DestinationName = "Parliament of Hungary", DestinationDescription = "International airport of Budapest", DestinationLatitude = 42.234444f, DestinationLongitude = 39.100010f }, // new() { DestinationId = 5, DestinationName = "Heroes square", DestinationDescription = "International airport of Budapest", DestinationLatitude = 42.234444f, DestinationLongitude = 39.100010f }, // new() { DestinationId = 6, DestinationName = "Gellert Hill", DestinationDescription = "International airport of Budapest", DestinationLatitude = 42.234444f, DestinationLongitude = 39.100010f }, // new() { DestinationId = 6, DestinationName = "Margaret Island", DestinationDescription = "International airport of Budapest", DestinationLatitude = 42.234444f, DestinationLongitude = 39.100010f } //}; private readonly TransferDestinationDal _transferDestinationDal; private readonly AdminDal _adminDal; private readonly ILogger _logger; public TransferDataAPIController(ILogger logger, TransferDestinationDal transferDestinationDal, AdminDal adminDal) { _logger = logger; _transferDestinationDal = transferDestinationDal; _adminDal = adminDal; } [AllowAnonymous] [HttpGet] [Route(APIUrls.GetTransferDestinationsRouteName)] public async Task> GetTransferDestinations() { return await _transferDestinationDal.Context.TransferDestinations.ToListAsync(); } [AllowAnonymous] [HttpGet] [Route("GetTransferDestinationByCoordinates")] public async Task GetTransferDestinationByCoordinates(double latitude, double longitude) { return null;// await _transferDestinationDal.Context.TransferDestinations.FirstOrDefaultAsync(x => x.Latitude == latitude && x.Longitude == longitude); } [AllowAnonymous] [HttpGet] [Route("GetTransferDestinationByAddress")] public async Task GetTransferDestinationByAddress(string address) { return null;//await _transferDestinationDal.Context.TransferDestinations.FirstOrDefaultAsync(x => x.Address == address); } [AllowAnonymous] [HttpPost] [Route(APIUrls.CreateTransferDestinationRouteName)] public async Task CreateTransferDestination([FromBody] JsonElement serializedTransferDestinationModel) { Console.WriteLine("CreateTransferDestination called!"); if (string.IsNullOrEmpty(serializedTransferDestinationModel.GetRawText())) { return BadRequest("SerializedTramsferDestinationWizardModel is required"); } else { TransferDestination? transferDestination = JObject.Parse(serializedTransferDestinationModel.GetRawText()).ToObject(); if (transferDestination != null) { var id = Guid.NewGuid(); //TransferDestination transferDestination = new TransferDestination(id, transferDestinationModel.Name, transferDestinationModel.Description, transferDestinationModel.AddressString); if (string.IsNullOrEmpty(transferDestination.Name) || string.IsNullOrEmpty(transferDestination.AddressString)) { return BadRequest("Invalid request"); } else { Console.WriteLine($"TransferDestination to be created: {id}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.AddressId}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.Name}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.Price}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.Price2}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.Price3}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.PriceType}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.AddressString}"); Console.WriteLine($"TransferDestination to be created: {transferDestination.Description}"); //await _transferDestinationDal.Context.TransferDestinations.AddAsync(transferDestination); await _adminDal.AddTransferDestinationAsync(transferDestination); return Ok(transferDestination); } } else { return BadRequest("Invalid request"); } } } [AllowAnonymous] [HttpPost] [Route(APIUrls.UpdateTransferDestinationRouteName)] public async Task UpdateTransferDestination([FromBody]JsonElement serializedTransferDestination) { Console.WriteLine("UpdateTransferDestination called!"); if (string.IsNullOrEmpty(serializedTransferDestination.GetRawText())) { Console.WriteLine("Bad request!"); return BadRequest("SerializedTramsferDestinationWizardModel is required"); } else { Console.WriteLine("Serialized model not empty!"); TransferDestination? transferDestination = JObject.Parse(serializedTransferDestination.GetRawText()).ToObject(); Console.WriteLine($"TransferDestination to be updated: {serializedTransferDestination.GetRawText()}"); Console.WriteLine($"TransferDestination to be updated: {transferDestination.AddressString}"); if (transferDestination != null) { //TransferDestination transferDestination = new TransferDestination(id, transferDestinationModel.Name, transferDestinationModel.Description, transferDestinationModel.AddressString); if (transferDestination.Id == Guid.Empty || string.IsNullOrEmpty(transferDestination.Name) || string.IsNullOrEmpty(transferDestination.AddressString)) { Console.WriteLine("Serialized model not empty, but bad request!"); return BadRequest("Invalid request"); } else { Console.WriteLine($"TransferDestination to be updated: {transferDestination.Id}"); Console.WriteLine($"TransferDestination to be updated new name: {transferDestination.Name}"); Console.WriteLine($"TransferDestination to be updated new price: {transferDestination.Price}"); Console.WriteLine($"TransferDestination to be updated new price: {transferDestination.Price2}"); Console.WriteLine($"TransferDestination to be updated new price: {transferDestination.Price3}"); Console.WriteLine($"TransferDestination to be updated new priceType: {transferDestination.PriceType}"); Console.WriteLine($"TransferDestination to be updated new address: {transferDestination.AddressString}"); Console.WriteLine($"TransferDestination to be updated new description: {transferDestination.Description}"); //var dbTransferDestinationJson = _adminDal.GetTransferDestinationJsonById(transferDestination.Id); //Console.WriteLine($"TransferDestination JSON to be updated: {dbTransferDestinationJson}"); //var dbTransferDestination = JObject.Parse(dbTransferDestinationJson).ToObject(); //var dbTransferDestination = _adminDal.GetTransferDestinationById(transferDestination.Id, true); //if (dbTransferDestination.Id != Guid.Empty) //{ // dbTransferDestination.AddressId = transferDestination.AddressId; // dbTransferDestination.Price = transferDestination.Price; // dbTransferDestination.PriceType = transferDestination.PriceType; // dbTransferDestination.Name = transferDestination.Name; // dbTransferDestination.Description = transferDestination.Description; // dbTransferDestination.AddressString = transferDestination.AddressString; // dbTransferDestination.Address = transferDestination.Address; //} //await _transferDestinationDal.Context.TransferDestinations.AddAsync(transferDestination); await _adminDal.UpdateTransferDestinationAsync(transferDestination); return Ok(transferDestination); } } else { return BadRequest("Invalid request"); } } } } }