水母移动应用程序
简介 该项目的重点是重新创建 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 的持续集成工作流程
从核心测试(用例和领域)