Skip to content

Commit

Permalink
One-for-All-156 WIP sumRecords.ts
Browse files Browse the repository at this point in the history
  • Loading branch information
Ryo-Kgym committed Jun 3, 2024
1 parent eab636d commit 3eae2c3
Show file tree
Hide file tree
Showing 3 changed files with 158 additions and 0 deletions.
123 changes: 123 additions & 0 deletions packages/domain/convert/summary/sumRecords.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
import { Records } from "../../schema/recordSchema";
import {
SummaryCriteria,
SumRecords,
} from "../../schema/summary/sumRecordsSchema";
import { sumRecords } from "./sumRecords";

describe("sumRecords", () => {
it("", () => {
const records: Records = {
r1: {
recordId: "r1",
isEditing: false,
columns: {
c1: {
value: "grouping1",
fieldKind: "text",
},
c2: {
value: "100",
fieldKind: "numeric",
},
c3: {
value: "r1c3",
fieldKind: "text",
},
},
},
r2: {
recordId: "r2",
isEditing: false,
columns: {
c1: {
value: "grouping1",
fieldKind: "text",
},
c2: {
value: "200",
fieldKind: "numeric",
},
c3: {
value: "r2c3",
fieldKind: "text",
},
},
},
r3: {
recordId: "r3",
isEditing: false,
columns: {
c1: {
value: "grouping2",
fieldKind: "text",
},
c2: {
value: "300",
fieldKind: "numeric",
},
c3: {
value: "r3c3",
fieldKind: "text",
},
},
},
};

const criteria: SummaryCriteria = {
groupingFields: {
c1: {
id: "c1",
fieldName: "c1",
fieldKind: "text",
fieldIndex: 1,
options: {},
},
},
summaryFields: {
c2: {
id: "c2",
fieldName: "c2",
fieldKind: "numeric",
fieldIndex: 2,
options: {
thousandsSeparatorPosition: 3,
},
},
},
};

expect(sumRecords(records, criteria)).toEqual<SumRecords>({
0: {
columns: {
c1: {
value: "grouping1",
fieldKind: "text",
},
c2: {
value: "300",
fieldKind: "numeric",
},
},
sum: 300,
average: 150,
count: 2,
},
1: {
columns: {
c1: {
value: "grouping2",
fieldKind: "text",
},
c2: {
value: "300",
fieldKind: "numeric",
},
},
sum: 300,
average: 300,
count: 1,
},
});
});
});
12 changes: 12 additions & 0 deletions packages/domain/convert/summary/sumRecords.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { Records } from "../../schema/recordSchema";
import {
SummaryCriteria,
SumRecords,
} from "../../schema/summary/sumRecordsSchema";

export const sumRecords = (
records: Records,
criteria: SummaryCriteria,
): SumRecords => {
return {};
};
23 changes: 23 additions & 0 deletions packages/domain/schema/summary/sumRecordsSchema.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { z } from "zod";

import { fieldsSchema } from "../appSchema";
import { recordColumnsSchema } from "../recordSchema";

const summaryCriteriaSchema = z.object({
groupingFields: fieldsSchema,
summaryFields: fieldsSchema,
});

export type SummaryCriteria = z.infer<typeof summaryCriteriaSchema>;

const sumRecordsSchema = z.record(
z.number(), // index
z.object({
columns: recordColumnsSchema,
sum: z.number(),
average: z.number(),
count: z.number(),
}),
);

export type SumRecords = z.infer<typeof sumRecordsSchema>;

0 comments on commit 3eae2c3

Please sign in to comment.