Пример #1
0
        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));
        }
Пример #2
0
        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);
        }