public ITrackOutcomeRequest FillTrackOutcomeGaps(ITrackOutcomeRequest userRequest) { var utOutcome = userRequest.Outcome.DeepCopyUTOutcome(); //order matters! IUTSessionConfig mergedSessionConfig = this.SessionConfigMerger.FillSessionConfigGaps(userRequest.SessionConfig); var utEvent = this.ApplyActiveInteraction(utOutcome, mergedSessionConfig); utEvent = this.ApplyDeviceIdentifier(utEvent); utOutcome = new UTOutcome(utEvent, utOutcome.CurrencyCode, utOutcome.MonetaryValue); return(new TrackOutcomeParameters(mergedSessionConfig, utOutcome)); }
public async Task <UTResponse> TrackOutcomeEventAsync(ITrackOutcomeRequest request, CancellationToken cancelToken = default(CancellationToken)) { BaseValidator.CheckNullAndThrow(request, this.GetType().Name + ".OutcomeRequest"); ITrackOutcomeRequest requestCopy = request.DeepCopyTrackOutcomeRequest(); ITrackOutcomeRequest autocompletedRequest = this.requestMerger.FillTrackOutcomeGaps(requestCopy); //FIXME: @igk if (this.InteractionNotExists()) { return(await this.CreateInteractionAndSentEventAsync(request.Outcome, cancelToken)); } var urlBuilder = new TrackEventUrlBuilder <ITrackOutcomeRequest>(this.utGrammar); var taskFlow = new TrackOutcomeTask(urlBuilder, this.httpClient); var response = await RestApiCallFlow.LoadRequestFromNetworkFlow(autocompletedRequest, taskFlow, cancelToken); this.CheckResponseForValidInteraction(response); return(response); }