qtcnet-server/qtc-net-server/Controllers/CurrencyGamesController.cs
2026-07-23 13:54:06 -07:00

114 lines
4.3 KiB
C#

using qtc_api.Services.CurrencyGamesService;
using System.Security.Claims;
using static qtc_api.Services.CurrencyGamesService.CurrencyGamesService;
namespace qtc_api.Controllers
{
[Route("api/games")]
[ApiController]
public class CurrencyGamesController : ControllerBase
{
private IUserService _userService;
private CurrencyGamesService _currencyGamesService;
public CurrencyGamesController(IUserService userService, CurrencyGamesService currencyGamesService)
{
_userService = userService;
_currencyGamesService = currencyGamesService;
}
// Stock Market
[HttpGet("stock-market/current-price")]
public ActionResult<ServiceResponse<int>> GetCurrentPricePerStock()
{
var price = _currencyGamesService.GetCurrentPricePerStock();
if (price != null && price.Success)
{
return Ok(new ServiceResponse<int>
{
Success = true,
Data = price.Data
});
}
else return Ok(new ServiceResponse<int>
{
Success = false,
Message = "Service Indicated Failiure"
});
}
[HttpPost("stock-market/buy-stock")]
[Authorize]
public async Task<ActionResult<ServiceResponse<UserStockActionResultDto>>> BuyStockFromMarket(int amount)
{
var identity = HttpContext.User.Identity as ClaimsIdentity;
if (identity != null)
{
IEnumerable<Claim> claims = identity.Claims;
var id = claims.First().Value;
var user = await _userService.GetUserById(id);
if (user != null && user.Success && user.Data != null)
{
var stocks = await _currencyGamesService.BuyStock(user.Data, amount);
if (stocks.Success)
{
return Ok(new ServiceResponse<UserStockActionResultDto> { Success = true, Data = stocks.Data });
}
else return Ok(new ServiceResponse<UserStockActionResultDto> { Success = false, Message = stocks.Message });
}
else return Ok(new ServiceResponse<UserStockActionResultDto> { Success = false, Message = "Identity User Not Found" });
}
else return Ok(new ServiceResponse<UserStockActionResultDto> { Success = false, Message = "No Identity" });
}
[HttpPost("stock-market/sell-stock")]
[Authorize]
public async Task<ActionResult<ServiceResponse<UserStockActionResultDto>>> SellStockToMarket(int amount)
{
var identity = HttpContext.User.Identity as ClaimsIdentity;
if (identity != null)
{
IEnumerable<Claim> claims = identity.Claims;
var id = claims.First().Value;
var user = await _userService.GetUserById(id);
if (user != null && user.Success && user.Data != null)
{
var stocks = await _currencyGamesService.SellStock(user.Data, amount);
if (stocks.Success)
{
return Ok(new ServiceResponse<UserStockActionResultDto> { Success = true, Data = stocks.Data });
}
else return Ok(new ServiceResponse<UserStockActionResultDto> { Success = false, Message = stocks.Message });
}
else return Ok(new ServiceResponse<UserStockActionResultDto> { Success = false, Message = "Identity User Not Found" });
}
else return Ok(new ServiceResponse<UserStockActionResultDto> { Success = false, Message = "No Identity" });
}
// Number Guess
[HttpGet("number-guess/get-number")]
[Authorize]
public ActionResult<ServiceResponse<int>> GetRandomNumber()
{
return Ok(_currencyGamesService.GetRandomNumber());
}
[HttpGet("number-guess/guess-number")]
[Authorize]
public ActionResult<ServiceResponse<NumberGuessResult>> GuessNumber(int original, int guess)
{
return Ok(_currencyGamesService.GuessRandomNumber(original, guess));
}
}
}