using BuildFlow.Platform.Infrastructure.Persistence; using BuildFlow.Shared.Domain.Common; namespace BuildFlow.Host.Endpoints.rag.Auth; /// /// 修改当前用户密码。验证旧密码后更新为新密码。 /// POST /api/user/change-password /// public class ChangePasswordEndpoint(PlatformDbContext db, ICurrentUserContext userContext) : Endpoint { public override void Configure() { Post("/user/change-password"); } public override async Task HandleAsync(ChangePasswordRequest req, CancellationToken ct) { var userId = userContext.GetRequiredUserId(); var user = await db.Users .FirstOrDefaultAsync(u => u.Id.ToString() == userId, ct) ?? throw new UnauthorizedException("用户不存在"); // 验证旧密码 if (!BCrypt.Net.BCrypt.Verify(req.OldPassword, user.PasswordHash)) { throw new BusinessException("旧密码不正确"); } // 新密码不能与旧密码相同 if (req.OldPassword == req.NewPassword) { throw new BusinessException("新密码不能与旧密码相同"); } // 更新密码 user.PasswordHash = BCrypt.Net.BCrypt.HashPassword(req.NewPassword); await db.SaveChangesAsync(ct); await Send.OkAsync(ct); } }