Ejemplo n.º 1
0
        public async Task <IActionResult> PostReservation([FromBody] ReservationRequest item)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = await GetApplicationUser();

            if (!_context.ObjectTags.Any(c => c.Id == item.ObjectTagId))
            {
                return(BadRequest());
            }

            var reservation = item.ToDataModel(user.Id);

            // TODO: 予約可能かどうか、判定
            // TODO: 先約にリクエストを送る処理なども検討...?

            _context.Reservations.Add(reservation);
            try
            {
                await _context.SaveChangesAsync();

                _reservationService.OnAddReservation(reservation);

                await RegisterReservationUser(item.Users, reservation);

                await _context.SaveChangesAsync();
            }
            catch (DbUpdateException)
            {
                if (ReservationExists(reservation.Id))
                {
                    return(new StatusCodeResult(StatusCodes.Status409Conflict));
                }
                else
                {
                    throw;
                }
            }

            var response = await _context.IncludeReservationContext().FirstOrDefaultAsync(c => c.Id == reservation.Id);

            return(CreatedAtAction("GetReservation", new { id = reservation.Id }, response.ToApiModel()));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> PutReservation([FromRoute] string id, [FromBody] ReservationRequest item)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            if (id != item.Id)
            {
                return(BadRequest());
            }

            var reservation = await _context.IncludeReservationContext().FirstOrDefaultAsync(m => m.Id == id);

            if (reservation == null)
            {
                return(NotFound());
            }

            var user = await GetApplicationUser();

            if (user.Id != reservation.OwnerUserId)
            {
                return(Forbid());
            }

            if (!_context.ObjectTags.Any(c => c.Id == item.ObjectTagId))
            {
                return(BadRequest());
            }

            // TODO: 予約可能かどうか、判定
            reservation = item.ToDataModel(user.Id, reservation);
            _context.Entry(reservation).State = EntityState.Modified;

            try
            {
                var userIds = _context.ReservationUsers.Select(c => c.UserId).ToList();
                await RemoveReservationUser(userIds, reservation.Id);

                await _context.SaveChangesAsync();

                _reservationService.OnEditReservation(reservation);

                await RegisterReservationUser(item.Users, reservation);

                await _context.SaveChangesAsync();
            }
            catch (DbUpdateConcurrencyException)
            {
                if (!ReservationExists(id))
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            var response = await _context.IncludeReservationContext().FirstOrDefaultAsync(c => c.Id == reservation.Id);

            return(Ok(response.ToApiModel()));
        }