Multi-Tenant Architektur: Kundenisolation für mehrere Ticketsysteme und Git-Hosts #63
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Beschreibung
Bruno um eine Multi-Tenant-Architektur erweitern, sodass mehrere Kunden
(z.B. verschiedene Systemhäuser/Software-Projekte) jeweils eigene
Ticketsysteme, Git-Hosts, Repos und Pipeline-Konfigurationen nutzen können —
mit vollständiger Datenisolation im selben System.
Hintergrund
Bruno ist aktuell Single-Tenant: eine Odoo-Instanz, ein GitLab, ein
globaler Repo-Pool. Für den Einsatz als Systemhaus-Tool müssen mehrere
Kunden parallel bedient werden, ohne dass Tickets, Repos oder Configs
vermischt werden. Dieses Issue vereint und ersetzt die Teilaspekte
aus #14 (Multi-Ticketsystem) und #31 (Plugin-System).
Akzeptanzkriterien
Datenmodell
customersmit Name, Slug und Konfigurationsreferenzenodoo_instances(URL, DB, User, Password, Poll-Intervall pro Kunde)gitlab_instances(URL, Token, Assignee pro Kunde)customer_idauftickets,repos,appsignal_appsBackend-Services
odoo_instancesund setztcustomer_idbeim Ticket-Importcustomer_idbei Repo-MatchingAPI
GET/POST/PUT/DELETE /api/customers/api/customers/{id}/odoo/api/customers/{id}/gitlab/api/tickets,/api/repos,/api/stats) filtern nach KundenkontextFrontend
Sicherheit & Isolation
Tests
customer_idTechnische Hinweise
backend/models/customer.py(Customer, OdooInstance, GitLabInstance Models)backend/api/customers.py(Kunden-Verwaltung Endpoints)frontend/src/pages/Customers.tsx(Kunden-Verwaltung)frontend/src/components/CustomerSelector.tsx(Header-Dropdown)backend/models/ticket.py(+ customer_id FK)backend/models/repo.py(+ customer_id FK)backend/models/user.py(+ Customer-Zuordnung m:n)backend/services/odoo_poller.py(Multi-Instance Polling)backend/services/gitlab_service.py(Multi-Instance Client)backend/services/scoring_engine.py(Repo-Filter nach Kunde)backend/services/preparation_engine.py(Repo-Filter nach Kunde)backend/services/pipeline.py(customer_id Threading)backend/config.py(Default-Customer Fallback)backend/api/tickets.py(Kundenfilter)backend/api/repos.py(Kundenfilter)backend/api/pipeline.py(Stats pro Kunde)backend/api/auth.py(Customer-Kontext in JWT)frontend/src/App.tsx(CustomerSelector + Route)frontend/src/api/client.ts(Customer-Header mitsenden)dann API, dann Frontend. Bestehende Single-Tenant-Instanzen migrieren
über Default-Customer.
Aufwand: XL