bmc_hub/NEXTCLOUD_MODULE_PLAN.md
Christian 56d6d45aa2 feat(sag): Add Varekøb & Salg module with database migration and frontend template
- Created a new SQL migration for the sag_salgsvarer table to manage sales and purchase items.
- Implemented a new HTML template for the Varekøb & Salg module, including summary cards and tables for sales and purchases.
- Added JavaScript functions for loading and rendering order data dynamically.
- Introduced a new backend search module for customers, contacts, hardware, and locations with autocomplete functionality.
- Developed an email templates API for managing system and customer-specific email templates.
- Created multiple migrations for Nextcloud instances, cache, audit logs, email templates, sag comments, hardware locations, and billing methods.
- Enhanced the sag module with solutions, order lines, work types, and 2FA support for user authentication.
2026-02-02 20:23:56 +01:00

6.4 KiB
Raw Permalink Blame History

Nextcloud-modul BMC Hub

1. Formål og rolle i Hubben

Nextcloud-modulet gør det muligt at sælge, administrere og supportere kunders Nextcloudløsninger direkte i Hubben.

Hubben er styrende system. Nextcloud er et eksternt drifts og brugersystem, som Hubben taler med direkte (ingen gateway).

2. Aktivering af modulet

Modulet er kontekstbaseret og aktiveres via tag:

  • Når Firma, Kontakt eller Sag har tagget nextcloud, vises en Nextcloudfane i UI.
  • Uden tag vises ingen Nextcloudfunktioner.

3. Kunde → Nextcloudfane (overblik)

Fanen indeholder:

  1. Drifts og systeminformation (readonly)
  2. Handlinger relateret til brugere
  3. Historik (hvad Hubben har gjort mod instansen)

Fanen må aldrig blokere kundevisningen, selv hvis Nextcloud er utilgængelig.

4. Systemstatus og driftsinformation

Datakilde: Nextcloud Serverinfo API

  • GET /ocs/v2.php/apps/serverinfo/api/v1/info
  • Direkte kald til Nextcloud
  • Autentificeret
  • Readonly
  • Cached i DB med global TTL = 5 min

4.1 Overblik

Vises øverst i fanen:

  • Instansstatus (Online / Offline / Ukendt)
  • Sidst opdateret
  • Nextcloudversion
  • PHPversion
  • Databasetype og version

4.2 Ressourceforbrug

Vises som simple værdier/badges:

  • CPU
  • Load average (1 / 5 / 15 min)
  • Antal kerner
  • RAM (total + brug i %)
  • Disk (total + brug i % + fri plads)

Ved kritiske værdier vises advarsel.

4.3 Nextcloudnøgletal

Hvor API tillader det:

  • Antal brugere
  • Aktive brugere
  • Antal filer
  • Samlet datamængde
  • Status på: database, cache/Redis, cron/background jobs

5. Handlinger i Nextcloudfanen

Knapper:

  • Tilføj ny bruger
  • Reset password
  • Luk bruger
  • Gensend guide

Alle handlinger:

  • udføres direkte mod Nextcloud
  • logges i Hub
  • kan spores i historik
  • kan knyttes til sag

6. Tilføj ny bruger (primær funktion)

6.1 Start af flow

  • Ved “Tilføj ny bruger” oprettes automatisk en ny Sag
  • Sagstype: Nextcloud Brugeroprettelse
  • Ingen Nextcloudhandling udføres uden en sag

6.2 Sag felter og logik

Firma

  • Vælg eksisterende firma
  • Hub slår tilknyttet Nextcloudinstans op i DB og vælger automatisk
  • Instans kan ikke ændres manuelt

Kontaktperson

  • Vælg eksisterende kontakt eller opret ny
  • Bruges til kommunikation, velkomstmail og ejerskab af sag

Grupper

  • Multiselect
  • Hentes live fra Nextcloud (OCS groups API)
  • Kun gyldige grupper kan vælges

Velkomstbrev

  • Checkbox: skal velkomstbrev sendes?
    • Hvis ja: bruger oprettes, password genereres, guide + logininfo sendes
    • Hvis nej: bruger oprettes uden mail, sag forbliver åben til manuel opfølgning

7. Øvrige handlinger

Reset password

  • Vælg eksisterende Nextcloudbruger
  • Nyt password genereres
  • Valg: send mail til kontakt eller kun log i sag

Luk bruger

  • Bruger deaktiveres i Nextcloud
  • Data bevares
  • Kræver eksplicit bekræftelse
  • Logges i sag og historik

Gensend guide

  • Gensender velkomstmail og guide
  • Password ændres ikke
  • Kan udføres uden ny sag, men logges

8. Arkitekturprincipper

  • Hub ejer: firma, kontakt, sag, historik
  • Nextcloud ejer: brugere, filer, rettigheder
  • Integration er direkte (ingen gateway)
  • Perinstans auth ligger krypteret i DB
  • Global DBcache (5 min) for readonly statusdata

9. Logning og sporbarhed

For hver handling gemmes:

  • tidspunkt
  • handlingstype
  • udførende bruger
  • mål (bruger/instans)
  • teknisk resultat (success/fejl)

Auditlog er separat pr. kunde, med manuel retention og tidsbaseret partitionering.

10. Afgrænsninger (v1)

Modulet indeholder ikke:

  • ændring af serverkonfiguration
  • håndtering af apps
  • ændring af kvoter
  • direkte adminlogin

11. Klar til udvidelse

Modulet er designet til senere udvidelser:

  • overvågning → automatisk sag
  • historiske grafer
  • offboardingflows
  • kvotestyring
  • SLArapportering

12. Sikkerhed og drift

  • Credentials krypteres med settings.NEXTCLOUD_ENCRYPTION_KEY
  • Safety switches: NEXTCLOUD_READ_ONLY og NEXTCLOUD_DRY_RUN (default true)
  • Ingen credentials i UI eller logs
  • TLSonly base URLs

13. Backendstruktur (plan)

Placering: app/modules/nextcloud/

  • backend/router.py
  • backend/service.py
  • backend/models.py

Alle eksterne kald går via servicelaget, som:

  • loader instans fra DB
  • dekrypterer credentials
  • bruger global DBcache (5 min)
  • skriver auditlog pr. kunde

14. Databasemodel (plan)

nextcloud_instances

  • customer_id FK
  • base_url
  • auth_type
  • username
  • password_encrypted
  • is_enabled, disabled_at
  • created_at, updated_at, deleted_at

nextcloud_cache

  • cache_key (PK)
  • payload (JSONB)
  • expires_at
  • created_at

nextcloud_audit_log

  • customer_id, instance_id
  • event_type
  • request_meta, response_meta
  • actor_user_id
  • created_at

Partitionering: månedlig range på created_at. Retention er manuel via adminUI.

15. APIendpoints (v1)

Instanser (admin)

  • GET /api/v1/nextcloud/instances
  • POST /api/v1/nextcloud/instances
  • PATCH /api/v1/nextcloud/instances/{id}
  • POST /api/v1/nextcloud/instances/{id}/disable
  • POST /api/v1/nextcloud/instances/{id}/enable
  • POST /api/v1/nextcloud/instances/{id}/rotate-credentials

Status + grupper

  • GET /api/v1/nextcloud/instances/{id}/status
  • GET /api/v1/nextcloud/instances/{id}/groups

Brugere (handlinger)

  • POST /api/v1/nextcloud/instances/{id}/users (opret)
  • POST /api/v1/nextcloud/instances/{id}/users/{uid}/reset-password
  • POST /api/v1/nextcloud/instances/{id}/users/{uid}/disable
  • POST /api/v1/nextcloud/instances/{id}/users/{uid}/resend-guide

Alle endpoints skal:

  • validere is_enabled = true
  • håndhæve kundeejerskab
  • skrive auditlog
  • respektere READ_ONLY/DRY_RUN

16. UIkrav (plan)

Nextcloudfanen i kundevisning skal vise:

  • Systemstatus
  • Nøgletal
  • Handlinger
  • Historik

AdminUI (Settings) skal give:

  • Liste over instanser
  • Enable/disable
  • Rotation af credentials
  • Retentionstyring af auditlog pr. kunde

17. Migrations (plan)

  1. migrations/0XX_nextcloud_instances.sql
  2. migrations/0XX_nextcloud_cache.sql
  3. migrations/0XX_nextcloud_audit_log.sql (partitioneret)

18. Næste skridt

  1. Opret migrationsfiler
  2. Implementer kryptering helper
  3. Implementer servicelag
  4. Implementer routere og schemas
  5. Implementer UIfanen + adminUI
  6. Implementer auditlog viewer/export