Skip to content

Commit

Permalink
TABP-163 Modify GetCityDetails endpoint to return AdminCityDetailsVie…
Browse files Browse the repository at this point in the history
…wModel on admin request
  • Loading branch information
izzat5233 committed Aug 20, 2024
1 parent b5c8292 commit 94d1a25
Showing 1 changed file with 23 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using TravelAccommodationBookingPlatform.Application.Cities.Queries.CityDetails;
using TravelAccommodationBookingPlatform.Application.Cities.Queries.CityDetails.Admin;
using TravelAccommodationBookingPlatform.Application.Cities.Queries.CitySearch;
using TravelAccommodationBookingPlatform.Presentation.Attributes;
using TravelAccommodationBookingPlatform.Presentation.Controllers.Cities.ViewModels;
using TravelAccommodationBookingPlatform.Presentation.Shared;
using TravelAccommodationBookingPlatform.Presentation.Shared.ResultExtensions;

namespace TravelAccommodationBookingPlatform.Presentation.Controllers.Cities;

Expand All @@ -30,15 +33,32 @@ public CityController(ISender sender, IMapper mapper) : base(sender, mapper)
/// <response code="401">Unauthorized if credentials are invalid.</response>
/// <response code="404">If the city is not found.</response>
[HttpGet("{id:guid}")]
[ProducesResponseType(typeof(CityDetailsResponse), StatusCodes.Status200OK)]
[MultipleResponseTypes(StatusCodes.Status200OK,
typeof(CityDetailsResponse),
typeof(AdminCityDetailsResponse))]
[ProducesError(StatusCodes.Status401Unauthorized)]
[ProducesError(StatusCodes.Status404NotFound)]
public async Task<ActionResult<CityDetailsResponse>> GetCityDetails(
[FromRoute] Guid id,
CancellationToken cancellationToken)
{
var query = new CityDetailsQuery { Id = id };
return await HandleQueryResult(query, cancellationToken);
return await HandleUserRoleResult(
adminResultFactory: async () =>
{
var query = new AdminCityDetailsQuery { Id = id };
var result = await Sender.Send(query, cancellationToken);
return result.IsSuccess
? Ok(Mapper.Map<AdminCityDetailsViewModel>(result.Value))
: result.ToProblemDetails();
},
userResultFactory: async () =>
{
var query = new CityDetailsQuery { Id = id };
var result = await Sender.Send(query, cancellationToken);
return result.IsSuccess
? Ok(Mapper.Map<CityDetailsViewModel>(result.Value))
: result.ToProblemDetails();
});
}

/// <summary>
Expand Down

0 comments on commit 94d1a25

Please sign in to comment.