using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using XiangYi.Application.DTOs.Requests; using XiangYi.Application.DTOs.Responses; using XiangYi.Application.Interfaces; using XiangYi.Core.Constants; using System.Security.Claims; namespace XiangYi.AppApi.Controllers; /// /// 会员控制器 /// [ApiController] [Route("api/app/member")] [Authorize] public class MemberController : ControllerBase { private readonly IMemberService _memberService; private readonly ISystemConfigService _systemConfigService; private readonly ILogger _logger; public MemberController(IMemberService memberService, ISystemConfigService systemConfigService, ILogger logger) { _memberService = memberService; _systemConfigService = systemConfigService; _logger = logger; } /// /// 获取会员信息(未登录时只返回等级配置) /// /// 会员信息 [HttpGet("info")] [AllowAnonymous] public async Task> GetMemberInfo() { var userId = GetCurrentUserId(); if (userId <= 0) { // 未登录:只返回会员等级配置和默认选中等级 var tiers = await _memberService.GetMemberTiersAsync(); var defaultTierLevel = await GetDefaultTierLevelAsync(); return ApiResponse.Success(new MemberInfoResponse { Tiers = tiers, DefaultTierLevel = defaultTierLevel }); } var result = await _memberService.GetMemberInfoAsync(userId); return ApiResponse.Success(result); } /// /// 购买会员 /// /// 购买请求 /// 订单信息和支付参数 [HttpPost("purchase")] public async Task> Purchase([FromBody] MemberPurchaseRequest request) { if (request.MemberLevel < 1 || request.MemberLevel > 4) { return ApiResponse.Error(ErrorCodes.InvalidParameter, "会员等级无效"); } var userId = GetCurrentUserId(); var result = await _memberService.CreatePurchaseOrderAsync(userId, request); return ApiResponse.Success(result); } /// /// 绑定家庭成员 /// /// 绑定请求 /// 绑定结果 [HttpPost("bindFamily")] public async Task> BindFamily([FromBody] FamilyBindRequest request) { if (request.BindUserId <= 0) { return ApiResponse.Error(ErrorCodes.InvalidParameter, "绑定用户ID无效"); } var userId = GetCurrentUserId(); if (userId == request.BindUserId) { return ApiResponse.Error(ErrorCodes.InvalidParameter, "不能绑定自己"); } var result = await _memberService.BindFamilyMemberAsync(userId, request); return ApiResponse.Success(result); } /// /// 通过相亲编号绑定家庭成员 /// /// 绑定请求(包含相亲编号) /// 绑定结果 [HttpPost("bindFamilyByXiangQinNo")] public async Task> BindFamilyByXiangQinNo([FromBody] FamilyBindByXiangQinNoRequest request) { if (string.IsNullOrWhiteSpace(request.XiangQinNo)) { return ApiResponse.Error(ErrorCodes.InvalidParameter, "请输入相亲编号"); } var userId = GetCurrentUserId(); var result = await _memberService.BindFamilyMemberByXiangQinNoAsync(userId, request); return ApiResponse.Success(result); } /// /// 获取家庭成员列表 /// /// 家庭成员列表 [HttpGet("familyMembers")] public async Task>> GetFamilyMembers() { var userId = GetCurrentUserId(); var result = await _memberService.GetFamilyMembersAsync(userId); return ApiResponse>.Success(result); } /// /// 解绑家庭成员 /// /// 被绑定用户ID /// 解绑结果 [HttpDelete("familyMembers/{bindUserId}")] public async Task UnbindFamilyMember(long bindUserId) { if (bindUserId <= 0) { return ApiResponse.Error(ErrorCodes.InvalidParameter, "绑定用户ID无效"); } var userId = GetCurrentUserId(); var success = await _memberService.UnbindFamilyMemberAsync(userId, bindUserId); if (!success) { return ApiResponse.Error(ErrorCodes.InvalidParameter, "解绑失败,该用户未绑定"); } return ApiResponse.Success("解绑成功"); } /// /// 获取当前用户ID /// private long GetCurrentUserId() { var userIdClaim = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; return long.TryParse(userIdClaim, out var userId) ? userId : 0; } /// /// 获取默认选中会员等级 /// private async Task GetDefaultTierLevelAsync() { var value = await _systemConfigService.GetConfigValueAsync( XiangYi.Application.Services.SystemConfigService.DefaultMemberTierLevelKey); return int.TryParse(value, out var level) ? level : null; } }