Das Projekt konzentriert sich auf die Neuerstellung des Jellyfish-Backends, einer wichtigen Komponente der Messaging-Anwendung Jellyfish, die für Android- und iOS-Plattformen entwickelt wurde. Das Backend wird sorgfältig nach den Prinzipien des domänengesteuerten Designs und der sauberen Architektur entwickelt. Die Kommunikation innerhalb des Systems wird mithilfe der Meditr-Bibliothek orchestriert, wobei der Schwerpunkt auf der Befehls-Abfrage-Trennung (CQS) liegt, um die Klarheit des Codes und die Trennung von Bedenken zu verbessern.
Während die aktuelle Bereitstellung als Monolith funktioniert, ist die Architektur von Natur aus flexibel. Durch die Integration von Tools wie API-Gateways (z. B. Ocelot, YARP), Command-Query-Responsibility-Segregation (CQRS) und Hintergrund-Datenbanksynchronisierungsprozessen kann es sich schnell an ein Microservices-Paradigma anpassen. Letzteres verwendet optimistisches Sperren mit Zeilenversionierung, um die Konsistenz zwischen Lese- und Schreibdatenbanken sicherzustellen.
Im Hinblick auf zukünftige Verbesserungen sieht die Architektur die Implementierung einer asynchronen Kommunikation über AMQP über RabbitMQ vor. Dadurch wird das System in die Lage versetzt, Ereignisse effizient über Warteschlangen zu verarbeiten und so die Grundlage für ein robustes Publish/Subscribe-Verhalten zu legen.
Technologie-Stack
Backend
Web-Frontend
Mobile Anwendung
C#/NET 7
C#/NET 7
C#/NET 7
ASP-NET
Blazor-Server
.NET MAUI
MySQL 8.0.35
Rasiererkomponenten
SignalR
Mudblazor-UI-Komponenten (https://mudblazor.com/)
Docker
EF Core
Testen
Unit-Test-Ansatz:
Unit-Tests sind eine grundlegende Praxis, die in diesem Projekt angewendet wird, um die Korrektheit und Funktionalität von Methoden und Prozessabläufen zu überprüfen. Obwohl anerkannt wird, dass nicht jede Methode einzeln getestet wird, wird ein ausgewogener Ansatz gewählt. Das Prinzip besteht darin, übermäßiges Engineering und übermäßiges Testen zu vermeiden und einen Mittelweg zu finden, der sicherstellt, dass kritische Prozesse und Methoden gründlich getestet werden.
Das Unit-Testverhalten folgt der Standardmethode arrange, act, assertion , die ein gängiger und effektiver Ansatz beim Softwaretesten ist. Diese Methodik bietet einen strukturierten Rahmen für die Einrichtung der Testbedingungen, die Ausführung der spezifischen Aktion und die Validierung der erwarteten Ergebnisse.
End-to-End-Tests mit Postman:
End-to-End-Tests werden mit Postman durchgeführt und nutzen die importierte generierte Swagger-API-Dokumentation. Postman dient als leistungsstarkes Tool für umfassende API-Tests und ermöglicht die Überprüfung der Funktionalität des gesamten Systems. Die Integration der Swagger-API-Dokumentation steigert die Effizienz des Testprozesses, indem sie eine klare und interaktive Schnittstelle zum Erkunden und Validieren von API-Endpunkten bereitstellt.
Dokumentation
Umfangreiche Dokumentation:
Das Projekt legt großen Wert auf eine umfassende Dokumentation, um die Benutzerfreundlichkeit und das Verständnis für alle Beteiligten zu erleichtern. Derzeit umfasst die Dokumentation:
Dokumentation zum Entity-Relationship-Diagramm (EER):
Eine detaillierte EER-Dokumentation wurde erstellt, um Einblicke in das Datenmodell und die Beziehungen innerhalb des Systems zu geben. Diese Dokumentation dient Entwicklern als wertvolle Ressource und hilft dabei, die zugrunde liegende Datenbankstruktur klar zu verstehen.
Swagger-Dokumentation:
Das Projekt nutzt die Swagger-Dokumentation, um eine detaillierte und interaktive API-Dokumentation sicherzustellen. Swagger bietet eine intuitive und benutzerfreundliche Oberfläche zum Erkunden und Verstehen der verfügbaren API-Endpunkte, Parameter und Antworten. Diese Dokumentation ist für Entwickler unerlässlich und ermöglicht eine nahtlose Integration und Interaktion mit den bereitgestellten APIs.
Einsatz
Legacy über Binär oder mit Docker-Container.
Projektmotivation und -ziele
Testen von NET MAUI auf mehreren mobilen Plattformen:
Die Hauptmotivation für die Initiierung dieses Projekts besteht darin, NET MAUI auf verschiedenen mobilen Plattformen gründlich zu testen. Dazu gehören umfassende Tests und Optimierungen, um eine nahtlose Leistung und Kompatibilität auf den angegebenen Plattformen sicherzustellen und der NET MAUI-Community wertvolle Erkenntnisse zu liefern.
Ermöglichen Sie Benutzern, ihre eigene Messaging-Infrastruktur zu hosten:
Eines der Hauptziele dieses Projekts besteht darin, Benutzern die Möglichkeit zu geben, ihre Messaging-Infrastruktur unabhängig zu hosten. Ziel ist es, die Zugänglichkeit von Messaging-Diensten zu demokratisieren und es Benutzern zu ermöglichen, die Kontrolle über ihre Kommunikationsumgebung zu übernehmen.
Optimale Ressourcennutzung:
Ein bemerkenswerter Nebeneffekt dieser Initiative ist der Fokus auf die Ermöglichung des Hostings der Messaging-Infrastruktur mit minimalen Hardwareressourcen. Konkret zielt das Projekt auf eine effiziente Nutzung ab, sodass Benutzer die Infrastruktur auf zugänglicher Hardware wie dem Raspberry Pi betreiben können. Dieser Schwerpunkt auf Ressourceneffizienz steht im Einklang mit dem Engagement des Projekts für Zugänglichkeit und Nachhaltigkeit.
Sicherheit und zukünftige Funktionen
Ende-zu-Ende-Verschlüsselung und Datenschutz:
Die Gewährleistung der Sicherheit der Benutzerdaten ist von größter Bedeutung. Zu den nächsten Schritten vor der Veröffentlichung der ersten Produktionsversion gehört die sorgfältige Implementierung einer Ende-zu-Ende-Verschlüsselung. Dies bietet einen robusten Schutz für vertrauliche Benutzerinformationen. Darüber hinaus wird die Einführung des Vergessens-Payload-Musters den Datenschutz weiter verbessern, indem die Datenaufbewahrung im Einklang mit bewährten Datenschutzpraktiken minimiert wird.
KI-Support-Bots:
Im Hinblick auf die Zukunft der Benutzerinteraktion gibt es Pläne, Support-Bots mit künstlicher Intelligenz (KI) in das System zu integrieren. Es wird erwogen, fortschrittliche KI-Technologien wie Google Llama oder ChatGPT zu nutzen. Diese KI-gesteuerten Bots werden die Benutzereinbindung verbessern, Supportprozesse optimieren und zu einem intelligenten und reaktionsschnellen Benutzererlebnis beitragen.
Blockchain-Infrastruktur:
Bei der Erforschung modernster Technologien besteht die zukunftsweisende Vision, die Machbarkeit des Hostens der Systeminfrastruktur auf der Blockchain zu untersuchen. Bewertet werden die Vorteile der Blockchain-Technologie, einschließlich erhöhter Sicherheit, Dezentralisierung und Transparenz. Dieser zukunftsorientierte Ansatz zielt darauf ab, das System zukunftssicher zu machen und es an neue Trends in sicheren und dezentralen Architekturen anzupassen.
Zu tun
Backend:
Docker.compose für JellyfishBackend, PostgreSql
RateLimiter für bestimmte Aktionen
IModelBinder+IModelBinderProvider für HttpQuery und HttpBody zum Auflösen und Validieren von Daten, die sich innerhalb von „ApiDataTransferObject“ befinden.
CRUD + Suchfilter (Übergang von http-Anfrage (JSON) zum DTO-Filtermodell zum Linq-Ausdruck zu SQL)
Linq-Ausdrücke in SQL: Operatoren in Wertobjekten und Domänenmodellen überschreiben/erstellen und in Linq-Ausdrücke übersetzen
Cache-Funktionalität (derzeit IMemoryCache)
Endpunkt zum Zurücksetzen des Passworts: Aktivieren Sie das Zurücksetzen des Passworts über die Funktion „Benutzer bearbeiten“. Änderung der Domänenlogik: UpdateUser, updateuser-Befehl+Handler-Update.
Passwortverschlüsselung in der Datenbank mit Best-Practice-Verschlüsselungsmethode
Authentifizierung/Autorisierung: Jwt-Daten (Ansprüche usw.) mit der Datenbank abgleichen
Lösen Sie Ereignisse aus, wenn Token-Ansprüche nicht mit Rollen aus der Datenbank übereinstimmen oder wenn der IP-Standort (Geo-IP für IPv4+v6 oder User-Agent anders als bei der Token-Erstellung) sich stark unterscheidet. Benachrichtigen Sie Benutzer per E-Mail.
Datei-Upload / Benutzerprofilbilder / Anhänge von Jellyfish-Nachrichten oder Medien / Speicherstrategie: Vermeiden Sie aus Leistungsgründen die Speicherung in der Datenbank. Caching-Strategie implementieren, Cache beim Backend-Start aufbauen. Führen Sie Virenprüfungen mithilfe von Inhalten und einem externen KI-Dienst (Azure=Link, AWS) durch, um Uploads von gewalttätigen Medien/Pornografie zu erkennen.
Verantwortungskette für Viren und unzulässige/gewalttätige Inhalte (Abstraktion implementiert)
Domäne: Implementieren Sie Chat-Business-Logikprüfungen.
DSGVO: Modul für DSGVO zur Bereitstellung aller DSGVO-Aktionen (Meldung, Löschung etc.)
Implementierung von Präsentation/Infrastruktur/Anwendung von Chat-/Nachrichten-/Benutzerfreundschaftsanfragen für Domänenentitäten: Verwenden Sie SignalR, um Zielbenutzer usw. zu benachrichtigen -> Event-Handler
Forgettable Payload -> DSGVO (deutsch: DSGVO).
End-to-End-Verschlüsselung für Jellyfish-Benutzer. Reihenfolge: Benutzer, die miteinander interagieren, teilen die öffentlichen Schlüssel. Wenn Benutzer A eine Nachricht erstellt, wird die Nachricht mit dem öffentlichen Schlüssel von Benutzer B verschlüsselt. Die Nachricht wird an das Backend gesendet und in der Datenbank gespeichert (verschlüsselt). Benutzer B hat die Nachricht über Signalr empfangen oder fragt alle nicht bestätigten Nachrichten vom Backend ab (Abfrage durch erneutes Verbinden, wenn die Verbindung unterbrochen ist, z. B. die Verbindung zur Funkzelle verloren geht). Benutzer B bestätigt die Nachricht an das Backend (der empfangene Rake wird in der App von Benutzer A angezeigt). Benutzer-B entschlüsselt die Nachricht mit dem privaten Schlüssel.
Löschen Sie Nachrichten, die erfolgreich an das Ziel zugestellt wurden
SSL-Verschlüsselung für Backend.
Swagger-Dokumentation
Schreiben Sie einige standardmäßige ASP.NET Core-Antwortnachrichten mit einem Filter um: z. B. HTTP-Fehler 422 oder nicht autorisierte Antwort -> Umschreiben in JSONAPI-Fehlerantwort ----------> Presentation.Extension.JsonApiResultExtension.
FluentValidation: Bereiten Sie Validatoren mit Antwortbehandlung für JSONAPI-Fehlerantworten aufgrund von Validierungsfehlern vor. CommandHandlerValidators bereits implementiert: ValidationPipelineBehavior; Nur die Validierungsregel muss in den Konstruktoren jeder CommandValidation definiert werden.
Chat Bounding Context-Implementierungen:
POST: /api/v1/chat, Chat erstellen (nur mit Freunden, Domain-Logic-Anforderungen definierten die Regel, dass ein Chat mindestens eine Nachricht benötigt, um zu existieren)
Präsentation
Durchführung
Test (Grey-Box-Test)
Infrastruktur
Durchführung
Test (Grey-Box-Test)
Anwendung
Befehl/Abfrage
Validierung (Fluentvalidierung)
Handler
EventHandling
Domäne (Abschlussstatus aufgrund der Neugeschäftsregel entfernt)
Durchführung
Test (Unit-Test)
GET: /api/v1/chat/{chatId}, Ruft den Chat ab
Präsentation
Durchführung
Test (Grey-Box-Test)
Infrastruktur
Durchführung
Test (Grey-Box-Test)
Anwendung
Befehl/Abfrage
Validierung (Fluentvalidierung)
Handler
EventHandling
Domain
Durchführung
Test (Unit-Test)
PUT: /api/v1/chat/{chatId}, Chat-Informationen wie Beschreibung, Name aktualisieren
Präsentation
Durchführung
Test (Grey-Box-Test)
Infrastruktur
Durchführung
Test (Grey-Box-Test)
Anwendung
Befehl/Abfrage
Validierung (Fluentvalidierung)
Handler
EventHandling
Domain
Durchführung
Test (Unit-Test)
LÖSCHEN: /api/v1/chat/{chatId}, Chat löschen
Präsentation
Durchführung
Test (Grey-Box-Test)
Infrastruktur
Durchführung
Test (Grey-Box-Test)
Anwendung
Befehl/Abfrage
Validierung (Fluentvalidierung)
Handler
EventHandling
Domain
Durchführung
Test (Unit-Test)
PUT: /api/v1/chat/{chatId}/picture/{messageId}, Legt das Chat-Bild fest
Präsentation
Durchführung
Test (Grey-Box-Test)
Infrastruktur
Durchführung
Test (Grey-Box-Test)
Anwendung
Befehl/Abfrage
Validierung (Fluentvalidierung)
Handler
EventHandling
Domain
Durchführung
Test (Unit-Test)
PUT: /api/v1/chat/{chatId}/member/{userId}, Benutzer zum Chat hinzufügen (neues Mitglied)
Präsentation
Durchführung
Test (Grey-Box-Test)
Infrastruktur
Durchführung
Test (Grey-Box-Test)
Anwendung
Befehl/Abfrage
Validierung (Fluentvalidierung)
Handler
EventHandling
Domain
Durchführung
Test (Unit-Test)
LÖSCHEN: /api/v1/chat/{chatId}/member/{userId}, Mitglied aus dem Chat entfernen
Benutzer bearbeiten/löschen Audit-Protokoll (alle Ereignisse in einer separaten Tabelle)
Sehen Sie sich die ein- und ausgehenden Freunde/Freundschaftsanfragen der Benutzer an
Health.razor:
Verschönern Sie die Healthcheck-Ansicht (derzeit standardmäßige Healthcheck-Ansicht als Präsentation).
Blog:
CRUD-Beiträge
Eingebettete Medien
Blog: Beiträge vertikal laden mit der vertikalen Fortschrittsleiste von MudBlazor (animiert)
Blog: Beiträge werden mit der Timeline mit Links- und Rechtsreihenfolge angezeigt
Authentifizierung: Timer im Hintergrund, der in der Benutzeroberfläche sichtbar ist, wenn das Token nur noch 5 Minuten gültig ist, dann beginnt die Aktivierungsverfolgung. Wenn der Benutzer Aktionen in der Benutzeroberfläche auslöst, wird das Token im Backend automatisch aktualisiert.
Sitzungsspeicher: Speichert die zuletzt besuchte URL
Eigenes Profil
Sicht
Bearbeiten/Verwalten
Mobile App:
Entfernen Sie die alte DTO- und Modellstruktur sowie die alten Namespaces
In neue Struktur umschreiben
Nachrichten-/Benutzercache in SQLite, an neue Struktur anpassen
Neuen WebApiClient und SignalRClient hinzufügen (WebAPI-Client von WebFrontend in Shared, neuer SignalR-Client (typisierter Client) in Shared für Wiederverwendbarkeit)
Msg-Interceptor: Pflegen Sie die Aufrufkette für Nachrichten-/Benachrichtigungsverfahren (Hauptnachrichtenfunktionalität).
Schreiben Sie Ziel-Endpunkt-URLs zum Backend in die neue Backend-Struktur um
Chat: Messaging (UI+App-Backend)
Chat+Freundesliste: Siehe Profil
Chat: Messaging (Anhänge senden)
Eigenständige Eigenschaften gegenüber WhatsApp etc.:
Nachrichten als nicht für Screenshots geeignet markieren: Diese Nachrichten werden durch die Screenshot-Erstellung unkenntlich gemacht. Das Gleiche gilt für das Profilbild.
Gruppenkalender: Private Aktivitäten gemeinsam in einem Gruppenchat-Kalender planen.
Wichtig beim Teilen: Markieren Sie Nachrichten als nicht teilbar, damit Sie sich nicht um unzulässiges Teilen kümmern müssen :)
Möglichkeit, die Messaging-Infrastruktur selbst zu hosten. Keine Abhängigkeit von anderen!
Gegen Gewalt: Heutzutage werden private Chats wie Telegramm von Menschen für Gewalt und Inhalte für Erwachsene missbraucht. Jellyfish bietet also die Möglichkeit, die Freigabe für solche Inhalte zu vermeiden. Der Algorithmus für maschinelles Lernen wertet die Medien aus, die über den Messenger geteilt werden. Wenn gewalttätige Inhalte erkannt werden, wird die gesendete Nachricht vermieden. ** Erfordert Azure AI Vision oder einen ähnlichen ML-Algorithmus **
Standortfreigabe mit Live-Track: In Gruppen oder privaten Chats nicht erforderlich, Ihre Bewegungen werden live an die Chat-Mitglieder gestreamt, wenn der Zuschauermodus aktiviert ist (nur in der Live-Track-Karte verfügbar).
Vergessenheit: Das Recht auf Vergessen ist ein Eckpfeiler der heutigen DSGVO. Durch das Entfernen des Kontos werden alle Daten (auch Chatnachrichten, die mit Freunden geteilt werden) entfernt. Natürlich auch die Medien. Mir ist bewusst, dass das Löschen von Medien, die an Chat-Mitglieder gesendet werden, heutzutage nicht üblich ist, aber jeder Mensch das Recht hat, dass seine erstellten Daten vergessen werden.
Umfragen/Abstimmungen: Im Beispiel zu WhatsApp: Abstimmungen werden auch in Quallen verfügbar sein.
Allgemein:
DNS Preconf, Windows-Hosts-Datei mit gleichen Namen wie Docker
Lizenzdefinition
Nutzungsbedingungen
Spende
Handbuch zur Installation und Ausführung
Bleiben Sie dran .
Admin-Panel Alpha 0.1
Armaturenbrett
Benutzerverwaltung (Users.razor) mit Paginierung und Suche
VIDEO: Vorschau des Übergangsfilters von HTTP-Anfrage zu Linq-Ausdruck und schließlich zu MySql-Abfrage über ORM (dynamisch) / THUMBNAIL PNG UNTEN (HREF)
Erweitertes Entity-Relations-Diagramm
Codemetrische Analyse nach dem Hinzufügen von MobileApp zur Lösung
Kontinuierlicher Integrationsworkflow mit Github Action