You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
4.5 KiB
145 lines
4.5 KiB
using Build_God_Api.Common;
|
|
using Build_God_Api.DB;
|
|
using Build_God_Api.Services;
|
|
using Microsoft.AspNetCore.Authorization;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace Build_God_Api.Controllers
|
|
{
|
|
[ApiController]
|
|
[Route("api/god/[controller]")]
|
|
public class BagController(
|
|
IBagService service,
|
|
IMissionProgressService missionProgressService
|
|
) : ControllerBase
|
|
{
|
|
private readonly IBagService service = service;
|
|
private readonly IMissionProgressService missionProgressService = missionProgressService;
|
|
|
|
// ============ Bag配置管理 ============
|
|
|
|
[HttpGet("all")]
|
|
[Authorize]
|
|
public async Task<ActionResult<List<Bag>>> GetAllBags()
|
|
{
|
|
return await service.GetAllBags();
|
|
}
|
|
|
|
[HttpGet("{id}")]
|
|
[Authorize]
|
|
public async Task<ActionResult<Bag>> GetBagById(int id)
|
|
{
|
|
return await service.GetBagById(id);
|
|
}
|
|
|
|
[HttpPost]
|
|
[Authorize(Roles = "admin")]
|
|
public async Task<ActionResult<bool>> CreateBag([FromBody] Bag bag)
|
|
{
|
|
return await service.CreateBag(bag);
|
|
}
|
|
|
|
[HttpPut("{id}")]
|
|
[Authorize(Roles = "admin")]
|
|
public async Task<ActionResult<bool>> UpdateBag(int id, [FromBody] Bag bag)
|
|
{
|
|
bag.Id = id;
|
|
return await service.UpdateBag(bag);
|
|
}
|
|
|
|
[HttpDelete("{id}")]
|
|
[Authorize(Roles = "admin")]
|
|
public async Task<ActionResult<bool>> DeleteBag(int id)
|
|
{
|
|
return await service.DeleteBag(id);
|
|
}
|
|
|
|
// ============ 角色背包管理 ============
|
|
|
|
[HttpGet("character/{characterId}")]
|
|
[Authorize]
|
|
public async Task<ActionResult<CharacterBagDto>> GetCharacterBag(int characterId)
|
|
{
|
|
return await service.GetCharacterBag(characterId);
|
|
}
|
|
|
|
[HttpPost("assign")]
|
|
[Authorize(Roles = "admin")]
|
|
public async Task<ActionResult<bool>> AssignBagToCharacter([FromBody] AssignBagDto dto)
|
|
{
|
|
return await service.AssignBagToCharacter(dto.CharacterId, dto.BagId);
|
|
}
|
|
|
|
// ============ 背包物品管理 ============
|
|
|
|
[HttpGet("{characterBagId}/items")]
|
|
[Authorize]
|
|
public async Task<ActionResult<List<BagItemDto>>> GetBagItems(int characterBagId)
|
|
{
|
|
return await service.GetBagItems(characterBagId);
|
|
}
|
|
|
|
[HttpPost("{characterBagId}/items")]
|
|
[Authorize(Roles = "admin")]
|
|
public async Task<ActionResult<bool>> AddItemToBag(int characterBagId, [FromBody] AddBagItemDto dto)
|
|
{
|
|
return await service.AddItemToBag(characterBagId, dto.ItemType, dto.ItemId, dto.Quantity);
|
|
}
|
|
|
|
[HttpPost("{characterBagId}/items/with-mission")]
|
|
[Authorize]
|
|
public async Task<ActionResult<bool>> AddItemToBagWithMission(int characterBagId, [FromBody] AddBagItemDto dto)
|
|
{
|
|
return await service.AddItemToBagWithMissionProgress(characterBagId, dto.ItemType, dto.ItemId, dto.Quantity, missionProgressService);
|
|
}
|
|
|
|
[HttpDelete("{characterBagId}/items/{itemId}")]
|
|
[Authorize(Roles = "admin")]
|
|
public async Task<ActionResult<bool>> RemoveItemFromBag(int characterBagId, int itemId)
|
|
{
|
|
return await service.RemoveItemFromBag(characterBagId, itemId);
|
|
}
|
|
|
|
[HttpPost("{characterBagId}/items/destroy")]
|
|
[Authorize]
|
|
public async Task<ActionResult<bool>> DestroyBagItem(int characterBagId, [FromBody] DestroyBagItemDto dto)
|
|
{
|
|
return await service.DestroyBagItem(characterBagId, dto.ItemType, dto.ItemDbId);
|
|
}
|
|
|
|
// ============ 枚举 ============
|
|
|
|
[HttpGet("rarities")]
|
|
[Authorize]
|
|
public ActionResult<List<EnumInfoDto>> GetBagRarities()
|
|
{
|
|
return EnumHelper.GetEnumList<BagRarity>();
|
|
}
|
|
|
|
[HttpGet("item-types")]
|
|
[Authorize]
|
|
public ActionResult<List<EnumInfoDto>> GetBagItemTypes()
|
|
{
|
|
return EnumHelper.GetEnumList<BagItemType>();
|
|
}
|
|
}
|
|
|
|
public class AssignBagDto
|
|
{
|
|
public int CharacterId { get; set; }
|
|
public int BagId { get; set; }
|
|
}
|
|
|
|
public class AddBagItemDto
|
|
{
|
|
public int ItemType { get; set; }
|
|
public int ItemId { get; set; }
|
|
public int Quantity { get; set; }
|
|
}
|
|
|
|
public class DestroyBagItemDto
|
|
{
|
|
public int ItemType { get; set; }
|
|
public int ItemDbId { get; set; }
|
|
}
|
|
}
|
|
|