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.
218 lines
7.0 KiB
218 lines
7.0 KiB
namespace Minecraft.Crafting.Api.Controllers
|
|
{
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Minecraft.Crafting.Api.Models;
|
|
using ProjetBlazor.Modeles;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
[ApiController]
|
|
[Route("api/[controller]")]
|
|
public class CraftingController : ControllerBase
|
|
{
|
|
public IWebHostEnvironment WebHostEnvironment { get; set; }
|
|
|
|
private readonly JsonSerializerOptions _jsonSerializerOptions = new()
|
|
{
|
|
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
|
WriteIndented = true,
|
|
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
|
|
};
|
|
|
|
[HttpPost]
|
|
[Route("")]
|
|
public Task Add(Item item)
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.json"), _jsonSerializerOptions);
|
|
|
|
data.Add(item);
|
|
|
|
System.IO.File.WriteAllText("Data/items.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
[HttpGet]
|
|
[Route("count")]
|
|
public Task<int> Count()
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<Musique>>(System.IO.File.ReadAllText("Data/musique.json"), _jsonSerializerOptions);
|
|
|
|
return Task.FromResult(data.Count());
|
|
}
|
|
|
|
[HttpDelete]
|
|
[Route("{id}")]
|
|
public Task Delete(int id)
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<Musique>>(System.IO.File.ReadAllText("Data/musique.json"), _jsonSerializerOptions);
|
|
|
|
var item = data?.FirstOrDefault(w => w.id == id);
|
|
|
|
if (item == null)
|
|
{
|
|
throw new Exception($"Unable to found the item with ID: {id}");
|
|
}
|
|
|
|
data.Remove(item);
|
|
|
|
System.IO.File.WriteAllText("Data/musique.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
[HttpGet]
|
|
[Route("{id}")]
|
|
public Task<Musique> GetById(int id)
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<Musique>>(System.IO.File.ReadAllText("Data/musique.json"), _jsonSerializerOptions);
|
|
|
|
var item = data?.FirstOrDefault(w => w.id == id);
|
|
|
|
if (item == null)
|
|
{
|
|
throw new Exception($"Unable to found the item with ID: {id}");
|
|
}
|
|
|
|
return Task.FromResult(item);
|
|
}
|
|
|
|
[HttpGet]
|
|
[Route("recipe")]
|
|
public Task<List<Recipe>> GetRecipe()
|
|
{
|
|
if (!System.IO.File.Exists("Data/convert-recipes.json"))
|
|
{
|
|
ConvertRecipes();
|
|
}
|
|
|
|
var data = JsonSerializer.Deserialize<List<Recipe>>(System.IO.File.ReadAllText("Data/convert-recipes.json"), _jsonSerializerOptions);
|
|
return Task.FromResult(data);
|
|
}
|
|
|
|
private void ConvertRecipes()
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.json"), _jsonSerializerOptions);
|
|
|
|
if (data == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
var recipes = Recipes.FromJson(System.IO.File.ReadAllText("Data/recipes.json"));
|
|
|
|
var items = new List<Recipe>();
|
|
|
|
foreach (var recipe in recipes.SelectMany(s => s.Value))
|
|
{
|
|
if (recipe.InShape == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var giveItem = data.FirstOrDefault(w => w.Id == recipe.Result.Id);
|
|
|
|
if (giveItem == null)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
items.Add(new Recipe
|
|
{
|
|
Give = new Item { DisplayName = giveItem.DisplayName, Name = giveItem.Name },
|
|
Have = new List<List<string>>
|
|
{
|
|
new()
|
|
{
|
|
GetItemName(data, recipe.InShape, 0, 0),
|
|
GetItemName(data, recipe.InShape, 0, 1),
|
|
GetItemName(data, recipe.InShape, 0, 2)
|
|
},
|
|
new()
|
|
{
|
|
GetItemName(data, recipe.InShape, 1, 0),
|
|
GetItemName(data, recipe.InShape, 1, 1),
|
|
GetItemName(data, recipe.InShape, 1, 2)
|
|
},
|
|
new()
|
|
{
|
|
GetItemName(data, recipe.InShape, 2, 0),
|
|
GetItemName(data, recipe.InShape, 2, 1),
|
|
GetItemName(data, recipe.InShape, 2, 2)
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
System.IO.File.WriteAllText("Data/convert-recipes.json", JsonSerializer.Serialize(items, _jsonSerializerOptions));
|
|
}
|
|
|
|
|
|
[HttpGet]
|
|
[Route("")]
|
|
public Task<List<Musique>> List(int currentPage, int pageSize)
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<Musique>>(System.IO.File.ReadAllText("Data/musique.json"), _jsonSerializerOptions);
|
|
|
|
return Task.FromResult(data.Skip((currentPage - 1) * pageSize).Take(pageSize).ToList());
|
|
}
|
|
|
|
|
|
|
|
|
|
[HttpPut]
|
|
[Route("{id}")]
|
|
public Task Update(int id, Musique musique)
|
|
{
|
|
var data = JsonSerializer.Deserialize<List<Musique>>(System.IO.File.ReadAllText("Data/musique.json"), _jsonSerializerOptions);
|
|
|
|
var itemOriginal = data?.FirstOrDefault(w => w.id == id);
|
|
|
|
if (itemOriginal == null)
|
|
{
|
|
throw new Exception($"Unable to found the item with ID: {id}");
|
|
}
|
|
|
|
itemOriginal.id = musique.id;
|
|
itemOriginal.titre = musique.titre;
|
|
itemOriginal.auteur = musique.auteur;
|
|
itemOriginal.duree = musique.duree;
|
|
itemOriginal.genre = musique.genre;
|
|
itemOriginal.image = musique.image;
|
|
itemOriginal.date = musique.date;
|
|
|
|
|
|
System.IO.File.WriteAllText("Data/musique.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
private static string GetItemName(List<Item> items, InShape[][] inShape, int line, int row)
|
|
{
|
|
if (inShape.Length < line + 1)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
if (inShape[line].Length < row + 1)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var id = inShape[line][row].Integer ?? inShape[line][row].IngredientClass?.Id;
|
|
|
|
if (id == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
return GetItemName(items, id.Value);
|
|
}
|
|
|
|
private static string GetItemName(List<Item> items, long id)
|
|
{
|
|
var item = items.FirstOrDefault(w => w.Id == id);
|
|
return item?.Name;
|
|
}
|
|
}
|
|
} |