using Apimanager_backend.Dtos; using Apimanager_backend.Exceptions; using Apimanager_backend.Models; using Apimanager_backend.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace Apimanager_backend.Controllers { [Route("api/[controller]/[action]")] [ApiController] public class PackageController : ControllerBase { private readonly IPackageService packageService; private readonly ILogger logger; public PackageController(IPackageService packageService,ILogger logger) { this.packageService = packageService; this.logger = logger; } #region 新增套餐 [HttpPost] [Authorize(Roles = "Admin")] public async Task>> AddPackage(AddPackageDto addPackageDto) { var packageInfo = await packageService.AddPackageAsync(addPackageDto); var res = new ResponseBase(packageInfo); return Ok(res); } #endregion #region 删除套餐 [HttpDelete] [Authorize(Roles = "Admin")] public async Task>> DeletePackage(int packageId) { try { await packageService.DeletePackageAsync(packageId); var res = new ResponseBase(null); return Ok(res); }catch(BaseException e) { var res = new ResponseBase( code:e.code, message:e.message, data:null ); return NotFound(res); } } #endregion #region 修改套餐信息 [HttpPost] [Authorize(Roles = "Admin")] public async Task>> UpdatePackage(int packageId, UpdatePackageDto updatePackageDto) { try { var packageInfo = await packageService.UpdatePackageAsync(packageId, updatePackageDto); var res = new ResponseBase(packageInfo); return Ok(res); } catch (BaseException e) { var res = new ResponseBase( code:e.code, message:e.message, data:null ); return NotFound(res); } } #endregion #region 获取套餐信息 [HttpGet] [Authorize(Roles = "User")] public async Task>> GetPackageInfo(int packageId) { try { var packageInfo = await packageService.PackageInfoByIdAsync(packageId); var res = new ResponseBase(packageInfo); return Ok(res); }catch(BaseException e) { var res = new ResponseBase( code:e.code, message:e.message, data:null ); return NotFound(res); } } #endregion #region 获取套餐列表 [HttpGet] //[Authorize(Roles = "User")] public async Task>>> GetPackageList(int pageIndex,int pageSize,bool desc) { var packageList = await packageService.GetAllPackagesAsync(pageIndex,pageSize,desc); var res = new ResponseBase>(packageList); return Ok(res); } #endregion #region 获取用户已订阅套餐 [HttpGet] [Authorize(Roles = "User")] public async Task>>> GetUserPackageList(int pageIndex,int pageSize,bool desc) { var selfUserId = User.Claims.First(x => x.ValueType == "userId").Value; var list = await packageService.GetUserPackagesAsync(int.Parse(selfUserId)); var res = new ResponseBase>(list); return Ok(res); } #endregion #region 管理员获取用户已订阅套餐 [HttpGet] [Authorize(Roles = "Admin")] public async Task>>> GetUserPackageListAdmin(int userId,int pageIndex, int pageSize, bool desc) { var list = await packageService.GetUserPackagesAsync(userId); var res = new ResponseBase>(list); return Ok(res); } #endregion #region 添加套餐有效期 [HttpPost] [Authorize(Roles = "User")] public async Task>> UserPackageUpdate(int packageId,int day) { TimeSpan timeSpan = TimeSpan.FromDays(day); var selfUserId = User.Claims.First(x => x.ValueType == "userId").Value; var userPackage = await packageService.AddUserPackageTimeAsync(packageId,int.Parse(selfUserId),timeSpan,false); var res = new ResponseBase(userPackage); return Ok(res); } #endregion #region 管理员添加套餐有效期 [HttpPost] [Authorize(Roles = "Admin")] public async Task>> UserPackageUpdateAdmin(int packageId,int userId, int day) { TimeSpan timeSpan = TimeSpan.FromDays(day); var userPackage = await packageService.AddUserPackageTimeAsync(packageId, userId, timeSpan, true); var res = new ResponseBase(userPackage); return Ok(res); } #endregion #region 扣减套餐有效期 [HttpPost] [Authorize(Roles = "Admin")] public async Task>> DecuteUserPackage(int packageId,int userId,int day) { try { TimeSpan timeSpan = TimeSpan.FromDays(day); var userPackage = await packageService.DecuteUserPackageTimeAsync(packageId, userId, timeSpan); var res = new ResponseBase(userPackage); return Ok(res); }catch(BaseException e) { var res = new ResponseBase( code:e.code, message:e.message, data:null ); return NotFound(res); } } #endregion } }