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.
138 lines
5.0 KiB
138 lines
5.0 KiB
// --------------------------------------------------------------------------------------------------------------------
|
|
// <copyright file="InventoryController.cs" company="UCA Clermont-Ferrand">
|
|
// Copyright (c) UCA Clermont-Ferrand All rights reserved.
|
|
// </copyright>
|
|
// --------------------------------------------------------------------------------------------------------------------
|
|
|
|
namespace Minecraft.Crafting.Api.Controllers
|
|
{
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Minecraft.Crafting.Api.Models;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
/// <summary>
|
|
/// The inventory controller.
|
|
/// </summary>
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class InventoryController : ControllerBase
|
|
{
|
|
/// <summary>
|
|
/// The json serializer options.
|
|
/// </summary>
|
|
private readonly JsonSerializerOptions _jsonSerializerOptions = new()
|
|
{
|
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
|
WriteIndented = true,
|
|
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
|
|
};
|
|
|
|
/// <summary>
|
|
/// Adds to inventory.
|
|
/// </summary>
|
|
/// <param name="item">The item.</param>
|
|
/// <returns>The async task.</returns>
|
|
[HttpPost]
|
|
[Route("")]
|
|
public Task AddToInventory(InventoryModel item)
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<InventoryModel>>(System.IO.File.ReadAllText("Data/inventory.json"), _jsonSerializerOptions);
|
|
|
|
if (data == null)
|
|
{
|
|
throw new Exception("Unable to get the inventory.");
|
|
}
|
|
|
|
data.Add(item);
|
|
|
|
System.IO.File.WriteAllText("Data/inventory.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Deletes from inventory.
|
|
/// </summary>
|
|
/// <param name="item">The item.</param>
|
|
/// <returns>The async task.</returns>
|
|
[HttpDelete]
|
|
[Route("")]
|
|
public Task DeleteFromInventory(InventoryModel item)
|
|
{
|
|
if (!System.IO.File.Exists("Data/inventory.json"))
|
|
{
|
|
throw new Exception($"Unable to found the item with name: {item.ItemName}");
|
|
}
|
|
|
|
var data = JsonSerializer.Deserialize<List<InventoryModel>>(System.IO.File.ReadAllText("Data/inventory.json"), _jsonSerializerOptions);
|
|
|
|
if (data == null)
|
|
{
|
|
throw new Exception("Unable to get the inventory.");
|
|
}
|
|
|
|
var inventoryItem = data.FirstOrDefault(w => w.ItemName == item.ItemName && w.Position == item.Position);
|
|
|
|
if (inventoryItem == null)
|
|
{
|
|
throw new Exception($"Unable to found the item with name: {item.ItemName} at position: {item.Position}");
|
|
}
|
|
|
|
data.Remove(inventoryItem);
|
|
|
|
System.IO.File.WriteAllText("Data/inventory.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the inventory.
|
|
/// </summary>
|
|
/// <returns>The inventory.</returns>
|
|
[HttpGet]
|
|
[Route("")]
|
|
public Task<List<InventoryModel>> GetInventory()
|
|
{
|
|
if (!System.IO.File.Exists("Data/inventory.json"))
|
|
{
|
|
return Task.FromResult(new List<InventoryModel>());
|
|
}
|
|
|
|
var data = JsonSerializer.Deserialize<List<InventoryModel>>(System.IO.File.ReadAllText("Data/inventory.json"), _jsonSerializerOptions);
|
|
|
|
if (data == null)
|
|
{
|
|
throw new Exception("Unable to get the inventory.");
|
|
}
|
|
|
|
return Task.FromResult(data);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Updates the inventory.
|
|
/// </summary>
|
|
/// <param name="item">The item.</param>
|
|
/// <returns>The async task.</returns>
|
|
[HttpPut]
|
|
[Route("")]
|
|
public Task UpdateInventory(string[] infos)
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<InventoryModel>>(System.IO.File.ReadAllText("Data/inventory.json"), _jsonSerializerOptions);
|
|
|
|
if (data == null)
|
|
{
|
|
throw new Exception("Unable to get the inventory.");
|
|
}
|
|
|
|
data.ToArray()[Int32.Parse(infos[1]) - 1].ItemName = infos[0];
|
|
data.ToArray()[Int32.Parse(infos[1]) - 1].Position = Int32.Parse(infos[1]);
|
|
data.ToArray()[Int32.Parse(infos[1]) - 1].Number = Int32.Parse(infos[2]);
|
|
data.ToArray()[Int32.Parse(infos[1]) - 1].StackSize = Int32.Parse(infos[3]);
|
|
|
|
System.IO.File.WriteAllText("Data/inventory.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|
|
} |