feature-nxdev #55

Merged
nanxun merged 2 commits from feature-nxdev into main 2026-01-30 22:14:50 +08:00
10 changed files with 107 additions and 20 deletions

3
backend/IMTest/.gitignore vendored Normal file
View File

@ -0,0 +1,3 @@
bin/
obj/
.vs/

View File

@ -14,7 +14,7 @@ using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("IMTest")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+1df3a0f30e469671b3e81d88574871d99c98af1a")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+7ebf23ddd8a0d5536167313c4cf37af1552a5057")]
[assembly: System.Reflection.AssemblyProductAttribute("IMTest")]
[assembly: System.Reflection.AssemblyTitleAttribute("IMTest")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]

View File

@ -1 +1 @@
9546071857f1b0fa09bedf887ca476b7ecfa579752230651321c2a145e579c92
ca0390a4d5773daae2e747d7512c190701a7a942186c769e42327a4864733f0b

View File

@ -1,4 +1,5 @@
using IM_API.Domain.Events;
using IM_API.Interface.Services;
using IM_API.Models;
using MassTransit;
@ -6,26 +7,22 @@ namespace IM_API.Application.EventHandlers.FriendAddHandler
{
public class FriendAddSignalRHandler : IConsumer<FriendAddEvent>
{
private readonly ImContext _context;
public FriendAddSignalRHandler(ImContext context)
private readonly IFriendSerivce _friendService;
public FriendAddSignalRHandler(IFriendSerivce friendSerivce)
{
_context = context;
_friendService = friendSerivce;
}
public Task Consume(ConsumeContext<FriendAddEvent> context)
public async Task Consume(ConsumeContext<FriendAddEvent> context)
{
throw new NotImplementedException();
var @event = context.Message;
//为请求发起人添加好友记录
await _friendService.MakeFriendshipAsync(
@event.RequestUser.Id, @event.ResponseUser.Id, @event.RequestInfo.RemarkName);
//为接收人添加好友记录
await _friendService.MakeFriendshipAsync(
@event.ResponseUser.Id, @event.RequestUser.Id, @event.requestUserRemarkname);
var RequestfriendShip = new Friend()
{
Avatar = @event.ResponseUser.Avatar,
UserId = @event.RequestUser.Id,
RemarkName = @event.RequestInfo.NickName,
Created = @event.RequestInfo.Created,
};
}
}
}

View File

@ -28,6 +28,7 @@ namespace IM_API.Configs
//好友信息模型转换
CreateMap<Friend, FriendInfoDto>()
.ForMember(dest => dest.UserInfo, opt => opt.MapFrom(src => src.FriendNavigation))
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.FriendNavigation.Avatar))
;
//好友请求通过后新增好友关系
CreateMap<FriendRequestDto, Friend>()

View File

@ -8,17 +8,18 @@ namespace IM_API.Domain.Events
/// <summary>
/// 发起请求用户
/// </summary>
public UserInfoDto RequestUser { get; set; }
public UserInfoDto RequestUser { get; init; }
public string? requestUserRemarkname { get; init; }
/// <summary>
/// 接受请求用户
/// </summary>
public UserInfoDto ResponseUser { get; set; }
public UserInfoDto ResponseUser { get; init; }
public FriendRequestResDto RequestInfo { get; set; }
public FriendRequestDto RequestInfo { get; init; }
/// <summary>
/// 好友关系创建时间
/// </summary>
public DateTime Created { get; set; }
public DateTime Created { get; init; }
}
}

View File

@ -60,5 +60,12 @@ namespace IM_API.Interface.Services
/// <param name="friendId">好友关系id</param>
/// <returns></returns>
Task<bool> BlockeFriendAsync(int friendId);
/// <summary>
/// 创建好友关系
/// </summary>
/// <param name="userAId"></param>
/// <param name="userBId"></param>
/// <returns></returns>
Task MakeFriendshipAsync(int userAId, int userBId, string? remarkName);
}
}

View File

@ -175,5 +175,28 @@ namespace IM_API.Services
return true;
}
#endregion
#region
public async Task MakeFriendshipAsync(int userAId, int userBId, string? remarkName)
{
bool userAexist = await _context.Friends.AnyAsync(x => x.UserId == userAId && x.FriendId == userBId);
if (!userAexist)
{
User? userbInfo = await _context.Users.FirstOrDefaultAsync(x => x.Id == userBId);
if (userbInfo is null) throw new BaseException(CodeDefine.USER_NOT_FOUND);
Friend friendA = new Friend()
{
Avatar = userbInfo.Avatar,
Created = DateTime.UtcNow,
FriendId = userbInfo.Id,
RemarkName = remarkName ?? userbInfo.NickName,
StatusEnum = FriendStatus.Added,
UserId = userAId
};
_context.Friends.Add(friendA);
await _context.SaveChangesAsync();
}
}
#endregion
}
}

View File

@ -0,0 +1,55 @@
# 🧪 测试环境自动化构建使用手册
本手册用于指导测试人员如何通过 Jenkins 快速部署指定分支的代码,并访问对应的测试地址。
---
### 1. 环境准备
| 平台名称 | 地址 |
| ---------------------- | ------------------------------------------------------------ |
| Jenkins IM前端构建任务 | [Jenkins](http://192.168.5.100:8100/job/IM前端/build?delay=0sec) |
| Jenkins IM后端构建任务 | [IM后端 - Jenkins](http://192.168.5.100:8100/job/IM后端/) |
| 前端分支列表 | https://im.test.nxsir.cn |
在开始构建前,请确认:
* 已拥有 **Jenkins 登录权限**
* **前置环境wireguard**已启动。
* 已获取需要测试的 **Git 分支名称**(例如:`feature/order-page`)。
---
### 2. 构建操作步骤流程
1. **登录 Jenkins**:访问 [此处输入你的Jenkins地址] 并登录。
2. **进入任务**:在项目列表中点击进入对应的测试项目。
3. **参数化构建**
* 点击左侧菜单栏的 **Build with Parameters**(带参数构建)。
* 在 **`BRANCH_NAME`** 输入框中,填入或选择你的 Git 分支名。
4. **开始构建**:点击下方的 **Build** 按钮。
> ⚠️ **提示**:建议直接从代码仓库复制分支名,避免手动输入导致拼写错误。
---
### 3. 查看构建状态与结果
* **观察状态**:在左下角 **Build History** 看到圆形图标变为 **蓝色/绿色**,表示构建成功。
* **访问网页**
* 构建成功后,点击该次构建编号(如 `#10`)。
* 在详情页中点击 **[访问测试环境]** 链接(通常位于页面显著位置)。
* 或者直接访问:`https://im.test.nxsir.cn/[分支名]`
---
### 4. 常见问题排查
| 现象 | 可能原因 | 解决方法 |
| :-------------------------- | :--------------------- | :----------------------------------------------------------- |
| **构建显示红色Failure** | 分支名不存在或代码冲突 | 检查分支名是否已推送到远端仓库。 |
| **点击链接显示 404** | 部署尚未完全完成 | 构建完成后通常有几秒延迟,请稍后刷新。 |
| **页面依然显示旧内容** | 浏览器缓存 | 请使用 `Ctrl + F5` (Windows) 或 `Cmd + Shift + R` (Mac) 强制刷新。 |
---
**💡 运维备注**:如遇 Jenkins 无法登录或构建按钮置灰,请联系管理员。