文字游戏
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

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; }
}
}