Skip to content

Commit 8b07833

Browse files
ddecrullegarronej
andauthored
feat: Improve Restorable configs Rename and reorder restorable services (#956)
Co-authored-by: garronej <joseph.garrone@protonmail.com>
1 parent 871a91e commit 8b07833

31 files changed

Lines changed: 618 additions & 261 deletions

File tree

web/src/core/adapters/s3Client/s3Client.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -327,8 +327,6 @@ export function createS3Client(
327327

328328
const { awsS3Client } = await getAwsS3Client();
329329

330-
console.log("before");
331-
332330
const { isBucketPolicyAvailable, allowedPrefix, bucketPolicy } =
333331
await (async () => {
334332
const { GetBucketPolicyCommand, S3ServiceException } = await import(
@@ -436,8 +434,6 @@ export function createS3Client(
436434
};
437435
})();
438436

439-
console.log("after");
440-
441437
const Contents: import("@aws-sdk/client-s3")._Object[] = [];
442438
const CommonPrefixes: import("@aws-sdk/client-s3").CommonPrefix[] = [];
443439

web/src/core/usecases/launcher/selectors.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import * as userConfigs from "core/usecases/userConfigs";
88
import { exclude } from "tsafe/exclude";
99
import { createSelector } from "clean-architecture";
1010
import * as s3ConfigManagement from "core/usecases/s3ConfigManagement";
11-
import type { RestorableServiceConfig } from "core/usecases/restorableConfigManagement";
1211
import { id } from "tsafe/id";
1312
import { computeRootForm } from "./decoupledLogic";
1413
import { computeDiff } from "core/tools/Stringifyable";
@@ -210,7 +209,7 @@ const restorableConfig = createSelector(
210209
s3ConfigId,
211210
helmValues,
212211
helmValues_default
213-
): RestorableServiceConfig | null => {
212+
): projectManagement.ProjectConfigs.RestorableServiceConfig | null => {
214213
if (!isReady) {
215214
return null;
216215
}
@@ -244,7 +243,7 @@ const restorableConfig = createSelector(
244243
const isRestorableConfigSaved = createSelector(
245244
isReady,
246245
restorableConfig,
247-
restorableConfigManagement.protectedSelectors.restorableConfigs,
246+
restorableConfigManagement.selectors.restorableConfigs,
248247
(isReady, restorableConfig, restorableConfigs) => {
249248
if (!isReady) {
250249
return null;
@@ -528,7 +527,7 @@ const willOverwriteExistingConfigOnSave = createSelector(
528527
chartName,
529528
catalogId,
530529
friendlyName,
531-
restorableConfigManagement.protectedSelectors.restorableConfigs,
530+
restorableConfigManagement.selectors.restorableConfigs,
532531
(isReady, chartName, catalogId, friendlyName, restorableConfigs) => {
533532
if (!isReady) {
534533
return null;

web/src/core/usecases/launcher/thunks.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,10 @@ import type { StringifyableAtomic, Stringifyable } from "core/tools/Stringifyabl
1616
import { type XOnyxiaContext } from "core/ports/OnyxiaApi";
1717
import { createUsecaseContextApi } from "clean-architecture";
1818
import { computeHelmValues, type FormFieldValue } from "./decoupledLogic";
19-
import type { RestorableServiceConfig } from "core/usecases/restorableConfigManagement";
2019
import { computeRootForm } from "./decoupledLogic";
2120

21+
type RestorableServiceConfig = projectManagement.ProjectConfigs.RestorableServiceConfig;
22+
2223
type RestorableServiceConfigLike = {
2324
catalogId: string;
2425
chartName: string;

web/src/core/usecases/projectManagement/decoupledLogic/projectConfigsMigration/projectConfigsMigration.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ export async function projectConfigsMigration(params: {
2222
path: pathJoin(projectVaultTopDirPath_reserved, key)
2323
})
2424
.then(
25-
({ secret }) => secretToValue(secret) as ProjectConfigs["__modelVersion"],
25+
({ secret }) => secretToValue(secret) as number,
2626
() => {
2727
console.log("The above error is ok");
2828
return undefined;
@@ -33,7 +33,7 @@ export async function projectConfigsMigration(params: {
3333
})();
3434

3535
try {
36-
if (modelVersion === 0) {
36+
if (modelVersion < 1) {
3737
await v0ToV1({
3838
projectVaultTopDirPath_reserved,
3939
secretsManager

web/src/core/usecases/projectManagement/decoupledLogic/projectConfigsMigration/v0ToV1.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import type { ProjectConfigs } from "../ProjectConfigs";
21
import { assert, type Equals } from "tsafe/assert";
32
import type { StringifyableAtomic } from "core/tools/Stringifyable";
43
import type { SecretsManager } from "core/ports/SecretsManager";
@@ -62,7 +61,7 @@ namespace v0 {
6261
}
6362
}
6463

65-
namespace v1 {
64+
export namespace v1 {
6665
export type ProjectConfigs = {
6766
__modelVersion: 1;
6867
servicePassword: string;
@@ -107,8 +106,6 @@ namespace v1 {
107106
}
108107
}
109108

110-
assert<Equals<v1.ProjectConfigs, ProjectConfigs>>();
111-
112109
export async function v0ToV1(params: {
113110
projectVaultTopDirPath_reserved: string;
114111
secretsManager: SecretsManager;

web/src/core/usecases/projectManagement/thunks.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,12 +278,12 @@ export const protectedThunks = {
278278
},
279279
updateConfigValue:
280280
<K extends keyof ProjectConfigs>(params: ChangeConfigValueParams<K>) =>
281-
(...args) => {
281+
async (...args) => {
282282
const [dispatch, getState, rootContext] = args;
283283

284284
const { mutex } = getContext(rootContext);
285285

286-
mutex.runExclusive(async () => {
286+
await mutex.runExclusive(async () => {
287287
const { secretsManager } = rootContext;
288288

289289
const currentProjectConfig = protectedSelectors.projectConfig(getState());

web/src/core/usecases/restorableConfigManagement/decoupledLogic/getAreSameRestorableConfig.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ export function getAreSameRestorableConfig(
1818
assert<
1919
Equals<
2020
typeof key,
21-
keyof projectManagement.ProjectConfigs.RestorableServiceConfig
21+
Exclude<
22+
keyof projectManagement.ProjectConfigs.RestorableServiceConfig,
23+
"creationTime"
24+
>
2225
>
2326
>();
2427

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { assert, type Equals } from "tsafe/assert";
2+
3+
export type RestorableServiceConfigRef = {
4+
friendlyName: string;
5+
catalogId: string;
6+
chartName: string;
7+
};
8+
9+
export function getAreSameRestorableConfigRef(
10+
a: RestorableServiceConfigRef,
11+
b: RestorableServiceConfigRef
12+
) {
13+
const keys = ["friendlyName", "catalogId", "chartName"] as const;
14+
15+
assert<Equals<(typeof keys)[number], keyof RestorableServiceConfigRef>>;
16+
17+
for (const key of keys) {
18+
const v_a = a[key];
19+
20+
assert<Equals<typeof v_a, string>>();
21+
22+
const v_b = b[key];
23+
24+
if (v_a !== v_b) {
25+
return false;
26+
}
27+
}
28+
29+
return true;
30+
}

web/src/core/usecases/restorableConfigManagement/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,7 @@ export * from "./state";
22
export * from "./selectors";
33
export * from "./thunks";
44
export { getAreSameRestorableConfig } from "./decoupledLogic/getAreSameRestorableConfig";
5+
export {
6+
type RestorableServiceConfigRef,
7+
getAreSameRestorableConfigRef
8+
} from "./decoupledLogic/getAreSameRestorableConfigRef";

web/src/core/usecases/restorableConfigManagement/selectors.ts

Lines changed: 7 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,23 @@ import type { State as RootState } from "core/bootstrap";
33
import { name } from "./state";
44
import * as projectManagement from "core/usecases/projectManagement";
55

6-
export type RestorableServiceConfig =
7-
projectManagement.ProjectConfigs.RestorableServiceConfig;
8-
96
function state(rootState: RootState) {
107
return rootState[name];
118
}
129

1310
const restorableConfigs = createSelector(
1411
projectManagement.protectedSelectors.projectConfig,
15-
({ restorableConfigs }) => [...restorableConfigs].reverse()
16-
);
17-
18-
const chartIconUrlByRestorableConfigIndex = createSelector(
19-
state,
20-
restorableConfigs,
21-
(state, restorableConfigs): Record<number, string | undefined> => {
22-
const { indexedChartsIcons } = state;
23-
24-
const chartIconUrlByRestorableConfigIndex = Object.fromEntries(
25-
restorableConfigs.map((restorableConfig, restorableConfigIndex) => [
26-
restorableConfigIndex,
12+
createSelector(state, state => state.indexedChartsIcons),
13+
({ restorableConfigs }, indexedChartsIcons) =>
14+
restorableConfigs.map(restorableConfig => ({
15+
...restorableConfig,
16+
chartIconUrl:
2717
indexedChartsIcons[restorableConfig.catalogId]?.[
2818
restorableConfig.chartName
2919
]
30-
])
31-
);
32-
33-
return chartIconUrlByRestorableConfigIndex;
34-
}
20+
}))
3521
);
3622

37-
const main = createSelector(
38-
restorableConfigs,
39-
chartIconUrlByRestorableConfigIndex,
40-
(restorableConfigs, chartIconUrlByRestorableConfigIndex) => ({
41-
restorableConfigs,
42-
chartIconUrlByRestorableConfigIndex
43-
})
44-
);
45-
46-
export const protectedSelectors = {
47-
restorableConfigs,
48-
chartIconUrlByRestorableConfigIndex
49-
};
50-
5123
export const selectors = {
52-
main
24+
restorableConfigs
5325
};

0 commit comments

Comments
 (0)