using System.Linq; using BlueWest.Data; using BlueWest.WebApi.MySQL; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace BlueWest.WebApi.Controllers; [ApiController] [Route("[controller]")] public class CountryController : ControllerBase { private readonly CountriesDbContext _dbContext; public CountryController(CountriesDbContext dbContext) { _dbContext = dbContext; } /// /// Add Country /// /// /// The newly created country /// /// /// Creates a Country. /// /// /// Sample request: /// /// POST /Countries /// { /// "code": 1, /// "stateName": "United States of America", /// "tld": "us" /// } /// /// /// Returns the newly created country [ProducesResponseType(StatusCodes.Status201Created)] [HttpPost] public ActionResult AddCountry(Country country) { _dbContext.Countries.Add(country); _dbContext.SaveChanges(); return CreatedAtRoute(nameof(GetCountryById), new {countryId = country.Code}, country); } /// /// Updates a Country /// /// Payload with country data to update. Note that the Code is the primary key and can't be changed. /// [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [HttpPut("countries/{country.Code}")] public ActionResult UpdateCountry(Country countryToUpdate) { var country = _dbContext.Countries.FirstOrDefault(x => x.Code == countryToUpdate.Code); if (country != null) { var updatedCountry = new Country(country.Code, countryToUpdate.StateName, countryToUpdate.TLD); _dbContext.Countries.Update(updatedCountry); return Ok(updatedCountry); } return new NotFoundResult(); } /// /// Get countries /// /// [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [HttpGet("countries")] public ActionResult GetCountries() { var array = _dbContext.Countries; if (array != null) { return Ok(array.ToArray()); } return new NotFoundResult(); } /// /// Get Country by Id /// /// /// [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [HttpGet("countries/{countryId}", Name = nameof(GetCountryById))] public ActionResult GetCountryById(int countryId) { var array = _dbContext.Countries.FirstOrDefault(x => x.Code == countryId); if (array != null) { return Ok(array); } return new NotFoundResult(); } }