public async Task <bool> didUserVotedThisDuo(int id, ApplicationUser currentLogedInUser)
        {
            var userVotingData =
                await _context.UserVotingDbs.Where(r => r.UserID == currentLogedInUser.Id).FirstOrDefaultAsync();

            if (userVotingData == null)
            {
                return(false);
            }
            _duoVotedByCurrentUser =
                await _context.DuoVotedByUserDbs.FirstOrDefaultAsync(
                    r => r.DuoID == id && r.UserVotingDbID == userVotingData.ID);

            if (_duoVotedByCurrentUser != null)
            {
                return(true);
            }
            return(false);
        }
        public async Task <VoteDuoViewModel> VoteCast(int id, string votedDuoName, ApplicationUser currentLogedInUser)
        {
            var VoteDuoData = await _context.VotesDb.FirstOrDefaultAsync(r => r.Id == id);

            var userVotingData =
                await _context.UserVotingDbs.FirstOrDefaultAsync(r => r.UserID == currentLogedInUser.Id);


            bool duoIsAlreadyVotedByUser = await didUserVotedThisDuo(id, currentLogedInUser);

            var model = new VoteDuoViewModel();

            if (VoteDuoData != null)
            {
                if (!duoIsAlreadyVotedByUser && userVotingData.TotallVotingRights != 0)
                {
                    userVotingData.TotallCastedVotes  += 1;
                    userVotingData.TotallVotingRights -= 1;

                    VoteDuoData.DuoTotalVotes = VoteDuoData.DuoFirstVotes + VoteDuoData.DuoSecondVotes + 1;

                    if (votedDuoName == VoteDuoData.DuoFirst)
                    {
                        VoteDuoData.DuoFirstVotes += 1;
                    }
                    else if (votedDuoName == VoteDuoData.DuoSecond)
                    {
                        VoteDuoData.DuoSecondVotes += 1;
                    }

                    var duoVotedByCurrentUserData = new DuoVotedByUserDb
                    {
                        DuoID          = id,
                        UserVotingDbID = userVotingData.ID,
                        VotingTime     = DateTime.UtcNow
                    };

                    await _context.DuoVotedByUserDbs.AddAsync(duoVotedByCurrentUserData);

                    await _context.SaveChangesAsync();

                    model = new VoteDuoViewModel
                    {
                        Id                      = VoteDuoData.Id,
                        DuoFirst                = VoteDuoData.DuoFirst,
                        DuoFirstVotes           = VoteDuoData.DuoFirstVotes,
                        DuoSecond               = VoteDuoData.DuoSecond,
                        DuoSecondVotes          = VoteDuoData.DuoSecondVotes,
                        DuoTotalVotes           = VoteDuoData.DuoTotalVotes,
                        DuoIsAlreadyVotedByUser = true,
                        DuoVotedByCurrentUserDb = duoVotedByCurrentUserData
                    };

                    return(model);
                }


                if (userVotingData.TotallVotingRights == 0)
                {
                    duoIsAlreadyVotedByUser = false;
                    _duoVotedByCurrentUser  = new DuoVotedByUserDb();
                }

                model = new VoteDuoViewModel
                {
                    Id                      = VoteDuoData.Id,
                    DuoFirst                = VoteDuoData.DuoFirst,
                    DuoFirstVotes           = VoteDuoData.DuoFirstVotes,
                    DuoSecond               = VoteDuoData.DuoSecond,
                    DuoSecondVotes          = VoteDuoData.DuoSecondVotes,
                    DuoTotalVotes           = VoteDuoData.DuoTotalVotes,
                    DuoIsAlreadyVotedByUser = duoIsAlreadyVotedByUser,
                    DuoVotedByCurrentUserDb = _duoVotedByCurrentUser
                };
            }
            return(model);
        }