using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using VendingMachine.Infrastructure.Data; namespace VendingMachine.Api.Controllers; /// /// 管理后台 - 用户管理控制器 /// [ApiController] [Route("api/admin/user")] [Authorize] public class AdminUserController : ControllerBase { private readonly AppDbContext _db; public AdminUserController(AppDbContext db) { _db = db; } /// /// 获取用户列表(分页、搜索) /// [HttpGet] public async Task GetUsers( [FromQuery] int page = 1, [FromQuery] int size = 20, [FromQuery] string? search = null) { var query = _db.Users.AsQueryable(); // 按手机号或 UID 搜索 if (!string.IsNullOrWhiteSpace(search)) { query = query.Where(u => u.Phone.Contains(search) || u.Uid.Contains(search)); } var total = await query.CountAsync(); var items = await query .OrderByDescending(u => u.CreatedAt) .Skip((page - 1) * size) .Take(size) .Select(u => new { u.Uid, u.Phone, u.Nickname, u.IsMember, MembershipType = u.MembershipType.ToString(), u.MembershipExpireAt, u.PointsBalance, u.Language, u.CreatedAt }) .ToListAsync(); return Ok(new { success = true, data = new { items, total, page, size } }); } /// /// 获取用户详情 /// [HttpGet("{uid}")] public async Task GetUserDetail(string uid) { var user = await _db.Users.FirstOrDefaultAsync(u => u.Uid == uid); if (user == null) return NotFound(new { success = false, message = "用户不存在" }); // 获取用户优惠券数量 var couponCount = await _db.UserCoupons.CountAsync(c => c.UserId == uid); // 获取用户积分记录数量 var pointRecordCount = await _db.PointRecords.CountAsync(p => p.UserId == uid); return Ok(new { success = true, data = new { user.Uid, user.Phone, user.Nickname, user.IsMember, MembershipType = user.MembershipType.ToString(), user.MembershipExpireAt, user.PointsBalance, user.PointsExpireAt, user.Language, user.CreatedAt, CouponCount = couponCount, PointRecordCount = pointRecordCount } }); } }