public IObservable <ITimeEntriesTotals> GetTotals( long userId, long workspaceId, DateTimeOffset startDate, DateTimeOffset endDate) { if (endDate.Date - startDate.Date > maximumRange) { throw new ArgumentOutOfRangeException(nameof(endDate)); } var parameters = new TimeEntriesTotalsParameters(userId, startDate, endDate); var json = serializer.Serialize(parameters, SerializationReason.Post, null); return(Observable.Create <ITimeEntriesTotals>(async observer => { var response = await SendRequest <TotalsResponse>(endPoints.Totals(workspaceId), credentials.Header, json); var totals = new TimeEntriesTotals { StartDate = startDate, EndDate = endDate, Resolution = response.Resolution, Groups = response.Graph.Select(group => new TimeEntriesTotalsGroup { Total = TimeSpan.FromSeconds(group.Seconds), Billable = TimeSpan.FromSeconds(group.BillableSeconds) }).ToArray <ITimeEntriesTotalsGroup>() }; observer.OnNext(totals); observer.OnCompleted(); return () => { }; })); }
public async Task <ITimeEntriesTotals> GetTotals( long userId, long workspaceId, DateTimeOffset startDate, DateTimeOffset endDate) { if (endDate.Date - startDate.Date > maximumRange) { throw new ArgumentOutOfRangeException(nameof(endDate)); } var parameters = new TimeEntriesTotalsParameters(userId, startDate, endDate); var json = serializer.Serialize(parameters, SerializationReason.Post); var endPoint = endPoints.Totals(workspaceId); var totals = await SendRequest <TotalsResponse>(endPoint, credentials.Header, json) .ConfigureAwait(false); return(new TimeEntriesTotals { StartDate = startDate, EndDate = endDate, Resolution = totals.Resolution, Groups = totals.Graph.Select(group => new TimeEntriesTotalsGroup { Total = TimeSpan.FromSeconds(group.Seconds), Billable = TimeSpan.FromSeconds(group.BillableSeconds) }).ToArray <ITimeEntriesTotalsGroup>() }); }