public async Task <IEnumerable <CrmAppointmentModel> > Handle(GetCrmAppointments request, CancellationToken cancellationToken)
        {
            DateTimeOffset startDate = DateTimeOffset.Parse(request.Start, CultureInfo.InvariantCulture);
            DateTimeOffset endDate   = DateTimeOffset.Parse(request.End, CultureInfo.InvariantCulture);

            if (request.Start == request.End)
            {
                endDate = endDate.AddDays(1);
            }

            var url = new Url(request.TenantUrl)
                      .AppendPathSegment("/Crm/Appointments")
                      .SetQueryParam("employeeID", request.EmpID)
                      .SetQueryParam("start", startDate.ToUnixTimeSeconds())
                      .SetQueryParam("end", endDate.ToUnixTimeSeconds())
                      // TimePro bug: Basic auth is not base64 decoded on the server and takes the raw token.
                      .WithHeader("Authorization", $"Basic {request.Token}");

            return(await url.GetJsonAsync <CrmAppointmentModel[]>());
        }
 public Task <IEnumerable <CrmAppointmentModel> > Execute(GetCrmAppointments request)
 {
     return(Handle(request, default));
 }