public async Task <IActionResult> UpdateAsync([FromBody] PersonXTicketDto model) { if (model == null) { return(NotFound()); } var currentUser = await _identityService.GetCurrentUser(); if (currentUser == null) { return(BadRequest(new { error = "You are not allowed!" })); } var person = await _identityService.GetPersonByUserId(currentUser.Id); if (person == null) { return(BadRequest(new { error = "Person does not exist for this user" })); } var personXTicket = await _personXTicketService.GetPersonXTicketById(model.Id); if (personXTicket == null) { return(BadRequest(new { error = "Selected personXTicket was not found" })); } var ticket = await _ticketService.GetTicketById(personXTicket.TicketId); if (ticket == null) { return(BadRequest(new { error = "Selected ticket was not found" })); } ticket.Remaining += model.Returning; personXTicket.NrOfReturned += model.Returning; if (personXTicket.NrOfReturned == personXTicket.NrOfBought) { await _personXTicketService.DeletePersonXTicket(personXTicket, ticket); } else { await _personXTicketService.UpdatePersonXTicket(personXTicket, ticket); } return(Ok()); }
public async Task <IActionResult> Create([FromBody] PersonXTicketDto model) { var currentUser = await _identityService.GetCurrentUser(); if (currentUser == null) { return(BadRequest(new { error = "You are not allowed!" })); } var person = await _identityService.GetPersonByUserId(currentUser.Id); if (person == null) { return(BadRequest(new { error = "Person does not exist for this user" })); } if (!ModelState.IsValid) { return(NotFound()); } if (model == null) { return(NotFound()); } var ticket = await _ticketService.GetTicketById(model.TicketId); if (ticket == null) { return(BadRequest(new { error = "Selected ticket was not found" })); } if (ticket.Remaining <= 0 || ticket.Remaining - model.NrOfBought < 0) { return(BadRequest(new { error = $"There aren't so many tickets available. There are only {ticket.Remaining} more!" })); } if (model.NrOfBought <= 0) { return(BadRequest(new { error = "Number of bought tickets must be higher than 0" })); } var existingLink = await _personXTicketService.ExistingPersonXTicket(model.PersonId, model.TicketId); ticket.Remaining -= model.NrOfBought; if (existingLink != null) { existingLink.NrOfBought += model.NrOfBought; await _personXTicketService.UpdatePersonXTicket(existingLink, ticket); } else { var personXTicket = new PersonXTicket() { TicketId = model.TicketId, NrOfBought = model.NrOfBought, NrOfReturned = 0, PersonId = person.Id }; await _personXTicketService.CreatePersonXTicket(personXTicket, ticket); } return(Ok()); }