Skip to content

Commit f73b4ed

Browse files
Artem ZahorodniukArtem Zahorodniuk
Artem Zahorodniuk
authored and
Artem Zahorodniuk
committed
feat: script should support more than 1 local git repository gf-589 (#589)
- moved helpers into src/libs/helpers - changed functions to arrow functions
1 parent aff30fd commit f73b4ed

File tree

5 files changed

+54
-46
lines changed

5 files changed

+54
-46
lines changed

scripts/analytics/src/modules/analytics/analytics.service.ts

+1-46
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
EMPTY_LENGTH,
99
FIRST_ARRAY_INDEX,
1010
} from "./libs/constants/constants.js";
11+
import { mergeStats } from "./libs/helpers/helpers.js";
1112
import {
1213
type ActivityLogCreateItemRequestDto,
1314
type CommitStatistics,
@@ -122,50 +123,4 @@ class AnalyticsService {
122123
}
123124
}
124125

125-
function mergeStats(
126-
statsAll: ActivityLogCreateItemRequestDto[],
127-
): ActivityLogCreateItemRequestDto[] {
128-
return mergeByCriteria(
129-
statsAll,
130-
(item1, item2) => item1.date === item2.date,
131-
(mergedItem, item) =>
132-
(mergedItem.items = mergeStatsItems([
133-
...mergedItem.items,
134-
...item.items,
135-
])),
136-
);
137-
}
138-
139-
function mergeStatsItems(items: CommitStatistics[]): CommitStatistics[] {
140-
return mergeByCriteria(
141-
items,
142-
(item1, item2) =>
143-
item1.authorEmail === item2.authorEmail &&
144-
item1.authorName === item2.authorName,
145-
(mergedItem, item) => (mergedItem.commitsNumber += item.commitsNumber),
146-
);
147-
}
148-
149-
function mergeByCriteria<T>(
150-
items: T[],
151-
compareFunction: (item1: T, item2: T) => boolean,
152-
mergeFunction: (mergedItem: T, item: T) => void,
153-
): T[] {
154-
const mergedItems: T[] = [];
155-
156-
for (const item of items) {
157-
const mergedItem = mergedItems.find((mergedItem) =>
158-
compareFunction(mergedItem, item),
159-
);
160-
161-
if (mergedItem) {
162-
mergeFunction(mergedItem, item);
163-
} else {
164-
mergedItems.push(item);
165-
}
166-
}
167-
168-
return mergedItems;
169-
}
170-
171126
export { AnalyticsService };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { mergeStats } from "./merge-stats/merge-stats.helper.js";
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const mergeArrayItems = <T>(
2+
items: T[],
3+
compareFunction: (item1: T, item2: T) => boolean,
4+
mergeFunction: (mergedItem: T, item: T) => void,
5+
) => {
6+
const mergedItems: T[] = [];
7+
8+
for (const item of items) {
9+
const mergedItem = mergedItems.find((mergedItem) =>
10+
compareFunction(mergedItem, item),
11+
);
12+
13+
if (mergedItem) {
14+
mergeFunction(mergedItem, item);
15+
} else {
16+
mergedItems.push(item);
17+
}
18+
}
19+
20+
return mergedItems;
21+
};
22+
23+
export { mergeArrayItems };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { ActivityLogCreateItemRequestDto } from "../../types/types.js";
2+
import { mergeArrayItems } from "../merge-array-items/merge-array-items.helper.js";
3+
4+
const mergeStatsItems = (items: ActivityLogCreateItemRequestDto["items"]) =>
5+
mergeArrayItems(
6+
items,
7+
(item1, item2) =>
8+
item1.authorEmail === item2.authorEmail &&
9+
item1.authorName === item2.authorName,
10+
(mergedItem, item) => (mergedItem.commitsNumber += item.commitsNumber),
11+
);
12+
13+
export { mergeStatsItems };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { ActivityLogCreateItemRequestDto } from "../../types/types.js";
2+
import { mergeArrayItems } from "../merge-array-items/merge-array-items.helper.js";
3+
import { mergeStatsItems } from "../merge-stats-items/merge-stats-items.helper.js";
4+
5+
const mergeStats = (statsAll: ActivityLogCreateItemRequestDto[]) =>
6+
mergeArrayItems(
7+
statsAll,
8+
(item1, item2) => item1.date === item2.date,
9+
(mergedItem, item) =>
10+
(mergedItem.items = mergeStatsItems([
11+
...mergedItem.items,
12+
...item.items,
13+
])),
14+
);
15+
16+
export { mergeStats };

0 commit comments

Comments
 (0)