Skip to content

Instantly share code, notes, and snippets.

@gcangussu
Last active March 24, 2021 21:42
Show Gist options
  • Save gcangussu/ceab7139f56934936b903e04eab71f6d to your computer and use it in GitHub Desktop.
Save gcangussu/ceab7139f56934936b903e04eab71f6d to your computer and use it in GitHub Desktop.
Mock /loan/rfqs/ endpoint on frontend. You need to change two files.
// packages/utils/tests/factories.ts
// import { createHash } from 'crypto';
import faker from 'faker';
/**
* Seed the random sequence that generates the random values.
* @param sentence Any string to use as seed
*/
export function seed(sentence: string) {
// const num = createHash('MD4').update(sentence).digest().readDoubleBE(0);
let num = 0;
for (const c of sentence) {
num += c.charCodeAt(0) * num ** 2;
}
faker.seed(num);
}
/**
* Make multiple instances of a factory.
*
* @example
* // returns [A0, A1, ..., A4]
* makeList(makeA, 5);
*
* @example
* // Provide custom data for instantiation
* makeList(makeA, 5, (i) => {
* if (i === 2) return { param1: 'value' };
* return {};
* })
*/
export function makeList<T>(
maker: (data?: Partial<T>) => T,
count: number,
getData?: (i: number) => Partial<T>,
): T[] {
const mapper =
getData != null
? (_: unknown, i: number) => maker(getData(i))
: () => maker();
return new Array(count).fill(null).map(mapper);
}
/**
* Make multiple instances of a factory. Like `makeList`, but returns
* an object mapping `id`s to the instances created.
*/
export function makeMapObject<
T extends { readonly id: K },
K extends string | number
>(
maker: (data?: Partial<T>) => T,
count: number,
getData?: (i: number) => Partial<T>,
): Record<K, T> {
const list = makeList(maker, count, getData);
const map: Record<string | number, T> = {};
for (const item of list) {
map[item.id] = item;
}
return map;
}
// packages/api/src/loans.ts
import { AsyncResp, BaseReq, request } from './fetch-api';
import { normalizeLoanRfqs } from './normalize/loans';
import { LoanRfq, LoanQuote, RawLoanRfq } from './types/loans';
import { keyBy } from 'lodash';
import { makeQuote, makeRfq, makeTerm } from '../tests/factories/loans';
import { seed, makeMapObject } from '@paradigm/utils/tests/factories';
seed('yolo');
const start = Date.now() - 2 * 60 * 60 * 1000;
const quote1 = makeQuote({ is_filled: true });
const rfq1 = makeRfq({
created_at: new Date(start + 1000),
is_maker: true,
type: 'LD',
term: makeTerm({ quotes: [quote1.id] }),
});
const quote2 = makeQuote({ is_filled: true });
const rfq2 = makeRfq({
created_at: new Date(start + 2000),
is_maker: true,
type: 'BW',
term: makeTerm({ quotes: [quote2.id] }),
});
const quote3 = makeQuote({ is_filled: false });
const rfq3 = makeRfq({
created_at: new Date(start + 3000),
is_canceled: true,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
term: makeTerm({ quotes: [quote3.id] }),
});
const quote4 = makeQuote({ is_filled: false });
const rfq4 = makeRfq({
created_at: new Date(start + 4000),
is_canceled: false,
is_filled: true,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
term: makeTerm({ quotes: [quote4.id] }),
});
const quote5 = makeQuote({ is_filled: false });
const rfq5 = makeRfq({
created_at: new Date(start + 5000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() - 1000),
is_maker: true,
term: makeTerm({ quotes: [quote5.id] }),
});
const quote6 = makeQuote({ is_filled: false });
const rfq6 = makeRfq({
created_at: new Date(start + 6000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
type: 'BW',
term: makeTerm({ quotes: [quote6.id] }),
});
const quote7 = makeQuote({ is_filled: false });
const rfq7 = makeRfq({
created_at: new Date(start + 7000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
type: 'LD',
term: makeTerm({ quotes: [quote6.id] }),
});
const rfq11 = makeRfq({
created_at: new Date(start + 11000),
is_maker: true,
type: 'LD',
});
const rfq12 = makeRfq({
created_at: new Date(start + 12000),
is_maker: true,
type: 'BW',
});
const rfq13 = makeRfq({
created_at: new Date(start + 13000),
is_canceled: true,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
});
const rfq14 = makeRfq({
created_at: new Date(start + 14000),
is_canceled: false,
is_filled: true,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
});
const rfq15 = makeRfq({
created_at: new Date(start + 15000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() - 1000),
is_maker: true,
});
const rfq16 = makeRfq({
created_at: new Date(start + 16000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
type: 'BW',
});
const rfq17 = makeRfq({
created_at: new Date(start + 17000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: true,
type: 'LD',
});
const quote101 = makeQuote({ is_filled: true });
const rfq101 = makeRfq({
created_at: new Date(start + 101000),
is_maker: false,
type: 'LD',
term: makeTerm({ quotes: [quote101.id] }),
});
const quote102 = makeQuote({ is_filled: true });
const rfq102 = makeRfq({
created_at: new Date(start + 102000),
is_maker: false,
type: 'BW',
term: makeTerm({ quotes: [quote102.id] }),
});
const quote103 = makeQuote({ is_filled: false });
const rfq103 = makeRfq({
created_at: new Date(start + 103000),
is_canceled: true,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: false,
term: makeTerm({ quotes: [quote103.id] }),
});
// const quote104 = makeQuote({ is_filled: false });
// const rfq104 = makeRfq({
// created_at: new Date(start + 104000),
// is_canceled: false,
// is_filled: true,
// expires_at: new Date(Date.now() + 99999999),
// is_maker: false,
// term: makeTerm({ quotes: [quote104.id] }),
// });
const quote105 = makeQuote({ is_filled: false });
const rfq105 = makeRfq({
created_at: new Date(start + 105000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() - 1000),
is_maker: false,
term: makeTerm({ quotes: [quote105.id] }),
});
const quote106 = makeQuote({ is_filled: false });
const rfq106 = makeRfq({
created_at: new Date(start + 106000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: false,
type: 'BW',
term: makeTerm({ quotes: [quote106.id] }),
});
const quote107 = makeQuote({ is_filled: false });
const rfq107 = makeRfq({
created_at: new Date(start + 107000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: false,
type: 'LD',
term: makeTerm({ quotes: [quote6.id] }),
});
const rfq111 = makeRfq({
created_at: new Date(start + 1011000),
is_maker: false,
type: 'LD',
});
const rfq112 = makeRfq({
created_at: new Date(start + 1012000),
is_maker: false,
type: 'BW',
});
const rfq113 = makeRfq({
created_at: new Date(start + 1013000),
is_canceled: true,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: false,
});
// const rfq114 = makeRfq({
// created_at: new Date(start + 1014000),
// is_canceled: false,
// is_filled: true,
// expires_at: new Date(Date.now() + 99999999),
// is_maker: false,
// });
const rfq115 = makeRfq({
created_at: new Date(start + 1015000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() - 1000),
is_maker: false,
});
const rfq116 = makeRfq({
created_at: new Date(start + 1016000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: false,
type: 'BW',
});
const rfq117 = makeRfq({
created_at: new Date(start + 1017000),
is_canceled: false,
is_filled: false,
expires_at: new Date(Date.now() + 99999999),
is_maker: false,
type: 'LD',
});
const quotes = keyBy(
[
quote1,
quote2,
quote3,
quote4,
quote5,
quote6,
quote7,
quote101,
quote102,
quote103,
// quote104,
quote105,
quote106,
quote107,
],
'id',
);
const rfqs = keyBy(
[
rfq1,
rfq2,
rfq3,
rfq4,
rfq5,
rfq6,
rfq7,
rfq11,
rfq12,
rfq13,
rfq14,
rfq15,
rfq16,
rfq17,
rfq101,
rfq102,
rfq103,
// rfq104,
rfq105,
rfq106,
rfq107,
rfq111,
rfq112,
rfq113,
// rfq114,
rfq115,
rfq116,
rfq117,
],
'id',
);
export interface GetLoansRfqsReq extends BaseReq {
readonly page: number;
}
interface RawGetLoansRfqsResp {
readonly count: number;
readonly next: number | null;
readonly previous: number | null;
readonly results: RawLoanRfq[];
}
export interface GetLoansRfqsResp {
readonly count: number;
readonly next: number | null;
readonly previous: number | null;
/** Loan rfq ids */
readonly results: readonly number[];
readonly rfqs: { readonly [id: number]: LoanRfq };
readonly quotes: { readonly [id: number]: LoanQuote };
}
export async function getLoansRfqs(
req: GetLoansRfqsReq,
): AsyncResp<GetLoansRfqsResp> {
await new Promise((resolve) => setTimeout(resolve, 2500));
return {
ok: true,
error: '',
message: '',
status: 200,
data: {
count: 1,
next: null,
previous: null,
quotes,
rfqs,
results: Object.values(rfqs).map((rfq) => rfq.id),
},
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment