Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions clientlibs/js/src/ApiService/ApiService.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { UpGradeClientEnums, UpGradeClientInterfaces, UpGradeClientRequests } from '../types';
import { CaliperEnvelope, IExperimentAssignmentv5, ILogInput, IUserAliases, ILogRequestBody } from 'upgrade_types';
import { CaliperEnvelope, IExperimentAssignment, ILogInput, IUserAliases, ILogRequestBody } from 'upgrade_types';
import { DataService } from 'DataService/DataService';
import { IApiServiceRequestParams, IEndpoints } from './ApiService.types';

Expand Down Expand Up @@ -210,12 +210,12 @@ export default class ApiService {
});
}

public getAllExperimentConditions(): Promise<IExperimentAssignmentv5[]> {
public getAllExperimentConditions(): Promise<IExperimentAssignment[]> {
const requestBody: UpGradeClientRequests.IGetAllExperimentConditionsRequestBody = {
context: this.context,
};

return this.sendRequest<IExperimentAssignmentv5[], UpGradeClientRequests.IGetAllExperimentConditionsRequestBody>({
return this.sendRequest<IExperimentAssignment[], UpGradeClientRequests.IGetAllExperimentConditionsRequestBody>({
path: this.api.getAllExperimentConditions,
method: UpGradeClientEnums.REQUEST_METHOD.POST,
body: requestBody,
Expand Down
4 changes: 2 additions & 2 deletions clientlibs/js/src/Assignment/Assignment.spec.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import {
EXPERIMENT_TYPE,
IExperimentAssignmentv5,
IExperimentAssignment,
IPayload,
MARKED_DECISION_POINT_STATUS,
PAYLOAD_TYPE,
} from 'upgrade_types';
import Assignment from './Assignment';
import { UpGradeClientInterfaces } from 'types/Interfaces';

const defaultMockAssignment: IExperimentAssignmentv5 = {
const defaultMockAssignment: IExperimentAssignment = {
site: 'site',
target: 'target',
assignedCondition: [
Expand Down
4 changes: 2 additions & 2 deletions clientlibs/js/src/Assignment/Assignment.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import {
IExperimentAssignmentv5,
IExperimentAssignment,
PAYLOAD_TYPE,
EXPERIMENT_TYPE,
IPayload,
Expand All @@ -18,7 +18,7 @@ export default class Assignment {
private _assignedFactor: Record<string, { level: string; payload: IPayload | null }>;

constructor(
{ site, target, assignedCondition, assignedFactor, experimentType }: IExperimentAssignmentv5,
{ site, target, assignedCondition, assignedFactor, experimentType }: IExperimentAssignment,
private apiService: ApiService
) {
this._site = site;
Expand Down
24 changes: 12 additions & 12 deletions clientlibs/js/src/DataService/DataService.spec.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { EXPERIMENT_TYPE, IExperimentAssignmentv5, IFeatureFlag, PAYLOAD_TYPE } from 'upgrade_types';
import { EXPERIMENT_TYPE, IExperimentAssignment, IFeatureFlag, PAYLOAD_TYPE } from 'upgrade_types';
import { DataService } from './DataService';

describe('DataService', () => {
Expand Down Expand Up @@ -120,7 +120,7 @@ describe('DataService', () => {

describe('#rotateAssignmentList', () => {
it('should return the rotated assignment list', () => {
const assignmentList: IExperimentAssignmentv5 = {
const assignmentList: IExperimentAssignment = {
site: 'site',
target: 'target',
assignedCondition: [
Expand Down Expand Up @@ -148,7 +148,7 @@ describe('DataService', () => {
experimentType: EXPERIMENT_TYPE.FACTORIAL,
};

const expectedRotatedAssignmentList: IExperimentAssignmentv5 = {
const expectedRotatedAssignmentList: IExperimentAssignment = {
site: 'site',
target: 'target',
assignedCondition: [
Expand Down Expand Up @@ -182,7 +182,7 @@ describe('DataService', () => {
});

it('should return the rotated assignment list with no assigned factors', () => {
const assignmentList: IExperimentAssignmentv5 = {
const assignmentList: IExperimentAssignment = {
site: 'site',
target: 'target',
assignedCondition: [
Expand All @@ -203,7 +203,7 @@ describe('DataService', () => {
experimentType: EXPERIMENT_TYPE.SIMPLE,
};

const expectedRotatedAssignmentList: IExperimentAssignmentv5 = {
const expectedRotatedAssignmentList: IExperimentAssignment = {
site: 'site',
target: 'target',
assignedCondition: [
Expand All @@ -230,15 +230,15 @@ describe('DataService', () => {
});

it('should return the rotated assignment list with no assigned conditions', () => {
const assignmentList: IExperimentAssignmentv5 = {
const assignmentList: IExperimentAssignment = {
site: 'site',
target: 'target',
assignedCondition: [],
assignedFactor: [],
experimentType: EXPERIMENT_TYPE.SIMPLE,
};

const expectedRotatedAssignmentList: IExperimentAssignmentv5 = {
const expectedRotatedAssignmentList: IExperimentAssignment = {
site: 'site',
target: 'target',
assignedCondition: [],
Expand All @@ -254,7 +254,7 @@ describe('DataService', () => {

describe('#findExperimentAssignmentBySiteAndTarget', () => {
it('should return the experiment assignment', () => {
const experimentAssignmentData: IExperimentAssignmentv5[] = [
const experimentAssignmentData: IExperimentAssignment[] = [
{
site: 'site',
target: 'target',
Expand Down Expand Up @@ -282,7 +282,7 @@ describe('DataService', () => {
});

it('should normalize undefined target to empty string and return empty assignment', () => {
const experimentAssignmentData: IExperimentAssignmentv5[] = [
const experimentAssignmentData: IExperimentAssignment[] = [
{
site: 'site',
target: 'target',
Expand All @@ -298,7 +298,7 @@ describe('DataService', () => {
experimentType: EXPERIMENT_TYPE.SIMPLE,
},
];
const emptyAssignment: IExperimentAssignmentv5 = {
const emptyAssignment: IExperimentAssignment = {
site: 'site',
target: '',
assignedCondition: [
Expand All @@ -315,7 +315,7 @@ describe('DataService', () => {
});

it('should return undefined if no site + target match is found', () => {
const experimentAssignmentData: IExperimentAssignmentv5[] = [
const experimentAssignmentData: IExperimentAssignment[] = [
{
Comment thread
danoswaltCL marked this conversation as resolved.
site: 'site',
target: 'target',
Expand All @@ -335,7 +335,7 @@ describe('DataService', () => {
experimentType: EXPERIMENT_TYPE.FACTORIAL,
},
];
const emptyAssignment: IExperimentAssignmentv5 = {
const emptyAssignment: IExperimentAssignment = {
site: 'site',
target: 'target1',
assignedCondition: [
Expand Down
14 changes: 7 additions & 7 deletions clientlibs/js/src/DataService/DataService.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { UpGradeClientInterfaces } from '../types';
import { IExperimentAssignmentv5 } from 'upgrade_types';
import { IExperimentAssignment } from 'upgrade_types';

/**
* Synchronous data store
*/
export class DataService {
private group: UpGradeClientInterfaces.IExperimentUserGroup = null;
private workingGroup: UpGradeClientInterfaces.IExperimentUserWorkingGroup = null;
private experimentAssignmentData: IExperimentAssignmentv5[] = null;
private experimentAssignmentData: IExperimentAssignment[] = null;
private featureFlags: string[] = null;

getGroup(): UpGradeClientInterfaces.IExperimentUserGroup {
Expand All @@ -26,11 +26,11 @@ export class DataService {
this.workingGroup = workingGroup;
}

getExperimentAssignmentData(): IExperimentAssignmentv5[] {
getExperimentAssignmentData(): IExperimentAssignment[] {
return this.experimentAssignmentData;
}

setExperimentAssignmentData(experimentAssignmentData: IExperimentAssignmentv5[]) {
setExperimentAssignmentData(experimentAssignmentData: IExperimentAssignment[]) {
this.experimentAssignmentData = experimentAssignmentData;
}

Expand All @@ -42,7 +42,7 @@ export class DataService {
this.featureFlags = featureFlags;
}

public rotateAssignmentList(assignment: IExperimentAssignmentv5) {
public rotateAssignmentList(assignment: IExperimentAssignment) {
if (assignment.assignedCondition.length > 1) {
assignment.assignedCondition.push(assignment.assignedCondition.shift());
if (assignment.assignedFactor) {
Expand All @@ -52,13 +52,13 @@ export class DataService {
return assignment;
}

public findExperimentAssignmentBySiteAndTarget(site: string, target?: string): IExperimentAssignmentv5 {
public findExperimentAssignmentBySiteAndTarget(site: string, target?: string): IExperimentAssignment {
const normalizedTarget = target ?? '';
const assignment = this.experimentAssignmentData.find(
(assignment) => assignment.site === site && assignment.target === normalizedTarget
);
Comment thread
danoswaltCL marked this conversation as resolved.

const emptyAssignment: IExperimentAssignmentv5 = {
const emptyAssignment: IExperimentAssignment = {
site: site,
target: normalizedTarget,
assignedCondition: [
Expand Down
8 changes: 4 additions & 4 deletions clientlibs/js/src/UpGradeClient/UpgradeClient.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { UpGradeClientInterfaces } from '../types';
import {
ILogInput,
CaliperEnvelope,
IExperimentAssignmentv5,
IExperimentAssignment,
MARKED_DECISION_POINT_STATUS,
IUserAliases,
BinaryRewardAllowedValue,
Expand Down Expand Up @@ -306,11 +306,11 @@ export default class UpgradeClient {
* const userId = "User1"
* const context = "mathia"
*
* const getAllResponse: IExperimentAssignmentv5[] = await upgradeClient.getAllExperimentConditions();
* const getAllResponse: IExperimentAssignment[] = await upgradeClient.getAllExperimentConditions();
* ```
*/
async getAllExperimentConditions(options = { ignoreCache: false }): Promise<IExperimentAssignmentv5[]> {
let response: IExperimentAssignmentv5[] = options.ignoreCache
async getAllExperimentConditions(options = { ignoreCache: false }): Promise<IExperimentAssignment[]> {
let response: IExperimentAssignment[] = options.ignoreCache
? null
: await this.dataService.getExperimentAssignmentData();
if (response == null) {
Expand Down
19 changes: 13 additions & 6 deletions clientlibs/js/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1538,15 +1538,15 @@ follow-redirects@^1.16.0:
integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==

form-data@^4.0.5:
version "4.0.5"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053"
integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==
version "4.0.6"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.6.tgz#28e864e1b786dbebb68db1f452f9635278665827"
integrity sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==
dependencies:
asynckit "^0.4.0"
combined-stream "^1.0.8"
es-set-tostringtag "^2.1.0"
hasown "^2.0.2"
mime-types "^2.1.12"
hasown "^2.0.4"
mime-types "^2.1.35"

fs.realpath@^1.0.0:
version "1.0.0"
Expand Down Expand Up @@ -1670,6 +1670,13 @@ hasown@^2.0.2:
dependencies:
function-bind "^1.1.2"

hasown@^2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.4.tgz#8c62d8cb90beb2aad5d0a5b67581ad9854c3f003"
integrity sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==
dependencies:
function-bind "^1.1.2"

html-escaper@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
Expand Down Expand Up @@ -2334,7 +2341,7 @@ mime-db@^1.54.0:
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5"
integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==

mime-types@^2.1.12:
mime-types@^2.1.35:
version "2.1.35"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
Expand Down
30 changes: 15 additions & 15 deletions packages/backend/src/api/Algorithms.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import seedrandom from 'seedrandom';
import { ConditionPayloadDTO } from './DTO/ConditionPayloadDTO';
import { Experiment } from './models/Experiment';
import { CONDITION_ORDER, EXPERIMENT_TYPE, IExperimentAssignmentv5, IPayload } from 'upgrade_types';
import { CONDITION_ORDER, EXPERIMENT_TYPE, IExperimentAssignment, IPayload } from 'upgrade_types';
import { FactorDTO } from './DTO/FactorDTO';
import { ExperimentCondition } from './models/ExperimentCondition';
import { DecisionPoint } from './models/DecisionPoint';
Expand All @@ -13,7 +13,7 @@ export function withInSubjectType(
factors: FactorDTO[],
userID: string,
repeatedEnrollmentLength: number
): IExperimentAssignmentv5 {
): IExperimentAssignment {
let assignedData = convertToAssignedCondition(experiment, conditionPayloads, decisionPoint, factors);

// passing assigned conditions data converted into queue based on selected algorithm
Expand Down Expand Up @@ -42,11 +42,11 @@ export function withInSubjectType(

export function randomCondition(
experiment,
assignedData: IExperimentAssignmentv5,
assignedData: IExperimentAssignment,
userID: string,
repeatedEnrollmentLength: number
): IExperimentAssignmentv5 {
const randomConditionArray: IExperimentAssignmentv5['assignedCondition'] = [];
): IExperimentAssignment {
const randomConditionArray: IExperimentAssignment['assignedCondition'] = [];
const assignedFactorsArray: Record<string, { level: string; payload: IPayload }>[] = [];

// create 100 elements array of random condition
Expand All @@ -61,7 +61,7 @@ export function randomCondition(
}
}

const randomAssignData: IExperimentAssignmentv5 = {
const randomAssignData: IExperimentAssignment = {
site: assignedData.site,
target: assignedData.target,
assignedCondition: randomConditionArray,
Expand All @@ -75,17 +75,17 @@ export function randomCondition(

export function randomRoundRobinCondition(
experiment,
assignedData: IExperimentAssignmentv5,
assignedData: IExperimentAssignment,
userID: string,
repeatedEnrollmentLength: number
): IExperimentAssignmentv5 {
const randomRoundRobinConditionArray: IExperimentAssignmentv5['assignedCondition'] = [];
): IExperimentAssignment {
const randomRoundRobinConditionArray: IExperimentAssignment['assignedCondition'] = [];
const assignedFactorsArray: Record<string, { level: string; payload: IPayload }>[] = [];
const totalLoopsInQueue = Math.ceil(100 / assignedData.assignedCondition.length);

// create array of random ordered conditions pairs
for (let i = 0; i < totalLoopsInQueue; i++) {
const tempConditionArray: IExperimentAssignmentv5['assignedCondition'] = [...assignedData.assignedCondition];
const tempConditionArray: IExperimentAssignment['assignedCondition'] = [...assignedData.assignedCondition];
const tempFactorArray: Record<string, { level: string; payload: IPayload }>[] =
experiment.type === EXPERIMENT_TYPE.FACTORIAL ? [...assignedData.assignedFactor] : [];

Expand All @@ -104,7 +104,7 @@ export function randomRoundRobinCondition(
}
}

const randomRoundRobinAssignData: IExperimentAssignmentv5 = {
const randomRoundRobinAssignData: IExperimentAssignment = {
site: assignedData.site,
target: assignedData.target,
assignedCondition: randomRoundRobinConditionArray,
Expand All @@ -117,9 +117,9 @@ export function randomRoundRobinCondition(
}

export function rotateElements(
assignedData: IExperimentAssignmentv5,
assignedData: IExperimentAssignment,
repeatedEnrollmentLength: number
): IExperimentAssignmentv5 {
): IExperimentAssignment {
if (repeatedEnrollmentLength > 0 && assignedData.assignedCondition.length >= 2) {
const totalloopIteration = repeatedEnrollmentLength % assignedData.assignedCondition.length;

Expand All @@ -141,8 +141,8 @@ function convertToAssignedCondition(
conditionPayloads: ConditionPayloadDTO[],
decisionPoint: DecisionPoint,
factors: FactorDTO[]
): IExperimentAssignmentv5 {
const assignedConditionArray: IExperimentAssignmentv5['assignedCondition'] = [];
): IExperimentAssignment {
const assignedConditionArray: IExperimentAssignment['assignedCondition'] = [];
const assignedFactorsArray: Record<string, { level: string; payload: IPayload }>[] = [];

experiment.conditions.forEach((condition) => {
Expand Down
4 changes: 2 additions & 2 deletions packages/backend/src/api/controllers/BatchAssignController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { AppRequest } from '../../types';
import { BatchAssignValidator } from './validators/BatchAssignValidator';
import { ExperimentAssignmentService } from '../services/ExperimentAssignmentService';
import { ExperimentUserService } from '../services/ExperimentUserService';
import { IExperimentAssignmentv5 } from 'upgrade_types';
import { IExperimentAssignment } from 'upgrade_types';

@Authorized()
@JsonController('/batch-assign')
Expand Down Expand Up @@ -113,7 +113,7 @@ export class BatchAssignController {
public async getBatchAssignments(
@Body({ validate: true }) requestBody: BatchAssignValidator,
@Req() request: AppRequest
): Promise<Record<string, IExperimentAssignmentv5 | null>> {
): Promise<Record<string, IExperimentAssignment | null>> {
request.logger.info({ message: 'Request received for batch assignments' });
const { context, site, target, userIds } = requestBody;
request.logger.info({
Expand Down
Loading