水母行動應用程式
簡介 該專案的重點是重新創建 Jellyfish 後端,這是專為 Android 和 iOS 平台設計的訊息應用程式 Jellyfish 的關鍵元件。後端是按照領域驅動設計和簡潔架構的原則精心開發的。系統內的通訊是使用 Meditr 庫進行編排的,強調命令查詢分離 (CQS),以提高程式碼清晰度和關注點分離。
雖然目前的部署作為整體運行,但該架構本質上是靈活的。它可以透過結合API網關(例如Ocelot、YARP)、命令查詢責任分離(CQRS)和後台資料庫同步進程等工具來快速適應微服務範例。後者採用帶有行版本控制的樂觀鎖定來確保讀取和寫入資料庫之間的一致性。
考慮到未來的增強功能,該架構設想透過 RabbitMQ 上的 AMQP 實現非同步通訊。這將使系統能夠透過佇列有效地處理事件,為穩健的發布/訂閱行為奠定基礎。
技術堆疊 後端 網路前端 行動應用程式 C#/NET 7 C#/NET 7 C#/NET 7 網路應用程式 Blazor伺服器 .NET毛伊島 MySql 8.0.35 刮鬍刀組件 信號R Mudblazor UI 元件 (https://mudblazor.com/) 碼頭工人 EF核心
測試 單元測試方法:
單元測試是該專案中應用的基本實踐,用於驗證方法和流程的正確性和功能性。雖然我們承認並非每種方法都經過單獨測試,但仍採用平衡方法。原則是避免過度設計和過度測試,找到一個中間立場,確保關鍵流程和方法徹底測試。 單元測試行為遵循標準的arrange, act, assertion
方法,是軟體測試中常用且有效的方法。該方法提供了一個結構化框架,用於設定測試條件、執行特定操作和驗證預期結果。 使用 Postman 進行端對端測試:
使用 Postman 進行端對端測試,利用導入的產生的 Swagger API 文件。 Postman 是一個強大的 API 測試工具,可以驗證整個系統的功能。 Swagger API 文件的集合成為探索和驗證 API 端點提供了清晰的互動式介面,從而提高了測試過程的效率。
文件 廣泛的文檔: 該專案非常重視全面的文檔,以促進所有利害關係人的易用性和理解。目前,該文件包括:實體關係圖 (EER) 文件: 已準備好詳細的 EER 文檔,以提供對系統內資料模型和關係的深入了解。該文件對於開發人員來說是寶貴的資源,有助於清楚地理解底層資料庫結構。 招搖文件: 此專案利用 Swagger 文件來確保詳細且互動的 API 文件。 Swagger 提供了直覺且使用者友好的介面,用於探索和了解可用的 API 端點、參數和回應。該文件對於開發人員來說至關重要,可以實現與所提供的 API 的無縫整合和互動。
部署 二進位或 Docker 容器的遺留問題。
專案動機和目標 在多個行動平台上測試 NET MAUI: 啟動該專案的主要動機是在各種行動平台上嚴格測試 NET MAUI。這涉及全面的測試和優化,以確保跨指定平台的無縫性能和相容性,為 NET MAUI 社群貢獻寶貴的見解。 使用戶能夠託管自己的訊息傳遞基礎架構: 該專案的主要目標之一是透過為用戶提供獨立託管訊息基礎設施的機會來增強用戶的能力。其目的是使訊息服務的可訪問性民主化,允許使用者控制他們的通訊環境。 最佳資源利用: 該計劃的一個值得注意的副作用是專注於以最少的硬體資源啟用訊息基礎設施託管。具體來說,該專案的目標是高效利用,允許用戶在 Raspberry Pi 等可存取的硬體上運行基礎設施。對資源效率的重視與該計畫對可及性和永續性的承諾是一致的。
安全和未來功能 端對端加密和隱私保護: 確保用戶資料的安全至關重要。第一個生產版本發布之前的後續步驟將包括精心實施端對端加密。這將為敏感的用戶資訊提供強大的保護層。此外,採用可遺忘的有效負載模式將透過最大限度地減少資料保留來進一步增強隱私性,並與隱私最佳實踐保持一致。 人工智慧支援機器人: 擁抱用戶互動的未來,並計劃將人工智慧 (AI) 支援機器人整合到系統中。考慮利用先進的人工智慧技術,例如 Google Llama 或 ChatGPT。這些由人工智慧驅動的機器人將增強用戶參與度,簡化支援流程,並有助於提供智慧且響應迅速的用戶體驗。 區塊鏈基礎設施: 探索尖端技術,有前瞻性地研究將系統的基礎設施託管在區塊鏈上的可行性。將評估區塊鏈技術的好處,包括增強的安全性、去中心化和透明度。這種前瞻性的方法旨在使系統面向未來,並使其與安全和去中心化架構的新興趨勢保持一致。
待辦事項 後端:
JellyfishBackend、PostgreSql 的 Docker.compose 針對特定操作的 RateLimiter IModelBinder+IModelBinderProvider 用於 HttpQuery 和 HttpBody 解析和驗證「ApiDataTransferObject」內部的數據 CRUD + 搜尋過濾器(從http請求(json)到dto過濾器模型到linq表達式到sql的轉換) Linq 表達式到 sql:覆蓋/建立值物件和域模型中的運算子並將它們轉換為 linq 表達式 快取功能(目前為 IMemoryCache) 密碼重設端點:透過「編輯使用者」功能啟用密碼重設;網域邏輯變更:UpdateUser、updateuser 指令+handler 更新。 採用最佳實踐加密方法對資料庫進行密碼加密 身份驗證/授權:將 Jwt 資料(聲明等)與資料庫進行匹配 文件上傳/使用者個人資料圖片/來自 Jellyfish 訊息或媒體的附件/儲存策略:出於效能原因,避免儲存在資料庫中。實施快取策略,在後端啟動時建立快取。使用內容和外部 AI 服務(Azure = 連結、AWS)進行病毒檢查,以偵測暴力媒體/色情內容的上傳。 域:實作聊天業務邏輯檢查。 GDPR:GDPR 模組,使所有 GDPR 操作可用(報告、刪除等) 領域實體聊天/訊息/用戶友誼請求的表示/基礎設施/應用程式的實現:利用SignalR通知目標用戶等->事件處理程序 容易忘記的有效負載 -> GDPR(德語:DSGVO)。 Jellyfish 用戶的端對端加密。順序:相互互動的使用者將共享公鑰。當用戶 A 建立訊息時,該訊息將使用用戶 B 的公鑰加密。該訊息將發送到後端並儲存(加密)在資料庫中。使用者B透過訊號器接收訊息或從後端輪詢所有未確認的訊息(當連線消失時,例如遺失與無線電小區的連接,透過重新連線進行輪詢)。用戶 B 向後端確認訊息(收到的佣金將顯示在用戶 A 的應用程式中)。用戶 B 使用私鑰解密訊息。 後端 SSL 加密。 Swagger 文件 使用篩選器重寫一些預設的ASP.NET Core 回應訊息:例如,HTTP 錯誤422 或未經授權的回應-> 重寫為JSONAPI 錯誤回應---------->Presentation.Extension.JsonApiResultExtension 。 FluentValidation:為因驗證錯誤而導致的 JSONAPI 錯誤回應準備帶有回應處理的驗證器。 CommandHandlerValidators 已實作:ValidationPipelineBehavior;只有驗證規則需要在每個 CommandValidation 的建構子中定義。 聊天邊界上下文實作: 使用者邊界上下文實作: POST: /api/v1/user/register, 註冊用戶 POST: /api/v1/user/password/reset/request, 建立密碼重設請求 POST:/api/v1/user/password/change/{id?},變更管理 UI 的密碼端點 POST:/api/v1/user/password/reset/{base64Token},使用使用者收到的密碼重設網址重設密碼(來自郵件的連結) POST:/api/v1/user/activation/{base64Token},使用收到的啟動網址啟動使用者(郵件中的連結) GET: /api/v1/user/user-types, 取得所有可用的使用者類型 GET:/api/v1/user/messenger/{guid},從使用者取得信差設定檔(比預設使用者設定檔資訊少) POST: /api/v1/user/friend/request, 建立好友請求 DELETE: /api/v1/user/friend/request,刪除好友請求 GET: /api/v1/user/friend/request, 取得好友請求 POST: /api/v1/user/friend/request/accept, 接受好友請求 GET:/api/v1/user/friend,取得好友 刪除:/api/v1/user/friend,刪除好友 PUT: /api/v1/user/{id}/profile-picture, 新增個人資料圖片 DELETE: /api/v1/user/{id}/profile-picture,刪除個人資料圖片 PATCH:/api/v1/user/{id}/role,將角色指派給用戶 刪除:/api/v1/user/{id}/role,撤銷使用者的角色 POST: /api/v1/user/, 建立用戶 GET: /api/v1/user/{id}, 取得用戶 PUT: /api/v1/user/{id}, 更新用戶 DELETE: /api/v1/user/{id}, 刪除用戶網路前端:
功能(來自網路前端):
行動應用程式:
將訊息標記為無法螢幕截圖:這些訊息因螢幕截圖建立而變得模糊。個人資料圖片相同。 群組行事曆:在群組聊天行事曆中一起規劃私人活動。 關心共享:將訊息標記為不可共享,不關心不允許的共享:) 能夠自行託管訊息基礎架構。不依賴他人! 反對暴力:當今像 Telegramm 這樣的私人聊天被人們濫用暴力和成人內容。所以水母帶來了避免這類內容分享的能力。機器學習演算法評估將透過信使共享的媒體。當識別出暴力內容時,將避免發送訊息。 ** 需要 Azure AI Vision 或類似的 ML 演算法 ** 與即時軌跡共享位置:如果在群組或私人聊天中,則沒有必要,當觀眾模式打開時,您的動作將即時傳輸給聊天成員(僅在即時軌跡地圖中可用)。 遺忘:遺忘權是當今 GDPR 的基石。透過刪除帳戶,所有資料(以及與朋友共享的聊天訊息)都將被刪除。當然還有媒體。我知道刪除發送給聊天成員的媒體並不是當今的做法,但每個人都有權忘記他創建的資料。 民調/投票:以 WhatsApp 為例:投票也可以在 jellyfish 中使用。 一般的:
敬請關注 。
管理面板 Alpha 0.1
儀表板
帶有分頁和搜尋的使用者管理 (Users.razor)
使用者管理 (Users.razor) - 新增/編輯
使用者管理 (Users.razor) - 刪除
影片:預覽將過濾器從 Http 請求轉換為 Linq 表達式,最後透過 ORM(動態)轉換為 MySql 查詢 / 下面的縮圖 PNG (HREF)
增強的實體關係圖
將 MobileApp 加入解決方案後的程式碼計量分析
與 Github Action 的持續整合工作流程
從核心測試(用例和領域)