This commit is contained in:
zpc 2026-02-23 20:07:51 +08:00
parent f7f00f7845
commit 788e1caf91
5 changed files with 510 additions and 727 deletions

View File

@ -57,4 +57,36 @@ public class PlannerController : ControllerBase
return ApiResponse<List<PlannerDto>>.Fail("获取规划师列表失败");
}
}
/// <summary>
/// 获取规划师详情
/// </summary>
/// <remarks>
/// GET /api/planner/getDetail?plannerId=1
///
/// 返回指定规划师的详细信息,仅返回启用状态且未删除的规划师
/// 不需要用户登录认证
/// Requirements: 10.2
/// </remarks>
/// <param name="plannerId">规划师ID</param>
/// <returns>规划师详情</returns>
[HttpGet("getDetail")]
[ProducesResponseType(typeof(ApiResponse<PlannerDto>), StatusCodes.Status200OK)]
public async Task<ApiResponse<PlannerDto>> GetDetail([FromQuery] long plannerId)
{
try
{
var planner = await _plannerService.GetDetailAsync(plannerId);
if (planner == null)
{
return ApiResponse<PlannerDto>.Fail("规划师不存在", 3500);
}
return ApiResponse<PlannerDto>.Success(planner);
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to get planner detail, plannerId={PlannerId}", plannerId);
return ApiResponse<PlannerDto>.Fail("获取规划师详情失败");
}
}
}

View File

@ -2,6 +2,9 @@ using MiAssessment.Model.Models.Planner;
namespace MiAssessment.Core.Interfaces;
/// <summary>
/// 规划师服务接口
/// </summary>
/// <summary>
/// 规划师服务接口
/// </summary>
@ -15,4 +18,12 @@ public interface IPlannerService
/// </remarks>
/// <returns>规划师列表</returns>
Task<List<PlannerDto>> GetListAsync();
/// <summary>
/// 获取规划师详情
/// </summary>
/// <param name="plannerId">规划师ID</param>
/// <returns>规划师详情不存在则返回null</returns>
Task<PlannerDto?> GetDetailAsync(long plannerId);
}

View File

@ -51,4 +51,32 @@ public class PlannerService : IPlannerService
_logger.LogDebug("获取到 {Count} 条规划师记录", planners.Count);
return planners;
}
/// <inheritdoc />
public async Task<PlannerDto?> GetDetailAsync(long plannerId)
{
_logger.LogDebug("获取规划师详情, plannerId={PlannerId}", plannerId);
var planner = await _dbContext.Planners
.AsNoTracking()
.Where(p => p.Id == plannerId && p.Status == 1 && !p.IsDeleted)
.Select(p => new PlannerDto
{
Id = p.Id,
Name = p.Name,
Avatar = p.Avatar,
Title = p.Title,
Introduction = p.Introduction,
Tags = p.Tags,
Price = p.Price
})
.FirstOrDefaultAsync();
if (planner == null)
{
_logger.LogWarning("规划师不存在或已禁用, plannerId={PlannerId}", plannerId);
}
return planner;
}
}

View File

@ -96,7 +96,7 @@
{
"path": "pages/planner/book/index",
"style": {
"navigationBarTitleText": "预约规划"
"navigationBarTitleText": "学业规划"
}
},
{

File diff suppressed because it is too large Load Diff