예제 #1
0
        public async Task <IActionResult> Index(SearchEmployeeQuery query)
        {
            _builder.Link(RelTypes.Nav, "Employees", SearchUri(query))
            .Link(Url.AppLink(RelTypes.Nav, "Client", "index", "client"))
            .Link(RelTypes.Breadcrumb, "Employees", SearchUri(query))
            .Link(RelTypes.Action, "+ new employee", AddUri())
            .Link(RelTypes.Self, "Employees", SearchUri(query))
            .Link(RelTypes.Search, "Search", SearchUri(new SearchEmployeeQuery(nameof(SearchEmployeeQuery.EmployeeNo))));

            var queryExecutionResult = await _employeeService.HandleAsync(query);

            if (queryExecutionResult.HasError == false)
            {
                if (queryExecutionResult.Result.PageNo > queryExecutionResult.Result.FirstPageNo)
                {
                    _builder.Link(RelTypes.First, "First", SearchUri(new SearchEmployeeQuery(query.EmployeeNo, queryExecutionResult.Result.FirstPageNo)))
                    .Link(RelTypes.Prev, "Previous", SearchUri(new SearchEmployeeQuery(query.EmployeeNo, queryExecutionResult.Result.PageNo - 1)));
                }

                if (queryExecutionResult.Result.PageNo < queryExecutionResult.Result.LastPageNo)
                {
                    _builder.Link(RelTypes.Next, "Next", SearchUri(new SearchEmployeeQuery(query.EmployeeNo, queryExecutionResult.Result.PageNo + 1)))
                    .Link(RelTypes.Last, "Last", SearchUri(new SearchEmployeeQuery(query.EmployeeNo, queryExecutionResult.Result.LastPageNo)));
                }

                foreach (var employee in queryExecutionResult.Result)
                {
                    _builder.Embedded(RelTypes.Row)
                    .Property("name", "Name", employee.FullName)
                    .Property(nameof(employee.EmployeeNo), "Employee No", employee.EmployeeNo)
                    .Property(nameof(employee.Created), "Created", employee.Created)
                    .Link(RelTypes.Self, employee.FullName, GeneralInfoUri(new UpdateEmployeeGeneralInfoQuery(employee.EmployeeId)))
                    .Link(Url.AppLink(RelTypes.Nav, "+ new client", nameof(ClientController.Add), nameof(ClientController), new CreateClientQuery(employee.EmployeeId)));
                }
            }

            var vm = _builder.Build()
                     .ToGridVm();

            return(View(vm));
        }
예제 #2
0
 private string SearchUri(SearchEmployeeQuery query) => Url.AppUri(nameof(Index), nameof(EmployeeController), query);
예제 #3
0
        public async Task <QueryExecutionResult <Page <EmployeeEntity> > > HandleAsync(SearchEmployeeQuery query)
        {
            var employeeEntities = await _repository.PageAsync(new EmployeesLikeSpecification(query.EmployeeNo),
                                                               query.PageSize,
                                                               query.PageNo);

            var queryExecutionResult = new QueryExecutionResult <Page <EmployeeEntity> >(employeeEntities);

            return(queryExecutionResult);
        }