Join 2 services and use on Controller on ASP.NET Core

Viewed 42

I have a view Model:

public class CountViewModel
{
    public int NewsLetterEmailCount { get; set; }
    public int CurrentMonthNewsLetter { get; set; }
    public int NewsLetterPercentage { get; set; }
}

then I create the second ViewModel that want to list of title:

public class AdminDashboardUnreadMessage
{

    [Display(Name = "عنوان")]
    public string Title { get; set; }
    //public List<AdminDashboardUnreadMessage> 
    AdminDashboardUnreadMessages { get; set; }
}

I have a ticket Table, these are my 2 services:

 public async Task<CountViewModel> AdminContentCount()
    {
        CountViewModel adminContetnCount = new CountViewModel()
        {

            UserCount = await _userRepository.UserCount(),
            CurrentMonthUser = await _userRepository.CurrentMonthUser(),

            NewsLetterEmailCount = await _newsLetterRepository.NewsLetterEmailCount(),
            CurrentMonthNewsLetter = await _newsLetterRepository.CurrentMonthNewsLetterEmail(),

             

        return adminContetnCount;


    }

    public async Task<List<AdminDashboardUnreadMessage>> ShowUnReadTicketMessages()
    {
        return await _userRepository.ShowUnReadTicketMessages();
    }

How can I use 2 services on my service I mean I don't want to use from View Data

1 Answers

I think you need to define a new ViewModel like this :

public class NewViewModel
{
    public CountViewModel CountModel { get; set; }
    public AdminDashboardUnreadMessage AdminDashboardModel { get; set; }
}

And now you need to return this object as a result of a newly created service which responsible to aggregate the result of two different services.

public async Task<NewViewModel> NewService()
{
    var adminContetnCount = await AdminContentCount();
    var dashboard = await ShowUnReadTicketMessages();

    return new NewViewModel
    {
        CountModel = adminContetnCount,
        AdminDashboardModel= dashboard
    };
}
Related