From 3b7d52abb0e7de00bdf92ee3482a4cae1f6b7d64 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Mon, 3 Jan 2022 01:02:00 +0100 Subject: feat: Add Profile and Service stores MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In the main process, it is optional to specify the ID of a Profile or a Service. The missing ID will be filled in with a randomly generated one. Moreover, services without a profile will get a profile generated with the same name. Signed-off-by: Kristóf Marussy --- packages/main/src/stores/Service.ts | 63 +++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 packages/main/src/stores/Service.ts (limited to 'packages/main/src/stores/Service.ts') diff --git a/packages/main/src/stores/Service.ts b/packages/main/src/stores/Service.ts new file mode 100644 index 0000000..9bc6a43 --- /dev/null +++ b/packages/main/src/stores/Service.ts @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2022 Kristóf Marussy + * + * This file is part of Sophie. + * + * Sophie is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +import type { ServiceSnapshotIn } from '@sophie/shared'; + +import generateId from '../utils/generateId'; + +import type { ProfileSnapshotIn } from './Profile'; + +export interface PartialServiceSnapshotIn + extends Omit { + id?: string | undefined; + profile?: string | undefined; +} + +export function addMissingServiceIdsAndProfiles( + partialServices: PartialServiceSnapshotIn[] | undefined, + profiles: ProfileSnapshotIn[], +): ServiceSnapshotIn[] { + return (partialServices ?? []).map((service) => { + const { name } = service; + let { id, profile } = service; + if (typeof id === 'undefined') { + id = generateId(name); + } + if (typeof profile === 'undefined') { + profile = generateId(name); + profiles.push({ + id: profile, + name: service.name, + }); + } + return { + ...service, + id, + profile, + }; + }); +} + +export type { + Service, + ServiceSnapshotOut, + ServiceSnapshotIn, +} from '@sophie/shared'; +export { service } from '@sophie/shared'; -- cgit v1.2.3-54-g00ecf