Clear        


                
                    using APP.Models;
using APP.Services;
using Microsoft.AspNetCore.Mvc;

namespace MVC.Controllers
{
    /// <summary>
    /// Controller for handling location-related actions, including displaying lists of countries and cities
    /// using inner and left outer join queries.
    /// </summary>
    public class LocationsController : Controller
    {
        private readonly ILocationQueryService _locationQueryService;

        /// <summary>
        /// Initializes a new instance of the <see cref="LocationsController"/> class.
        /// </summary>
        /// <param name="locationQueryService">Service for querying location data.</param>
        public LocationsController(ILocationQueryService locationQueryService)
        {
            _locationQueryService = locationQueryService;
        }

        /// <summary>
        /// Displays a list of locations (countries and cities) using an inner join query.
        /// </summary>
        /// <param name="viewModel">The view model containing query parameters, the result list, 
        /// page number list, record count per page list and order expression list.
        /// </param>
        /// <returns>The view displaying the inner join results.</returns>
        public IActionResult InnerJoinIndex(LocationsIndexViewModel viewModel)
        {
            viewModel.List = _locationQueryService.InnerJoinList(viewModel.QueryRequest);
            return View(viewModel);
        }

        /// <summary>
        /// Displays a list of locations (countries and cities) using a left outer join query.
        /// </summary>
        /// <param name="viewModel">The view model containing query parameters, the result list, 
        /// page number list, record count per page list and order expression list.
        /// </param>
        /// <returns>The view displaying the left outer join results.</returns>
        public IActionResult LeftJoinIndex(LocationsIndexViewModel viewModel)
        {
            viewModel.List = _locationQueryService.LeftJoinList(viewModel.QueryRequest);
            return View(viewModel);
        }
    }
}