Example #1
0
        public async Task <IActionResult> GetRoomOpeningsByRoomId(
            Guid roomId,
            [FromQuery] PagingOptions pagingOptions,
            [FromQuery] SortOptions <OpeningResource, OpeningEntity> sortOptions,
            [FromQuery] SearchOptions <OpeningResource, OpeningEntity> searchOptions,
            CancellationToken ct)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(new ApiError(ModelState)));
            }

            pagingOptions.Offset = pagingOptions.Offset ?? _defaultPagingOptions.Offset;
            pagingOptions.Limit  = pagingOptions.Limit ?? _defaultPagingOptions.Limit;

            var room = await _roomService.GetRoomAsync(roomId, ct);

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

            var openings = await _openingService.GetOpeningsByRoomIdAsync(
                roomId,
                pagingOptions,
                sortOptions,
                searchOptions,
                ct);

            var collectionLink = Link.ToCollection(
                nameof(GetRoomOpeningsByRoomId), new { roomId });

            var collection = PagedCollection <OpeningResource> .Create <OpeningsResponse>(
                collectionLink,
                openings.Items.ToArray(),
                openings.TotalSize,
                pagingOptions);

            collection.OpeningsQuery = FormMetadata.FromResource <OpeningResource>(
                Link.ToForm(nameof(GetRoomOpeningsByRoomId),
                            new { roomId }, Link.GetMethod, Form.QueryRelation));

            return(Ok(collection));
        }