From d322a977123e0989f04c942837e999704a7ed117 Mon Sep 17 00:00:00 2001 From: milimoe Date: Wed, 9 Apr 2025 01:06:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20InventoryController?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/DataRequestController.cs | 8 +- .../Controllers/InventoryController.cs | 137 ++++++++++++++++++ 2 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 FunGame.WebAPI/Controllers/InventoryController.cs diff --git a/FunGame.Server/Controllers/DataRequestController.cs b/FunGame.Server/Controllers/DataRequestController.cs index 43716dd..7daf65d 100644 --- a/FunGame.Server/Controllers/DataRequestController.cs +++ b/FunGame.Server/Controllers/DataRequestController.cs @@ -1435,7 +1435,7 @@ namespace Milimoe.FunGame.Server.Controller break; case OfferActionType.OffereeReject: - if (offer.Status == OfferState.Sent || offer.Status == OfferState.Negotiating) + if (offer.Status == OfferState.Sent || offer.Status == OfferState.Negotiating || offer.Status == OfferState.NegotiationAccepted) { SQLHelper.UpdateOfferStatus(offerId, OfferState.Rejected); SQLHelper.UpdateOfferFinishTime(offerId, DateTime.Now); @@ -1465,6 +1465,8 @@ namespace Milimoe.FunGame.Server.Controller if (offeree.Inventory.Items.FirstOrDefault(i => i.Guid == itemGuid) is Item item) { offeree.Inventory.Items.Remove(item); + item.EntityState = EntityState.Deleted; + Item newItem = item.Copy(); newItem.User = offeror; newItem.IsSellable = false; @@ -1472,6 +1474,7 @@ namespace Milimoe.FunGame.Server.Controller newItem.NextSellableTime = DateTimeUtility.GetTradableTime(); newItem.NextTradableTime = DateTimeUtility.GetTradableTime(); offeror.Inventory.Items.Add(newItem); + newItem.EntityState = EntityState.Added; } } foreach (Guid itemGuid in offer.OfferorItems) @@ -1479,6 +1482,8 @@ namespace Milimoe.FunGame.Server.Controller if (offeror.Inventory.Items.FirstOrDefault(i => i.Guid == itemGuid) is Item item) { offeror.Inventory.Items.Remove(item); + item.EntityState = EntityState.Deleted; + Item newItem = item.Copy(); newItem.User = offeree; newItem.IsSellable = false; @@ -1486,6 +1491,7 @@ namespace Milimoe.FunGame.Server.Controller newItem.NextSellableTime = DateTimeUtility.GetTradableTime(); newItem.NextTradableTime = DateTimeUtility.GetTradableTime(); offeree.Inventory.Items.Add(newItem); + newItem.EntityState = EntityState.Added; } } SQLHelper.UpdateInventory(offeror.Inventory); diff --git a/FunGame.WebAPI/Controllers/InventoryController.cs b/FunGame.WebAPI/Controllers/InventoryController.cs new file mode 100644 index 0000000..067b375 --- /dev/null +++ b/FunGame.WebAPI/Controllers/InventoryController.cs @@ -0,0 +1,137 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Milimoe.FunGame.Core.Library.Constant; +using Milimoe.FunGame.Core.Library.SQLScript.Entity; +using Milimoe.FunGame.WebAPI.Models; + +namespace Milimoe.FunGame.WebAPI.Controllers +{ + [ApiController] + [Route("[controller]")] + [Authorize] + public class InventoryController(RESTfulAPIModel model, ILogger logger) : ControllerBase + { + private readonly ILogger _logger = logger; + + /// + /// 获取交易报价 + /// + [HttpGet("getoffer")] + public async Task GetOffer([FromQuery] long offerId) + { + PayloadModel response = new() + { + Event = "inventory_getoffer", + RequestType = DataRequestType.Inventory_GetOffer + }; + + try + { + Dictionary data = new() + { + { OffersQuery.Column_Id, offerId }, + { "apiQuery", true } + }; + Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Inventory_GetOffer, data); + response.StatusCode = 200; + response.Data = result; + return Ok(response); + } + catch (Exception e) + { + _logger.LogError("Error: {e}", e); + } + + response.StatusCode = 500; + response.Message = "服务器暂时无法处理此请求。"; + return StatusCode(500, response); + } + + /// + /// 创建交易报价 + /// + [HttpPost("makeoffer")] + public async Task MakeOffer([FromBody] Dictionary data) + { + PayloadModel response = new() + { + Event = "inventory_makeoffer", + RequestType = DataRequestType.Inventory_MakeOffer + }; + + try + { + Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Inventory_MakeOffer, data); + response.StatusCode = 200; + response.Data = result; + return Ok(response); + } + catch (Exception e) + { + _logger.LogError("Error: {e}", e); + } + + response.StatusCode = 500; + response.Message = "服务器暂时无法处理此请求。"; + return StatusCode(500, response); + } + + /// + /// 修改交易报价 + /// + [HttpPost("reviseoffer")] + public async Task ReviseOffer([FromBody] Dictionary data) + { + PayloadModel response = new() + { + Event = "inventory_reviseoffer", + RequestType = DataRequestType.Inventory_ReviseOffer + }; + + try + { + Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Inventory_ReviseOffer, data); + response.StatusCode = 200; + response.Data = result; + return Ok(response); + } + catch (Exception e) + { + _logger.LogError("Error: {e}", e); + } + + response.StatusCode = 500; + response.Message = "服务器暂时无法处理此请求。"; + return StatusCode(500, response); + } + + /// + /// 回应交易报价 + /// + [HttpPost("respondoffer")] + public async Task RespondOffer([FromBody] Dictionary data) + { + PayloadModel response = new() + { + Event = "inventory_respondoffer", + RequestType = DataRequestType.Inventory_RespondOffer + }; + + try + { + Dictionary result = await model.DataRequestController.GetResultData(DataRequestType.Inventory_RespondOffer, data); + response.StatusCode = 200; + response.Data = result; + return Ok(response); + } + catch (Exception e) + { + _logger.LogError("Error: {e}", e); + } + + response.StatusCode = 500; + response.Message = "服务器暂时无法处理此请求。"; + return StatusCode(500, response); + } + } +}