public async Task <IHttpActionResult> Get(string id, bool includeAllUsers = false) { var query = new GetTimeEntryQuery() { IncludeAllUsers = includeAllUsers, QueryString = $"?$filter=Id eq guid'{id}'" }; try { var timeEntries = await timeEntryService.GetTimeEntries(query); if (!timeEntries.Results.Any()) { return(NotFound()); } else { return(Ok(timeEntries.Results.First())); } } catch (ValidationException ex) { return(BadRequest(ex.Message)); } catch (AuthorizationException) { return(this.StatusCode(System.Net.HttpStatusCode.Forbidden)); } }
public async Task <IHttpActionResult> GetAll() { var queryString = HttpContext.Current.Request.QueryString; var rawQueryString = HttpUtility.UrlDecode(Request.RequestUri.Query); var orderBy = queryString["$orderby"]; var query = new GetTimeEntryQuery() { IncludeAllUsers = true, OrderBy = orderBy, QueryString = rawQueryString }; var pageSize = queryString["$top"]; int pageSizeInt; if (int.TryParse(pageSize, out pageSizeInt)) { query.PageSize = pageSizeInt; } try { var timeEntries = await timeEntryService.GetTimeEntries(query); return(Ok(timeEntries)); } catch (ValidationException ex) { return(BadRequest(ex.Message)); } catch (AuthorizationException) { return(this.StatusCode(System.Net.HttpStatusCode.Forbidden)); } }
async Task <PagedResult <TimeEntryWithOwnerName> > ITimeEntryService.GetTimeEntries(GetTimeEntryQuery query) { Check.NotNull(query, errorMessage: "Query must be specified."); var currentPrincipal = await currentUserResolver.ResolveCurrentClaimsPrincipalAsync(); var operation = query.IncludeAllUsers ? Operation.ReadAll : Operation.Read; await authorizationService.AuthorizeResourceType(currentPrincipal, operation, typeof(TimeEntry)); var timeEntries = timeEntryRepository.GetTimeEntries(); var currentUser = await currentUserResolver.ResolveAsync(); if (operation == Operation.Read) { timeEntries = timeEntries.Where(te => te.OwnerId == currentUser.Id); } if (string.IsNullOrWhiteSpace(query.OrderBy)) { timeEntries = timeEntries.OrderBy(te => te.Date); } var pagedResult = new PagedResult <TimeEntryWithOwnerName>(); if (!string.IsNullOrEmpty(query.QueryString)) { try { var queryParserResult = await queryParser.ApplyQuery(timeEntries, query.QueryString); timeEntries = queryParserResult.Results; pagedResult.TotalCount = queryParserResult.TotalCount; } catch (Exception e) { throw new ValidationException("Invalid query string.", e); } } var pageSize = Constants.MaxPageSize; if (query.PageSize.HasValue && query.PageSize < Constants.MaxPageSize) { pageSize = query.PageSize.Value; } timeEntries = timeEntries.Take(pageSize); var preferredWorkingHourIndex = new Dictionary <string, double>(); foreach (var te in timeEntries) { var key = te.Date.Date.ToShortDateString() + "|" + te.OwnerId; if (!preferredWorkingHourIndex.ContainsKey(key)) { preferredWorkingHourIndex.Add(key, 0); } preferredWorkingHourIndex[key] += te.Duration; } var timeEntriesWithOwnerName = new List <TimeEntryWithOwnerName>(); foreach (var te in timeEntries) { var key = te.Date.Date.ToShortDateString() + "|" + te.OwnerId; timeEntriesWithOwnerName.Add(new TimeEntryWithOwnerName(te) { IsUnderPreferredWorkingHourPerDay = preferredWorkingHourIndex[key] < te.Owner.PreferredWorkingHourPerDay }); } pagedResult.Results = timeEntriesWithOwnerName.ToArray(); return(pagedResult); }