xiangyixiangqin/server/src/XiangYi.AppApi/Controllers/MemberController.cs
2026-02-07 15:41:18 +08:00

165 lines
5.7 KiB
C#

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