public async Task <ActionResult <AccountListDTO> > LookupAccount(
            [FromQuery] short?l1,
            [FromQuery] short?l2,
            [FromQuery] short?l3,
            [FromQuery] short?l4)
        {
            try
            {
                var accountQuery = _accountRepo.GetAccounts();

                if (l1.HasValue)
                {
                    accountQuery = accountQuery.Where(a => a.Level1 == l1.Value);
                }
                if (l2.HasValue)
                {
                    accountQuery = accountQuery.Where(a => a.Level2 == l2.Value);
                }
                if (l3.HasValue)
                {
                    accountQuery = accountQuery.Where(a => a.Level3 == l3.Value);
                }
                if (l4.HasValue)
                {
                    accountQuery = accountQuery.Where(a => a.Level4 == l4.Value);
                }

                var accounts = await accountQuery
                               .OrderBy(a => a.AccountId)
                               .ToListAsync();

                var accountList = _mapper.Map <List <Account>, List <AccountDTO> >(accounts);

                var accountListCount = accountList.Count;

                var dto = new AccountListDTO
                {
                    Accounts     = accountList,
                    TotalItems   = accountListCount,
                    TotalPages   = 1,
                    CurrentPage  = 1,
                    ItemsPerPage = accountListCount
                };

                return(dto);
            }
            catch (Exception e)
            {
                _logger.LogError("Exception occurred during an Account lookup.\nError: " + e.Message);
                return(BadRequest());
            }
        }
        /// <summary>
        /// Returns a list of account dimensions
        /// </summary>
        /// <param name="Page"></param>
        /// <param name="PageSize"></param>
        /// <returns></returns>
        public AccountListDTO GetAccountDimensions(int Page, int PageSize, string AccountName = "")
        {
            try
            {
                AccountListDTO list = DimensionDAL.GetAccountDimensions(Page, PageSize, AccountName);

                return(list);
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Returns a list of accounts from the database
        /// </summary>
        /// <returns></returns>
        public AccountListDTO GetAccountDimensions(int Page, int PageSize, string AccountName = "")
        {
            AccountListDTO list = new AccountListDTO();

            SQLAzure.DbConnection dbConn = new SQLAzure.DbConnection(_connectionString);

            try
            {
                dbConn.Open();

                SQLAzure.RetryLogic.DbCommand dbComm = new SQLAzure.RetryLogic.DbCommand(dbConn);

                if (AccountName != string.Empty)
                {
                    dbComm.CommandText = String.Format("SELECT ID, AccountID, AccountName, TotalCount = COUNT(ID) OVER() FROM DimAccount WHERE AccountName LIKE '%' + @AccountName + '%' ORDER BY ID OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY", (Page * PageSize), PageSize);
                    dbComm.Parameters.Add(new SqlParameter("AccountName", AccountName));
                }
                else
                {
                    dbComm.CommandText = String.Format("SELECT ID, AccountID, AccountName, TotalCount = COUNT(ID) OVER() FROM DimAccount ORDER BY ID OFFSET {0} ROWS FETCH NEXT {1} ROWS ONLY", (Page * PageSize), PageSize);
                }

                System.Data.IDataReader rdr = dbComm.ExecuteReader(System.Data.CommandType.Text);

                while (rdr.Read())
                {
                    AccountDTO account = new AccountDTO();
                    account.ID          = Convert.ToInt32(rdr["ID"]);
                    account.AccountID   = Guid.Parse(rdr["AccountID"].ToString());
                    account.AccountName = rdr["AccountName"].ToString();

                    list.RecordCount = Convert.ToInt32(rdr["TotalCount"]);

                    list.Items.Add(account);
                }

                list.PageNumber = Page;
                list.PageSize   = PageSize;
                list.TotalPages = GetNumberOfPagesAvailable(PageSize, list.RecordCount);
            }
            catch (SqlException)
            {
                throw;
            }
            finally
            {
                dbConn.Close();
            }

            return(list);
        }
Example #4
0
        public async Task <AccountListDTO> GetAccountList(int?pageNumber, string searchKey)
        {
            var users = _accountRepository.Query().Where(x =>
                                                         string.IsNullOrEmpty(searchKey) ||
                                                         x.Name.ToLower().Contains(searchKey) ||
                                                         x.Email.ToLower().Contains(searchKey) ||
                                                         x.Players.Any(y => y.Name.ToLower().Contains(searchKey)));

            var currentPageNum = pageNumber ?? 1;
            var offset         = (ServerInfo.ItemsPerPage * currentPageNum) - ServerInfo.ItemsPerPage;

            var model = new AccountListDTO()
            {
                TotalResults = await users.CountAsync()
            };

            var result = await users
                         .Skip(offset)
                         .Take(ServerInfo.ItemsPerPage)
                         .ToListAsync();

            foreach (var account in result)
            {
                var isAccountBanned = await _banService.IsBanned(account);

                var isAccountLocked = await _userManager.IsLockedOutAsync(account.AccountIdentity);

                var AccountRole = (await _userManager.GetRolesAsync(account.AccountIdentity)).Single();
                var banReason   = isAccountBanned
                        ? account.AccountBan.Reason
                        : string.Empty;

                var accountListItem = new AccountListItemDTO()
                {
                    Id             = account.Id,
                    AccountName    = account.Name,
                    Email          = account.Email,
                    Characters     = account.Players.Select(x => x.Name),
                    IsLocked       = isAccountLocked,
                    Role           = AccountRole,
                    IsBanned       = isAccountBanned,
                    IsBannedReason = banReason
                };

                model.Accounts.Add(accountListItem);
            }

            return(model);
        }
        public IHttpActionResult Get(int Page, int PageSize, string AccountName = "")
        {
            ValidateModel();

            try
            {
                AccountListDTO       list = _dimensionBLL.GetAccountDimensions(Page, PageSize, AccountName);
                AccountDimensionList accountDimensions = new AccountDimensionList();

                foreach (AccountDTO l in list.Items)
                {
                    accountDimensions.Items.Add((AccountDimension)l);
                }

                if (accountDimensions.Items.Count > 0)
                {
                    accountDimensions.PageNumber  = list.PageNumber;
                    accountDimensions.PageSize    = list.PageSize;
                    accountDimensions.RecordCount = list.RecordCount;
                    accountDimensions.TotalPages  = list.TotalPages;

                    return(Ok(accountDimensions));
                }
                else
                {
                    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.NoContent);
                    response.Content = new StringContent("No Content");

                    return(ResponseMessage(response));
                }
            }
            catch (Exception ex)
            {
                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                response.Content = new StringContent("Unknown Error");

                // Insert Logging here
                Console.WriteLine(ex);
                return(ResponseMessage(response));
            }
        }
        public async Task <ActionResult <AccountListDTO> > GetAccounts([FromQuery] int page = 1, [FromQuery] int itemsPerPage = 20)
        {
            try
            {
                if (page < 1 || itemsPerPage < 1)
                {
                    return(BadRequest("Request contained one or more invalid paging values."));
                }

                var accounts = await _accountRepo.GetAccounts()
                               .Skip((page - 1) * itemsPerPage)
                               .Take(itemsPerPage)
                               .OrderBy(a => a.AccountId)
                               .ToListAsync();

                var accountCount = await _accountRepo.GetAccounts().CountAsync();

                var accountList = _mapper.Map <List <Account>, List <AccountDTO> >(accounts);

                var dto = new AccountListDTO
                {
                    Accounts     = accountList,
                    TotalItems   = accountCount,
                    TotalPages   = decimal.ToInt32(Math.Ceiling((decimal)accountCount / (decimal)itemsPerPage)),
                    CurrentPage  = page,
                    ItemsPerPage = itemsPerPage
                };

                return(dto);
            }
            catch (Exception e)
            {
                _logger.LogError("Exception occurred while attempting to retrieve Accounts.\nError: " + e.Message);
                return(BadRequest());
            }
        }