feat(quick-261008-w5w): Modul-Historie aller zehn Module nachgetragen
- neun weitere Changelogs aus Git-Tags und CHANGELOG.md - alle Seeds lesen ihre Version per latestVersion - Waechter: Vollstaendigkeit, keine Waisen, dkv ab 1.1.0 Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,78 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Cert Manager, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const CERT_MANAGER_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.1.0',
|
||||
date: '2026-10-02',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Neuer Reiter „Übersicht“: Ziehen Sie alle Dateien vom Zertifikatsaussteller (auch die ZIP-Datei) auf einmal hinein. Tessera erkennt jede Datei, nennt ihren Zweck und ihre Gültigkeit und zeigt, was zusammengehört.',
|
||||
en: 'New “Overview” tab: drop all files from your certificate issuer (including the ZIP file) in at once. Tessera recognises each file, states its purpose and validity, and shows what belongs together.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Jeder erkannte Teil lässt sich in jedem passenden Format herunterladen, zum Beispiel als PEM, DER, mit Kette, als PKCS#7 oder als PFX mit Schlüssel.',
|
||||
en: 'Every recognised part can be downloaded in any suitable format, for example as PEM, DER, with chain, as PKCS#7 or as PFX with key.',
|
||||
},
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die Texte des Moduls sprechen Sie jetzt durchgehend mit „Sie“ an.',
|
||||
en: 'The texts of the module now address you consistently in the formal form.',
|
||||
},
|
||||
{
|
||||
kind: 'fixed',
|
||||
de: 'Eine passwortgeschützte PFX-Datei erscheint nur noch als ruhiger Hinweis, wenn Zertifikat und Schlüssel schon vorliegen.',
|
||||
en: 'A password-protected PFX file now only appears as a calm note when the certificate and key are already available.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.2',
|
||||
date: '2026-09-28',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die Seiten des Moduls haben das neue Tessera-Aussehen.',
|
||||
en: 'The pages of the module have the new Tessera look.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.1',
|
||||
date: '2026-09-22',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die ZIP-Datei mit den aufgeteilten Zertifikaten heißt jetzt „Zertifikate.zip“ (bei englischer Spracheinstellung „certificates.zip“) und ist auch unter Windows sicher benannt.',
|
||||
en: 'The ZIP file with the split certificates is now named “certificates.zip” (“Zertifikate.zip” in German) and is safely named on Windows as well.',
|
||||
},
|
||||
{
|
||||
kind: 'fixed',
|
||||
de: 'Beschriftungen und Bedienelemente sind besser mit Tastatur und Bildschirmleser nutzbar.',
|
||||
en: 'Labels and controls work better with keyboard and screen reader.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-09-15',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Zertifikate prüfen: Tessera liest PEM-, DER- und PFX-Dateien und zeigt die Einzelheiten, auch mit Passwort.',
|
||||
en: 'Inspect certificates: Tessera reads PEM, DER and PFX files and shows the details, including password-protected ones.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Zertifikate aufteilen, in andere Formate umwandeln und zu einer Kette oder einer PFX-Datei zusammenführen.',
|
||||
en: 'Split certificates, convert them to other formats and merge them into a chain or a PFX file.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { CERT_MANAGER_CHANGELOG } from './cert-manager.changelog';
|
||||
|
||||
/**
|
||||
* Seeds the cert-manager module into the module registry.
|
||||
@@ -15,7 +17,8 @@ export async function seedCertManagerModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'cert-manager',
|
||||
name: 'Cert Manager',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(CERT_MANAGER_CHANGELOG),
|
||||
category: 'security-tools',
|
||||
description: {
|
||||
de: 'Zertifikate analysieren, konvertieren und verwalten',
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul DKV-Rechnung, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const DKV_FLEET_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.1.0',
|
||||
date: '2026-10-08',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die Modulbeschreibung im Marktplatz weist darauf hin, dass das Modul die Freigabestufe „Verwalten“ braucht. Mit „Benutzen“ erscheint es zwar in der Seitenleiste, öffnet aber nur die Seite „Kein Zugriff“.',
|
||||
en: 'The module description in the marketplace now points out that the module needs the “Manage” permission level. With “Use” it appears in the sidebar but only opens the “No access” page.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.3',
|
||||
date: '2026-10-06',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Das Modul steht jetzt Administratoren und Benutzern mit der Freigabestufe „Verwalten“ zur Verfügung.',
|
||||
en: 'The module is now available to administrators and users with the “Manage” permission level.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.2',
|
||||
date: '2026-09-28',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die Seiten des Moduls haben das neue Tessera-Aussehen.',
|
||||
en: 'The pages of the module have the new Tessera look.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.1',
|
||||
date: '2026-09-22',
|
||||
changes: [
|
||||
{
|
||||
kind: 'fixed',
|
||||
de: 'Beim Löschen eines Fahrzeugs lassen sich die Knöpfe im Dialog nicht mehr doppelt auslösen, solange die Anfrage läuft.',
|
||||
en: 'When deleting a vehicle, the buttons in the dialog can no longer be triggered twice while the request is running.',
|
||||
},
|
||||
{
|
||||
kind: 'fixed',
|
||||
de: 'Die Fahrzeugtabelle erscheint jetzt vollständig in der gewählten Sprache und ist besser mit dem Bildschirmleser nutzbar.',
|
||||
en: 'The vehicle table now appears fully in your chosen language and works better with a screen reader.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-09-15',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Tankkarten-Rechnungen werden automatisch aus dem Postfach verarbeitet.',
|
||||
en: 'Fuel card invoices are processed automatically from the mailbox.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Fahrzeug-Stammdaten mit CSV-Import, dazu Historie und Export.',
|
||||
en: 'Vehicle master data with CSV import, plus history and export.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { DKV_FLEET_CHANGELOG } from './dkv.changelog';
|
||||
|
||||
/**
|
||||
* Seeds the DKV Fleet module into the module registry.
|
||||
@@ -15,7 +17,8 @@ export async function seedDkvModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'dkv-fleet',
|
||||
name: 'DKV-Rechnung',
|
||||
version: '1.1.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(DKV_FLEET_CHANGELOG),
|
||||
category: 'fleet',
|
||||
description: {
|
||||
de: 'DKV-Tankkartenrechnungen automatisch verarbeiten. Benötigt die Freigabestufe „Verwalten“.',
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Domaincheck, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const DOMAINCHECK_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.0.1',
|
||||
date: '2026-09-28',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die Seiten des Moduls haben das neue Tessera-Aussehen.',
|
||||
en: 'The pages of the module have the new Tessera look.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-09-15',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Prüfen Sie, ob eine Domain für die gängigen Endungen noch frei ist.',
|
||||
en: 'Check whether a domain is still available for the common endings.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { DOMAINCHECK_CHANGELOG } from './domaincheck.changelog';
|
||||
|
||||
/**
|
||||
* Seeds the domaincheck module into the module registry.
|
||||
@@ -14,7 +16,8 @@ export async function seedDomaincheckModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'domaincheck',
|
||||
name: 'Domaincheck',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(DOMAINCHECK_CHANGELOG),
|
||||
category: 'domain-tools',
|
||||
description: {
|
||||
de: 'Domain-Verfügbarkeit prüfen',
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Domains, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const DOMAINS_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-10-08',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Domains bei AutoDNS registrieren: Verfügbarkeit prüfen, Kontakte wählen, Zusammenfassung mit System und Preis ansehen und verbindlich bestellen. Jede Registrierung wird höchstens einmal abgeschickt, auch bei Doppelklick, und nie automatisch wiederholt.',
|
||||
en: 'Register domains with AutoDNS: check availability, choose contacts, review the summary with system and price and order. Each registration is sent at most once, even on a double click, and never repeated automatically.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Alle Kontakte aus AutoDNS erscheinen automatisch; neue Kontakte legen Sie über ein Formular an. Kontakte ordnen Sie einzeln oder viele auf einmal einem Kunden zu, Ihre eigene Firma markieren Sie als Kunden.',
|
||||
en: 'All contacts from AutoDNS appear automatically; you create new contacts with a form. You assign contacts to a customer one by one or many at once, and you mark your own company as a customer.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Die Domainliste zeigt Kunde, Inhaber, Ablaufdatum und Status; Listen lassen sich nach Kunde filtern und gruppieren.',
|
||||
en: 'The domain list shows customer, holder, expiry date and status; lists can be filtered and grouped by customer.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Der Reiter „Aufträge“ zeigt den Stand jeder Registrierung und gleicht ihn mit AutoDNS ab; ist unklar, ob eine Bestellung angekommen ist, steht sie auf „Ergebnis ungeklärt“.',
|
||||
en: 'The “Orders” tab shows the status of each registration and reconciles it with AutoDNS; if it is unclear whether an order arrived, it is marked “Result unclear”.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Die Anbindung tragen Sie unter „Einstellungen“ getrennt für das Demo-System und das Live-System ein; das Passwort wird verschlüsselt gespeichert, und der Wechsel auf das Live-System verlangt eine ausdrückliche Bestätigung.',
|
||||
en: 'You set up the connection under “Settings” separately for the demo system and the live system; the password is stored encrypted, and switching to the live system requires explicit confirmation.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { DOMAINS_CHANGELOG } from './domains.changelog';
|
||||
|
||||
/**
|
||||
* Seeds the domains module into the module registry (quick-261008-dts).
|
||||
@@ -12,7 +14,8 @@ export async function seedDomainsModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'domains',
|
||||
name: 'Domains',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(DOMAINS_CHANGELOG),
|
||||
category: 'domain-tools',
|
||||
description: {
|
||||
de: 'Domains bei AutoDNS registrieren, Kontakte und Kunden zuordnen',
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Handelsware, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const HANDELSWARE_DATEV_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-10-06',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Eine Excel-Liste mit Handelswaren-Umsätzen hochladen: Tessera ordnet jedem Produkt sein Konto zu, markiert neue Produkte und vergibt ihnen das nächste freie Gegenkonto.',
|
||||
en: 'Upload an Excel list of merchandise sales: Tessera assigns each product its account, marks new products and gives them the next free offset account.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Das Buchungsdatum wird aus dem Dateinamen abgeleitet und lässt sich ändern; die DATEV-Buchungsdatei laden Sie mit einem Klick herunter.',
|
||||
en: 'The booking date is derived from the file name and can be changed; you download the DATEV booking file with one click.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Im Reiter „Konten“ pflegen Sie die Kontenliste, lesen sie aus einer CSV-Datei ein und exportieren sie wieder. Standard-Erlöskonto und Startwert für das Gegenkonto tragen Administratoren oder Benutzer mit der Freigabestufe „Verwalten“ ein.',
|
||||
en: 'In the “Accounts” tab you maintain the account list, import it from a CSV file and export it again. Administrators or users with the “Manage” permission level enter the default revenue account and the start value for the offset account.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { HANDELSWARE_DATEV_CHANGELOG } from './handelsware-datev.changelog';
|
||||
|
||||
/**
|
||||
* Traegt das Modul "Handelsware" in die Modulverwaltung ein (quick-261002-fm5).
|
||||
@@ -11,7 +13,8 @@ export async function seedHandelswareDatevModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'handelsware-datev',
|
||||
name: 'Handelsware',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(HANDELSWARE_DATEV_CHANGELOG),
|
||||
category: 'accounting',
|
||||
description: {
|
||||
de: 'Handelswaren-Umsätze aus Excel den Erlöskonten zuordnen und als DATEV-Buchungsdatei exportieren',
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Kantinenabrechnung, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const KANTINE_DATEV_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-10-06',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Die CSV-Datei der Kantine hochladen: Tessera zeigt Zeilenzahl, Abrechnungsmonat und Gesamtbetrag, nennt fehlerhafte Zeilen mit Zeilennummer und weist auf unterschiedliche Abrechnungsmonate hin.',
|
||||
en: 'Upload the canteen CSV file: Tessera shows the number of rows, billing month and total amount, names faulty rows with their row number and warns about differing billing months.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Ist alles in Ordnung, laden Sie mit einem Klick die DATEV-Lohndatei herunter. Die DATEV-Nummern und die Lohnart tragen Administratoren oder Benutzer mit der Freigabestufe „Verwalten“ einmalig ein; bis dahin ist der Download gesperrt.',
|
||||
en: 'If everything is fine, you download the DATEV payroll file with one click. Administrators or users with the “Manage” permission level enter the DATEV numbers and the wage type once; until then the download is blocked.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { KANTINE_DATEV_CHANGELOG } from './kantine-datev.changelog';
|
||||
|
||||
/**
|
||||
* Traegt das Modul "Kantinenabrechnung" in die Modulverwaltung ein
|
||||
@@ -12,7 +14,8 @@ export async function seedKantineDatevModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'kantine-datev',
|
||||
name: 'Kantinenabrechnung',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(KANTINE_DATEV_CHANGELOG),
|
||||
category: 'accounting',
|
||||
description: {
|
||||
de: 'Kantinen-CSV prüfen und als DATEV-Lohndatei (ASCII) für die Gehaltsabrechnung exportieren',
|
||||
|
||||
@@ -1,4 +1,13 @@
|
||||
import { CERT_MANAGER_CHANGELOG } from '../cert-manager/cert-manager.changelog';
|
||||
import { DKV_FLEET_CHANGELOG } from '../dkv/dkv.changelog';
|
||||
import { DOMAINCHECK_CHANGELOG } from '../domaincheck/domaincheck.changelog';
|
||||
import { DOMAINS_CHANGELOG } from '../domains/domains.changelog';
|
||||
import { HANDELSWARE_DATEV_CHANGELOG } from '../handelsware-datev/handelsware-datev.changelog';
|
||||
import { KANTINE_DATEV_CHANGELOG } from '../kantine-datev/kantine-datev.changelog';
|
||||
import { NEXTCLOUD_FILES_CHANGELOG } from '../nextcloud-files/nextcloud-files.changelog';
|
||||
import { NEXTCLOUD_STATUS_CHANGELOG } from '../nextcloud-status/nextcloud-status.changelog';
|
||||
import { PROXMOX_CHANGELOG } from '../proxmox/proxmox.changelog';
|
||||
import { TENDER_RADAR_CHANGELOG } from '../tenders/tenders.changelog';
|
||||
import type { ModuleChangelog } from './module-changelog';
|
||||
|
||||
/**
|
||||
@@ -9,7 +18,18 @@ import type { ModuleChangelog } from './module-changelog';
|
||||
export const MODULE_CHANGELOGS: ReadonlyMap<string, ModuleChangelog> = new Map<
|
||||
string,
|
||||
ModuleChangelog
|
||||
>([['nextcloud-status', NEXTCLOUD_STATUS_CHANGELOG]]);
|
||||
>([
|
||||
['cert-manager', CERT_MANAGER_CHANGELOG],
|
||||
['dkv-fleet', DKV_FLEET_CHANGELOG],
|
||||
['domaincheck', DOMAINCHECK_CHANGELOG],
|
||||
['domains', DOMAINS_CHANGELOG],
|
||||
['handelsware-datev', HANDELSWARE_DATEV_CHANGELOG],
|
||||
['kantine-datev', KANTINE_DATEV_CHANGELOG],
|
||||
['nextcloud-files', NEXTCLOUD_FILES_CHANGELOG],
|
||||
['nextcloud-status', NEXTCLOUD_STATUS_CHANGELOG],
|
||||
['proxmox', PROXMOX_CHANGELOG],
|
||||
['tender-radar', TENDER_RADAR_CHANGELOG],
|
||||
]);
|
||||
|
||||
/**
|
||||
* Map statt Objekt-Index, damit `__proto__`, `constructor` und Co. nicht in die
|
||||
|
||||
@@ -177,4 +177,34 @@ describe('Seeds und Changelogs gehören zusammen', () => {
|
||||
expect(manifest.version, `${manifest.slug}: Seed-Version`).toBe(changelog[0].version);
|
||||
}
|
||||
});
|
||||
|
||||
it('jeder Seed-Slug hat einen Changelog', async () => {
|
||||
const { manifests } = await collectSeedManifests();
|
||||
for (const manifest of manifests) {
|
||||
expect(MODULE_CHANGELOGS.has(manifest.slug), `${manifest.slug}: Changelog fehlt`).toBe(true);
|
||||
}
|
||||
});
|
||||
|
||||
it('kein Changelog ist verwaist', async () => {
|
||||
const { manifests } = await collectSeedManifests();
|
||||
const slugs = new Set(manifests.map((m) => m.slug));
|
||||
for (const slug of MODULE_CHANGELOGS.keys()) {
|
||||
expect(slugs.has(slug), `${slug}: kein Seed mit diesem Slug`).toBe(true);
|
||||
}
|
||||
});
|
||||
|
||||
it('dkv-fleet steht mindestens auf 1.1.0 (die Beta zeigt bereits 1.1.0)', () => {
|
||||
const dkv = MODULE_CHANGELOGS.get('dkv-fleet');
|
||||
expect(dkv).toBeDefined();
|
||||
expect(compareSemver(latestVersion(dkv!), '1.1.0')).toBeGreaterThanOrEqual(0);
|
||||
});
|
||||
|
||||
it('domains und nextcloud-files haben genau eine Version 1.0.0 vom 2026-10-08', () => {
|
||||
for (const slug of ['domains', 'nextcloud-files']) {
|
||||
const changelog = MODULE_CHANGELOGS.get(slug);
|
||||
expect(changelog, slug).toHaveLength(1);
|
||||
expect(changelog![0].version).toBe('1.0.0');
|
||||
expect(changelog![0].date).toBe('2026-10-08');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Dateien, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const NEXTCLOUD_FILES_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-10-08',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Ihre Dateien aus der Firmen-Nextcloud direkt in Tessera ansehen, hochladen, herunterladen und ordnen. Die Adresse der Nextcloud trägt nur ein Administrator ein.',
|
||||
en: 'View, upload, download and organise your files from the company Nextcloud directly in Tessera. Only an administrator enters the address of the Nextcloud.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Jeder meldet sich mit seinem eigenen Nextcloud-Konto an; Tessera speichert nicht das Passwort, sondern einen eigenen Zugang, der in Nextcloud jederzeit widerrufbar ist. Konten mit Zwei-Faktor-Anmeldung melden sich über „Im Browser anmelden“, und Fehlversuche begrenzt Tessera selbst, damit die Nextcloud nicht für alle gesperrt wird.',
|
||||
en: 'Everyone signs in with their own Nextcloud account; Tessera does not store the password but its own access, which can be revoked in Nextcloud at any time. Accounts with two-factor sign-in use “Sign in with browser”, and Tessera limits failed attempts itself so the Nextcloud is not locked for everyone.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Ordner durchsuchen mit Pfadleiste, Liste oder Raster, Vorschaubildern und Anzeige des belegten Speicherplatzes; neuer Ordner, Umbenennen, Verschieben und Löschen in den Papierkorb, auch für mehrere Einträge, per Maus, Rechtsklick oder Tastatur.',
|
||||
en: 'Browse folders with a path bar, list or grid, thumbnails and display of used storage; new folder, rename, move and delete to the trash, also for several items, by mouse, right click or keyboard.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Dateien und ganze Ordner per Ziehen und Ablegen hochladen, große Dateien in Stücken; die Übertragungsleiste zeigt den Fortschritt und lässt Abbrechen und Wiederholen zu. Tessera überschreibt nie stillschweigend, und Ordner und Mehrfachauswahl laden Sie als ZIP-Datei herunter.',
|
||||
en: 'Upload files and whole folders by drag and drop, large files in chunks; the transfer bar shows progress and allows cancelling and retrying. Tessera never overwrites silently, and you download folders and multiple selections as a ZIP file.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { NEXTCLOUD_FILES_CHANGELOG } from './nextcloud-files.changelog';
|
||||
|
||||
/**
|
||||
* Traegt das Modul "Dateien" (Nextcloud-Dateien) in die Modulverwaltung ein
|
||||
@@ -12,7 +14,8 @@ export async function seedNextcloudFilesModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'nextcloud-files',
|
||||
name: 'Dateien',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(NEXTCLOUD_FILES_CHANGELOG),
|
||||
category: 'infrastructure',
|
||||
description: {
|
||||
de: 'Dateien Ihrer Nextcloud ansehen, hochladen, herunterladen und ordnen',
|
||||
|
||||
@@ -0,0 +1,52 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Proxmox, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const PROXMOX_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.1.0',
|
||||
date: '2026-10-06',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Die Serverkarte warnt bei jeder virtuellen Maschine und jedem Container, der nicht läuft, obwohl der Autostart eingeschaltet ist; die Dashboard-Kachel zeigt „gestoppt trotz Autostart“.',
|
||||
en: 'The server card warns about every virtual machine and container that is not running although autostart is enabled; the dashboard tile shows “stopped despite autostart”.',
|
||||
},
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Wer die Freigabestufe „Verwalten“ hat, pflegt die Proxmox-Server jetzt selbst, ohne Administrator zu sein.',
|
||||
en: 'Users with the “Manage” permission level now maintain the Proxmox servers themselves, without being an administrator.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.1',
|
||||
date: '2026-09-28',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die Seiten des Moduls haben das neue Tessera-Aussehen.',
|
||||
en: 'The pages of the module have the new Tessera look.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-09-25',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Zustand und Auslastung Ihrer Proxmox-Server (Virtualisierung, Datensicherung und Mail-Gateway) im Blick, nur lesend. Ein farbiger Balken zeigt auf einen Blick, wie viele Server in Ordnung sind; auffällige Server stehen vorn.',
|
||||
en: 'Keep track of the state and load of your Proxmox servers (virtualisation, backup and mail gateway), read-only. A coloured bar shows at a glance how many servers are fine; conspicuous servers come first.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Die Dashboard-Kachel „Proxmox“ zeigt Zustand und Kennzahlen der Server, mit eigenem Titel und frei wählbarer Serverauswahl.',
|
||||
en: 'The “Proxmox” dashboard tile shows state and key figures of the servers, with its own title and a freely chosen server selection.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { PROXMOX_CHANGELOG } from './proxmox.changelog';
|
||||
|
||||
/**
|
||||
* Seeds the proxmox module into the module registry (D-09).
|
||||
@@ -11,7 +13,8 @@ export async function seedProxmoxModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'proxmox',
|
||||
name: 'Proxmox',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(PROXMOX_CHANGELOG),
|
||||
category: 'infrastructure',
|
||||
description: {
|
||||
de: 'Proxmox VE/PBS/PMG beobachten — nur lesend',
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
import type { ModuleChangelog } from '../module-registry/module-changelog';
|
||||
|
||||
/**
|
||||
* Änderungen am Modul Ausschreibungs-Radar, neueste Version zuerst (quick-261008-w5w).
|
||||
* Die Version in der Seed-Datei kommt ausschließlich von hier; Regeln siehe
|
||||
* docs/anleitung-entwicklung.md, Abschnitt „Modulversion und Modul-Changelog pflegen“.
|
||||
*/
|
||||
export const TENDER_RADAR_CHANGELOG: ModuleChangelog = [
|
||||
{
|
||||
version: '1.0.1',
|
||||
date: '2026-09-28',
|
||||
changes: [
|
||||
{
|
||||
kind: 'changed',
|
||||
de: 'Die Seiten des Moduls haben das neue Tessera-Aussehen.',
|
||||
en: 'The pages of the module have the new Tessera look.',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
version: '1.0.0',
|
||||
date: '2026-09-15',
|
||||
changes: [
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Trefferliste mit Filtern für deutsche Ausschreibungen, dazu Merken und Suchprofile mit E-Mail-Alarm und Sammel-Mail.',
|
||||
en: 'Result list with filters for German public tenders, plus bookmarking and search profiles with email alerts and digest emails.',
|
||||
},
|
||||
{
|
||||
kind: 'new',
|
||||
de: 'Eigene Postfächer und RSS-Feeds als zusätzliche Quellen.',
|
||||
en: 'Your own mailboxes and RSS feeds as additional sources.',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -1,4 +1,6 @@
|
||||
import { latestVersion } from '../module-registry/module-changelog';
|
||||
import { ModuleRegistryService } from '../module-registry/module-registry.service';
|
||||
import { TENDER_RADAR_CHANGELOG } from './tenders.changelog';
|
||||
import type { PrismaService } from '../prisma/prisma.service';
|
||||
|
||||
/**
|
||||
@@ -16,7 +18,8 @@ export async function seedTendersModule(
|
||||
await moduleRegistryService.seedModule({
|
||||
slug: 'tender-radar',
|
||||
name: 'Ausschreibungs-Radar',
|
||||
version: '1.0.0',
|
||||
// Die Version kommt ausschließlich aus dem Changelog (quick-261008-w5w).
|
||||
version: latestVersion(TENDER_RADAR_CHANGELOG),
|
||||
category: 'procurement',
|
||||
description: {
|
||||
de: 'Deutsche Ausschreibungen automatisch erfassen und durchsuchen',
|
||||
|
||||
Reference in New Issue
Block a user