using BlueWest.Data; using BlueWest.WebApi.Tools; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using PerformanceSolution.Data; namespace BlueWest.WebApi.Controllers { [ApiController] [Route("[controller]")] public class UserController : ControllerBase { [ProducesResponseType(StatusCodes.Status200OK)] [HttpGet] public ActionResult Get() { if (MemoryData.UserList != null) { return Ok(MemoryData.UserList); } return new NotFoundResult(); } [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status404NotFound)] [HttpGet("{userId}", Name = nameof(GetUserById))] public ActionResult GetUserById(int userId) { User user = MemoryData.GetUserById(userId); if (user != null) { return Ok(user); } return new NotFoundResult(); } [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [HttpGet("{userId}/transactions")] public ActionResult GetTransactions(int userId) { var user = MemoryData.GetUserById(userId); var transactions = user.FinanceTransactions; if (transactions != null) { return Ok(transactions); } return new NotFoundResult(); } [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [HttpGet("{userId}/transactions/{transactionId}")] public ActionResult GetTransactionsById(int userId, int transactionId) { var user = MemoryData.GetUserById(userId); var transactions = user?.FinanceTransactions; FinanceTransaction? transaction = transactions?.FirstOrNull(t => t.Id == transactionId); if (transaction != null) { return Ok(transaction); } return new NotFoundResult(); } [ProducesResponseType(StatusCodes.Status201Created)] [HttpPost] public ActionResult AddOrModifyUser(UserUpdateDto userUpdateDto) { var user = MemoryData.AddOrModifyUser(userUpdateDto); return CreatedAtRoute(nameof(GetUserById), new {userId = user.Id}, user); } [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [HttpPut("{userId}")] public ActionResult UpdateUser(int userId, UserUpdateDto userUpdate) { var result = MemoryData.UpdateUser(userId, userUpdate); if (result != null) return Ok(result); return BadRequest(); } [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [HttpDelete("{id}")] public ActionResult DeleteUser(int id) { bool result = MemoryData.RemoveUser(id); if (result) { return NoContent(); } return new BadRequestResult(); } [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] [HttpPost("{userId}/transactions")] public ActionResult PostTransaction(int userId, FinanceTransaction financeTransaction) { FinanceTransaction? result = MemoryData.AddFinanceTransaction(userId, financeTransaction); if(result != null) return Ok(result); return new BadRequestResult(); } } }