ql_apimanager_backend/Apimanager_backend/Controllers/PackageController.cs
2024-12-08 20:35:47 +08:00

174 lines
6.7 KiB
C#

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<PackageController> logger;
public PackageController(IPackageService packageService,ILogger<PackageController> logger)
{
this.packageService = packageService;
this.logger = logger;
}
#region
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<ActionResult<ResponseBase<PackageInfoDto>>> AddPackage(AddPackageDto addPackageDto)
{
var packageInfo = await packageService.AddPackageAsync(addPackageDto);
var res = new ResponseBase<PackageInfoDto>(packageInfo);
return Ok(res);
}
#endregion
#region
[HttpDelete]
[Authorize(Roles = "Admin")]
public async Task<ActionResult<ResponseBase<object?>>> DeletePackage(int packageId)
{
try
{
await packageService.DeletePackageAsync(packageId);
var res = new ResponseBase<object?>(null);
return Ok(res);
}catch(BaseException e)
{
var res = new ResponseBase<object?>(
code:e.code,
message:e.message,
data:null
);
return NotFound(res);
}
}
#endregion
#region
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<ActionResult<ResponseBase<PackageInfoDto?>>> UpdatePackage(int packageId, UpdatePackageDto updatePackageDto)
{
try
{
var packageInfo = await packageService.UpdatePackageAsync(packageId, updatePackageDto);
var res = new ResponseBase<PackageInfoDto?>(packageInfo);
return Ok(res);
}
catch (BaseException e)
{
var res = new ResponseBase<PackageInfoDto?>(
code:e.code,
message:e.message,
data:null
);
return NotFound(res);
}
}
#endregion
#region
[HttpGet]
[Authorize(Roles = "User")]
public async Task<ActionResult<ResponseBase<PackageInfoDto?>>> GetPackageInfo(int packageId)
{
try
{
var packageInfo = await packageService.PackageInfoByIdAsync(packageId);
var res = new ResponseBase<PackageInfoDto?>(packageInfo);
return Ok(res);
}catch(BaseException e)
{
var res = new ResponseBase<PackageInfoDto?>(
code:e.code,
message:e.message,
data:null
);
return NotFound(res);
}
}
#endregion
#region
[HttpGet]
[Authorize(Roles = "User")]
public async Task<ActionResult<ResponseBase<List<PackageInfoDto>>>> GetPackageList(int pageIndex,int pageSize,bool desc)
{
var packageList = await packageService.GetAllPackagesAsync(pageIndex,pageSize,desc);
var res = new ResponseBase<List<PackageInfoDto>>(packageList);
return Ok(res);
}
#endregion
#region
[HttpGet]
[Authorize(Roles = "User")]
public async Task<ActionResult<ResponseBase<List<UserPackage>>>> 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<UserPackage>>(list);
return Ok(res);
}
#endregion
#region
[HttpGet]
[Authorize(Roles = "Admin")]
public async Task<ActionResult<ResponseBase<List<UserPackage>>>> GetUserPackageListAdmin(int userId,int pageIndex, int pageSize, bool desc)
{
var list = await packageService.GetUserPackagesAsync(userId);
var res = new ResponseBase<List<UserPackage>>(list);
return Ok(res);
}
#endregion
#region
[HttpPost]
[Authorize(Roles = "User")]
public async Task<ActionResult<ResponseBase<UserPackage>>> 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>(userPackage);
return Ok(res);
}
#endregion
#region
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<ActionResult<ResponseBase<UserPackage>>> 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>(userPackage);
return Ok(res);
}
#endregion
#region
[HttpPost]
[Authorize(Roles = "Admin")]
public async Task<ActionResult<ResponseBase<UserPackage?>>> 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>(userPackage);
return Ok(res);
}catch(BaseException e)
{
var res = new ResponseBase<UserPackage?>(
code:e.code,
message:e.message,
data:null
);
return NotFound(res);
}
}
#endregion
}
}