public IActionResult PostEventRegistration(long id, RegistrationData regData) { var evtDbo = _context.Events.Find(id); if (evtDbo == null) { return(NotFound()); } // https://docs.microsoft.com/en-us/ef/ef6/saving/transactions // Not sure what happens if the event was removed in the meamwhile _context.Entry(evtDbo).Collection(e => e.Registrations).Load(); using (var dbContextTransaction = _context.Database.BeginTransaction()) { var regDbo = new RegistrationDbo(); regDbo.CopyFrom(regData); evtDbo.Registrations.Add(regDbo); _context.Update(evtDbo); _context.SaveChanges(); dbContextTransaction.Commit(); } if (evtDbo.Registrations == null) { evtDbo.Registrations = new List <RegistrationDbo>(); } var evtDto = CreateEventResponse(evtDbo); return(CreatedAtAction(nameof(GetEvent), new { evtDbo.EventDboId }, evtDto)); }
private RegistrationResponse CreateRegistrationResponse(RegistrationDbo dbo, bool canAddRegistrations, bool canPatchEvent) { var response = new RegistrationResponse { Id = dbo.RegistrationDboId, Data = new RegistrationData() }; response.Data.CopyFrom(dbo); // registrations from an event in the past nor from a locked event can be deleted or patched. if (canAddRegistrations && canPatchEvent) { response.AddHref(HrefType.DELETE, $"api/events/{dbo.EventDboId}/registrations/{dbo.RegistrationDboId}"); response.AddHref(HrefType.PATCH, $"api/events/{dbo.EventDboId}/registrations/{dbo.RegistrationDboId}"); } return(response); }