TamTam
TamTam

Reputation: 567

API return null in reviews property

I'm trying to create a simple method GET to retrieve the information of hotel entity but got stuck when trying to get reviews (which was added by the user). In database the Review entity is stored with 5 properties:

int Id(Primarykey)
int SenderId(User who sent review)
int RecipientId(The hotel reviewed by user)
int point
string comment 

the Review's model:

 public class Review
{
    public int Id { get; set; }
    public User Sender { get; set; }
    public int SenderId {get; set; }
    public Hotel Recipient { get; set; }
    public int RecipientId { get; set; }
    public DateTime DateAdded { get; set; }
    public int Point { get; set; }
    public string Comment { get; set; }
    public bool SenderDeleted { get; set; }
}

the Hotel's motel:

 public class Hotel 
{
    public int Id { get; set; }
    public string HotelName { get; set; }
    public string Description { get; set; }
    public double Price { get; set; }
    public string Address { get; set; }
    public int Rooms { get; set; }
    public int Beds { get; set; }
    public int Bathrooms { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
    public bool Status { get; set; }
    public ICollection<Review> ReviewsReceived { get; set; }

}

in Myrepository.cs, I declared the GetHotel Function:

public async Task<Hotel> GetHotel(int id)
    {
        var hotel = await _context.Hotels.Include(r => 
        r.ReviewsReceived).FirstOrDefaultAsync(h => h.Id == id);
        return hotel;
    }

in HotelsController.cs:

[HttpGet("{id}")]
    public async Task<IActionResult> GetHotel(int id)
    {
        var hotel = await Myrepository.GetHotel(id);
        var hotelToReturn = IMapper.Map<HotelForDetailedDto>(hotel);
        return Ok(hotelToReturn);
    }

in HotelForDetailedDto.cs:

 public class HotelForDetailedDto
{   
    public string HotelName { get; set; }
    public string Description { get; set; }
    public double Price { get; set; }
    public string Address { get; set; }
    public int Rooms { get; set; }
    public int Beds { get; set; }
    public int Bathrooms { get; set; }
    public string City { get; set; }
    public string Country { get; set; }
    public bool Status { get; set; }
    public ICollection<ReviewForDetailedDto> Reviews { get; set; }
}

in ReviewForDetailDto.cs:

public class ReviewForDetailedDto
{
    public int Id { get; set; }
    public int SenderId { get; set; }  // userId
    public int Point { get; set; }
    public string Comment { get; set; }
}

I created the Map method for review:

CreateMap<Review, ReviewForDetailedDto>();

And this is what I received:

{
"hotelName": "Dentrex",
"description": "Eu incididunt pariatur non veniam veniam reprehenderit 
cillum adipisicing consequat cillum aliqua in. Ut ut reprehenderit commodo 
tempor cillum in sit anim labore in et proident commodo. Fugiat eni.\r\n",
"price": 2349.79,
"address": "Gelston Avenue",
"rooms": 487,
"beds": 2,
"bathrooms": 2,
"city": "Ronco",
"country": "Algeria",
"status": false,
"reviews": null
}

So What I want is reviews should return all property that was declared in ReviewForDetailDto through the AutoMapper.

Please help.

Upvotes: 1

Views: 107

Answers (1)

Besher Tobeh
Besher Tobeh

Reputation: 249

your "ReviewsReceived" property name in your hotel model is not the same name of your "Reviews" property in your HotelForDetailedDto model

you can rename it or configure the mapping using forMember() method

Upvotes: 3

Related Questions