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;
}
}