コード例 #1
0
        public async Task GetReservationsTestAsync()
        {
            await AddReservationsAsync();

            var options = new ApiQueryOptions
            {
                Page     = 1,
                PageSize = 2,
            };
            var actionResuolt = await _reservationsController.GetReservations(options);

            var okResult  = actionResuolt as OkObjectResult;
            var apiResult = okResult.Value as ApiResult;

            Assert.AreEqual(apiResult.Page, 1);
            Assert.AreEqual(apiResult.Pages, 2);
            Assert.AreEqual(apiResult.Total, 3);
            var data = apiResult.Data as List <ReservationDto>;

            Assert.AreEqual(data.Count, 2);

            options.PageSize = 10;

            actionResuolt = await _reservationsController.GetReservations(options);

            okResult  = actionResuolt as OkObjectResult;
            apiResult = okResult.Value as ApiResult;
            Assert.AreEqual(apiResult.Pages, 1);
            data = apiResult.Data as List <ReservationDto>;
            Assert.AreEqual(data.Count, 3);
        }
コード例 #2
0
ファイル: Api.cs プロジェクト: 4vz/Aveezo
    protected Result <T[]> Query <T>(SqlSelect select, Action <ApiQueryOptions <T> > options, Func <SqlRow, T> create)
    {
        if (select == null)
        {
            return(NotFound());
        }

        var opt = new ApiQueryOptions <T>();

        options?.Invoke(opt);

        Values <string> fields        = null;
        List <string>   displayFields = null;

        if (create != null)
        {
        }
        else
        {
            var idBuilderStack = select.GetBuilderStack(Sql.Id);

            if (idBuilderStack == null)
            {
                return(Unavailable($"Builder with the identifier key ({Sql.Id}) is not found in the current builders. Please review the select function for this method."));
            }

            fields        = Parameters.Fields;
            displayFields = new();

            if (Parameters.Queries != null && Parameters.Queries.Length > 0)
            {
                Dictionary <string, (SqlQueryType, string)[]> queries = new();
コード例 #3
0
        /// <summary>
        /// Get Contacts filteres, ordered and paginated
        /// </summary>
        /// <param name="option"></param>
        /// <returns></returns>
        public async Task <ApiResult> GetContacts(ApiQueryOptions option)
        {
            var query = string.IsNullOrEmpty(option.Search)
                ? _context.Contacts.Where(x => x.Name != "")
                : _context.Contacts.Where(x => x.Name.Contains(option.Search));

            var count = await query.CountAsync();

            switch (option.Sort)
            {
            case "0_asc":
                query = query.OrderBy(x => x.Name);
                break;

            case "0_desc":
                query = query.OrderByDescending(x => x.Name);
                break;

            case "1_asc":
                query = query.OrderBy(x => x.ContactType);
                break;

            case "1_desc":
                query = query.OrderByDescending(x => x.ContactType);
                break;

            case "2_asc":
                query = query.OrderBy(x => x.PhoneNumber);
                break;

            case "2_desc":
                query = query.OrderByDescending(x => x.PhoneNumber);
                break;

            case "3_asc":
                query = query.OrderBy(x => x.BirthDate);
                break;

            case "3_desc":
                query = query.OrderByDescending(x => x.BirthDate);
                break;
            }
            var skip = option.Page == 1 ? 0 : (option.Page - 1) * option.PageSize;
            var data = await query.Skip(skip).Take(option.PageSize).ToListAsync();

            return(new ApiResult
            {
                Page = option.Page,
                Pages = (int)Math.Ceiling(count / (decimal)option.PageSize),
                Total = count,
                Data = data
            });
        }
コード例 #4
0
        /// <summary>
        /// Get reservations orderes, filtered and paginated
        /// </summary>
        /// <param name="option"></param>
        /// <returns></returns>
        public async Task <ApiResult> GetReservations(ApiQueryOptions option)
        {
            var query = _context.Reservations.Select(x => new ReservationDto
            {
                Id          = x.Id,
                Name        = x.Contact.Name,
                Rating      = x.Rating,
                CreatedDate = x.CreatedDate,
                IsFavorite  = _context.FavoriteReservations.Any(r => r.UserId == option.CurrentUser && r.ReservationId == x.Id)
            });

            var count = await query.CountAsync();

            switch (option.Sort)
            {
            case "1":
                query = query.OrderBy(x => x.CreatedDate);
                break;

            case "2":
                query = query.OrderByDescending(x => x.CreatedDate);
                break;

            case "3":
                query = query.OrderBy(x => x.Name);
                break;

            case "4":
                query = query.OrderByDescending(x => x.Name);
                break;

            case "5":
                query = query.OrderBy(x => x.Rating);
                break;

            case "6":
                query = query.OrderByDescending(x => x.Rating);
                break;
            }

            var skip = option.Page == 1 ? 0 : (option.Page - 1) * option.PageSize;
            var data = await query.Skip(skip).Take(option.PageSize).ToListAsync();

            return(new ApiResult
            {
                Page = option.Page,
                Pages = (int)Math.Ceiling(count / (decimal)option.PageSize),
                Total = count,
                Data = data
            });
        }
コード例 #5
0
        public override ListResult <UserDto> Handle(ApiQueryOptions queryOptions)
        {
            var result = Continue <Domain.Processes.Users.List>().With(queryOptions);

            if (result.IsFaulted)
            {
                return(Fail(result));
            }

            var userDtos = result.Result.Select(x => (UserDto)x).ToList();

            return(new ListResult <UserDto>(userDtos)
            {
                TotalCount = result.TotalCount
            });
        }
コード例 #6
0
        public async Task <ActionResult> GetReservations([FromQuery] ApiQueryOptions option)
        {
            ApiResult result = await _reservationService.GetReservations(option);

            return(new OkObjectResult(result));
        }
コード例 #7
0
 public override ListResult <UserDto> Validate(ApiQueryOptions queryOptions)
 {
     return(BeginValidation()
            .Validate(new NotNullEntity <ApiQueryOptions>(), queryOptions)
            .ReturnResult());
 }
コード例 #8
0
 public override ListResult <UserDto> Auth(ApiQueryOptions queryOptions)
 {
     return(Ok());
 }