using MiAssessment.Core.Interfaces; using MiAssessment.Model.Base; using MiAssessment.Model.Models.Home; using Microsoft.AspNetCore.Mvc; namespace MiAssessment.Api.Controllers; /// /// 首页控制器 - 处理首页相关功能 /// /// /// 提供Banner列表、测评入口列表、宣传图列表等首页内容 /// 所有接口不需要用户登录认证 /// Requirements: 1.1, 1.2, 1.3, 1.4 /// [ApiController] [Route("api/home")] public class HomeController : ControllerBase { private readonly IHomeService _homeService; private readonly ILogger _logger; /// /// 构造函数 /// /// 首页服务 /// 日志记录器 public HomeController(IHomeService homeService, ILogger logger) { _homeService = homeService; _logger = logger; } /// /// 获取Banner列表 /// /// /// GET /api/home/getBannerList /// /// 返回所有启用状态的Banner记录,按Sort降序排列 /// 不需要用户登录认证 /// Requirements: 1.1 /// /// Banner列表 [HttpGet("getBannerList")] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] public async Task>> GetBannerList() { try { var banners = await _homeService.GetBannerListAsync(); return ApiResponse>.Success(banners); } catch (Exception ex) { _logger.LogError(ex, "Failed to get banner list"); return ApiResponse>.Fail("获取Banner列表失败"); } } /// /// 获取测评入口列表 /// /// /// GET /api/home/getAssessmentList /// /// 返回所有未删除的测评类型,包含状态信息(已上线/即将上线) /// 不需要用户登录认证 /// Requirements: 1.2 /// /// 测评类型列表 [HttpGet("getAssessmentList")] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] public async Task>> GetAssessmentList() { try { var assessmentTypes = await _homeService.GetAssessmentListAsync(); return ApiResponse>.Success(assessmentTypes); } catch (Exception ex) { _logger.LogError(ex, "Failed to get assessment list"); return ApiResponse>.Fail("获取测评列表失败"); } } /// /// 获取首页导航入口列表 /// /// /// GET /api/home/getNavigationList?position=1 /// /// 返回启用状态的首页导航入口,按Sort降序排列 /// 支持按 position 筛选区域(1=专业测评,2=更多),不传返回全部 /// 不需要用户登录认证 /// Requirements: 2.1, 2.2 /// /// 区域标识(可选):1=专业测评区域,2=更多区域 /// 导航入口列表 [HttpGet("getNavigationList")] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] public async Task>> GetNavigationList([FromQuery] int? position) { try { var navigations = await _homeService.GetNavigationListAsync(position); return ApiResponse>.Success(navigations); } catch (Exception ex) { _logger.LogError(ex, "Failed to get navigation list"); return ApiResponse>.Fail("获取导航入口列表失败"); } } /// /// 获取宣传图列表 /// /// /// GET /api/home/getPromotionList /// /// 返回首页位置(Position=1)且启用状态的宣传图 /// 不需要用户登录认证 /// Requirements: 1.3 /// /// 宣传图列表 [HttpGet("getPromotionList")] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] public async Task>> GetPromotionList() { try { var promotions = await _homeService.GetPromotionListAsync(); return ApiResponse>.Success(promotions); } catch (Exception ex) { _logger.LogError(ex, "Failed to get promotion list"); return ApiResponse>.Fail("获取宣传图列表失败"); } } }