165 lines
5.7 KiB
C#
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;
|
|
}
|
|
}
|