master
Baptiste BAVEREL 2 years ago
parent d4800f310f
commit c8c1fce6ae

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -2,6 +2,5 @@
"ExpandedNodes": [ "ExpandedNodes": [
"" ""
], ],
"SelectedNode": "\\C:\\Users\\babaverel\\Source\\Repos\\Blazor",
"PreviewInSolutionExplorer": false "PreviewInSolutionExplorer": false
} }

@ -5,6 +5,8 @@ VisualStudioVersion = 17.2.32616.157
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorApp1", "BlazorApp1\BlazorApp1.csproj", "{7E9A69E5-F71C-4096-9D18-3DAB27F8433B}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BlazorApp1", "BlazorApp1\BlazorApp1.csproj", "{7E9A69E5-F71C-4096-9D18-3DAB27F8433B}"
EndProject EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Minecraft.Crafting.Api", "Minecraft.Crafting.Api\Minecraft.Crafting.Api.csproj", "{AE7FB7D4-CD57-4735-91BD-92EA54230CC5}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -15,6 +17,10 @@ Global
{7E9A69E5-F71C-4096-9D18-3DAB27F8433B}.Debug|Any CPU.Build.0 = Debug|Any CPU {7E9A69E5-F71C-4096-9D18-3DAB27F8433B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7E9A69E5-F71C-4096-9D18-3DAB27F8433B}.Release|Any CPU.ActiveCfg = Release|Any CPU {7E9A69E5-F71C-4096-9D18-3DAB27F8433B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7E9A69E5-F71C-4096-9D18-3DAB27F8433B}.Release|Any CPU.Build.0 = Release|Any CPU {7E9A69E5-F71C-4096-9D18-3DAB27F8433B}.Release|Any CPU.Build.0 = Release|Any CPU
{AE7FB7D4-CD57-4735-91BD-92EA54230CC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AE7FB7D4-CD57-4735-91BD-92EA54230CC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AE7FB7D4-CD57-4735-91BD-92EA54230CC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AE7FB7D4-CD57-4735-91BD-92EA54230CC5}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

@ -1,5 +1,4 @@
<h3>Card</h3> @typeparam TItem
@typeparam TItem
<div class="card text-center"> <div class="card text-center">
@CardHeader(Item) @CardHeader(Item)
@CardBody(Item) @CardBody(Item)

@ -0,0 +1,51 @@
<CascadingValue Value="@this">
<div class="container">
<div class="row">
<div class="col-6">
<div>Available items:</div>
<div>
<div class="css-grid">
@foreach (var item in Items)
{
<CraftingItem Item="item" NoDrop="true"/>
}
</div>
</div>
</div>
<div class="col-6">
<div>Recipe</div>
<div>
<div class="css-recipe">
<CraftingItem Index="0"/>
<CraftingItem Index="1"/>
<CraftingItem Index="2"/>
<CraftingItem Index="3"/>
<CraftingItem Index="4"/>
<CraftingItem Index="5"/>
<CraftingItem Index="6"/>
<CraftingItem Index="7"/>
<CraftingItem Index="8"/>
</div>
</div>
<div>Result</div>
<div>
<CraftingItem Item="RecipeResult"/>
</div>
</div>
<div class="col-12">
<div>Actions</div>
<div class="actions" id="actions">
</div>
</div>
</div>
</div>
</CascadingValue>

@ -0,0 +1,79 @@
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
namespace BlazorApp1.Components
{
public partial class Crafting
{
private Item _recipeResult;
public Crafting()
{
Actions = new ObservableCollection<CraftingAction>();
Actions.CollectionChanged += OnActionsCollectionChanged;
this.RecipeItems = new List<Item> { null, null, null, null, null, null, null, null, null };
}
public ObservableCollection<CraftingAction> Actions { get; set; }
public Item CurrentDragItem { get; set; }
[Parameter]
public List<Item> Items { get; set; }
public List<Item> RecipeItems { get; set; }
public Item RecipeResult
{
get => this._recipeResult;
set
{
if (this._recipeResult == value)
{
return;
}
this._recipeResult = value;
this.StateHasChanged();
}
}
[Parameter]
public List<CraftingRecipe> Recipes { get; set; }
/// <summary>
/// Gets or sets the java script runtime.
/// </summary>
[Inject]
internal IJSRuntime JavaScriptRuntime { get; set; }
public void CheckRecipe()
{
RecipeResult = null;
// Get the current model
var currentModel = string.Join("|", this.RecipeItems.Select(s => s != null ? s.Name : string.Empty));
this.Actions.Add(new CraftingAction { Action = $"Items : {currentModel}" });
foreach (var craftingRecipe in Recipes)
{
// Get the recipe model
var recipeModel = string.Join("|", craftingRecipe.Have.SelectMany(s => s));
this.Actions.Add(new CraftingAction { Action = $"Recipe model : {recipeModel}" });
if (currentModel == recipeModel)
{
RecipeResult = craftingRecipe.Give;
}
}
}
private void OnActionsCollectionChanged(object? sender, NotifyCollectionChangedEventArgs e)
{
JavaScriptRuntime.InvokeVoidAsync("Crafting.AddActions", e.NewItems);
}
}
}

@ -0,0 +1,19 @@
.css-grid {
grid-template-columns: repeat(4,minmax(0,1fr));
gap: 10px;
display: grid;
width: 286px;
}
.css-recipe {
grid-template-columns: repeat(3,minmax(0,1fr));
gap: 10px;
display: grid;
width: 212px;
}
.actions {
border: 1px solid black;
height: 250px;
overflow: scroll;
}

@ -0,0 +1,16 @@
window.Crafting =
{
AddActions: function (data) {
data.forEach(element => {
var div = document.createElement('div');
div.innerHTML = 'Action: ' + element.action + ' - Index: ' + element.index;
if (element.item) {
div.innerHTML += ' - Item Name: ' + element.item.name;
}
document.getElementById('actions').appendChild(div);
});
}
}

@ -0,0 +1,9 @@
namespace BlazorApp1.Components
{
public class CraftingAction
{
public string Action { get; set; }
public int Index { get; set; }
public Item Item { get; set; }
}
}

@ -0,0 +1,14 @@
<div
class="item"
ondragover="event.preventDefault();"
draggable="true"
@ondragstart="@OnDragStart"
@ondrop="@OnDrop"
@ondragenter="@OnDragEnter"
@ondragleave="@OnDragLeave">
@if (Item != null)
{
@Item.DisplayName
}
</div>

@ -0,0 +1,62 @@
using Microsoft.AspNetCore.Components;
namespace BlazorApp1.Components
{
public partial class CraftingItem
{
[Parameter]
public int Index { get; set; }
[Parameter]
public Item Item { get; set; }
[Parameter]
public bool NoDrop { get; set; }
[CascadingParameter]
public Crafting Parent { get; set; }
internal void OnDragEnter()
{
if (NoDrop)
{
return;
}
Parent.Actions.Add(new CraftingAction { Action = "Drag Enter", Item = this.Item, Index = this.Index });
}
internal void OnDragLeave()
{
if (NoDrop)
{
return;
}
Parent.Actions.Add(new CraftingAction { Action = "Drag Leave", Item = this.Item, Index = this.Index });
}
internal void OnDrop()
{
if (NoDrop)
{
return;
}
this.Item = Parent.CurrentDragItem;
Parent.RecipeItems[this.Index] = this.Item;
Parent.Actions.Add(new CraftingAction { Action = "Drop", Item = this.Item, Index = this.Index });
// Check recipe
Parent.CheckRecipe();
}
private void OnDragStart()
{
Parent.CurrentDragItem = this.Item;
Parent.Actions.Add(new CraftingAction { Action = "Drag Start", Item = this.Item, Index = this.Index });
}
}
}

@ -0,0 +1,6 @@
.item {
width: 64px;
height: 64px;
border: 1px solid;
overflow: hidden;
}

@ -0,0 +1,8 @@
namespace BlazorApp1.Components
{
public class CraftingRecipe
{
public Item Give { get; set; }
public List<List<string>> Have { get; set; }
}
}

@ -0,0 +1,10 @@
@typeparam TItem
<div>
@if ((Items?.Count ?? 0) != 0)
{
@foreach (var item in Items)
{
@ShowTemplate(item);
}
}
</div>

@ -0,0 +1,13 @@
using Microsoft.AspNetCore.Components;
namespace BlazorApp1.Components
{
public partial class ShowItems<TItem>
{
[Parameter]
public List<TItem> Items { get; set; }
[Parameter]
public RenderFragment<TItem> ShowTemplate { get; set; }
}
}

@ -9,4 +9,5 @@
public List<string> RepairWith { get; set; } public List<string> RepairWith { get; set; }
public DateTime CreatedDate { get; set; } public DateTime CreatedDate { get; set; }
public DateTime? UpdatedDate { get; set; } public DateTime? UpdatedDate { get; set; }
public string ImageBase64 { get; set; }
} }

@ -1,6 +1,6 @@
@page "/" @page "/"
@using System.Globalization @using System.Globalization
@using Blazorise @using BlazorApp1.Components
<PageTitle>Index</PageTitle> <PageTitle>Index</PageTitle>
@ -14,21 +14,51 @@ Welcome to your new app.
<b>CurrentCulture</b>: @CultureInfo.CurrentCulture <b>CurrentCulture</b>: @CultureInfo.CurrentCulture
</p> </p>
<Card Item="CakeItem"> <!--<Card Item="CakeItem" Context="cakeContext">
<CardHeader> <CardHeader>
<div class="card-header"> <div class="card-header">
Cake Token Number - @context.Id Cake Token Number - @cakeContext.Id
</div> </div>
</CardHeader> </CardHeader>
<CardBody> <CardBody>
<div class="card-body"> <div class="card-body">
<div>@context.Name</div> <div>@cakeContext.Name</div>
<div>$ @context.Cost</div> <div>$ @cakeContext.Cost</div>
</div> </div>
</CardBody> </CardBody>
<CardFooter> </Card>
<div class="card-footer text-muted">
Click Here <Card Item="CakeItem">
<CardHeader Context="headContext">
<div class="card-header">
Cake Token Number - @headContext.Id
</div> </div>
</CardFooter> </CardHeader>
</Card> <CardBody Context="bodyContext">
<div class="card-body">
<div>@bodyContext.Name</div>
<div>$ @bodyContext.Cost</div>
</div>
</CardBody>
</Card>
<ShowItems Items="Cakes" >
<ShowTemplate Context="CakeContext">
<div class="card text-center">
<div class="card-header">
Cake Token Id - @CakeContext.Id
</div>
<div class="card-body">
<h5 class="card-title">@CakeContext.Name</h5>
<p class="card-text">Price $@CakeContext.Cost</p>
</div>
<div class="card-footer text-muted">
Click Here
</div>
</div>
</ShowTemplate>
</ShowItems>-->
<div>
<Crafting Items="Items" Recipes="Recipes" />
</div>

@ -1,4 +1,7 @@
using BlazorApp1.Models; using BlazorApp1.Components;
using BlazorApp1.Models;
using BlazorApp1.Sevices;
using Microsoft.AspNetCore.Components;
namespace BlazorApp1.Pages namespace BlazorApp1.Pages
{ {
@ -10,5 +13,49 @@ namespace BlazorApp1.Pages
Name = "Black Forest", Name = "Black Forest",
Cost = 50 Cost = 50
}; };
/*public List<Cake> Cakes { get; set; }
protected override Task OnAfterRenderAsync(bool firstRender)
{
LoadCakes();
StateHasChanged();
return base.OnAfterRenderAsync(firstRender);
}
public void LoadCakes()
{
Cakes = new List<Cake>
{
// items hidden for display purpose
new Cake
{
Id = 1,
Name = "Red Velvet",
Cost = 60
},
};
}*/
[Inject]
public IDataService DataService { get; set; }
public List<Item> Items { get; set; } = new List<Item>();
private List<CraftingRecipe> Recipes { get; set; } = new List<CraftingRecipe>();
protected override async Task OnAfterRenderAsync(bool firstRender)
{
base.OnAfterRenderAsync(firstRender);
if (!firstRender)
{
return;
}
Items = await DataService.List(0, await DataService.Count());
Recipes = await DataService.GetRecipes();
StateHasChanged();
}
} }
} }

@ -29,6 +29,9 @@
<script src="_framework/blazor.server.js"></script> <script src="_framework/blazor.server.js"></script>
<script src="_content/Blazored.Modal/blazored.modal.js"></script> <script src="_content/Blazored.Modal/blazored.modal.js"></script>
<script src="Components/Crafting.razor.js"></script>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.4/css/all.css">

@ -19,8 +19,7 @@ builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor(); builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>(); builder.Services.AddSingleton<WeatherForecastService>();
builder.Services.AddScoped<IDataService, DataApiService>();
builder.Services.AddScoped<IDataService, DataLocalService>();
builder.Services.AddHttpClient(); builder.Services.AddHttpClient();

@ -0,0 +1,59 @@
using BlazorApp1.Components;
using BlazorApp1.Factories;
using BlazorApp1.Models;
namespace BlazorApp1.Sevices
{
public class DataApiService : IDataService
{
private readonly HttpClient _http;
public DataApiService(
HttpClient http)
{
_http = http;
}
public async Task Add(ItemModel model)
{
// Get the item
var item = ItemFactory.Create(model);
// Save the data
await _http.PostAsJsonAsync("https://localhost:7234/api/Crafting/", item);
}
public async Task<int> Count()
{
return await _http.GetFromJsonAsync<int>("https://localhost:7234/api/Crafting/count");
}
public async Task<List<Item>> List(int currentPage, int pageSize)
{
return await _http.GetFromJsonAsync<List<Item>>($"https://localhost:7234/api/Crafting/?currentPage={currentPage}&pageSize={pageSize}");
}
public async Task<Item> GetById(int id)
{
return await _http.GetFromJsonAsync<Item>($"https://localhost:7234/api/Crafting/{id}");
}
public async Task Update(int id, ItemModel model)
{
// Get the item
var item = ItemFactory.Create(model);
await _http.PutAsJsonAsync($"https://localhost:7234/api/Crafting/{id}", item);
}
public async Task Delete(int id)
{
await _http.DeleteAsync($"https://localhost:7234/api/Crafting/{id}");
}
public async Task<List<CraftingRecipe>> GetRecipes()
{
return await _http.GetFromJsonAsync<List<CraftingRecipe>>("https://localhost:7234/api/Crafting/recipe");
}
}
}

@ -1,4 +1,5 @@
using BlazorApp1.Factories; using BlazorApp1.Components;
using BlazorApp1.Factories;
using BlazorApp1.Models; using BlazorApp1.Models;
using Blazored.LocalStorage; using Blazored.LocalStorage;
using Microsoft.AspNetCore.Components; using Microsoft.AspNetCore.Components;
@ -56,6 +57,17 @@ namespace BlazorApp1.Sevices
public async Task<int> Count() public async Task<int> Count()
{ {
// Load data from the local storage
var currentData = await _localStorage.GetItemAsync<Item[]>("data");
// Check if data exist in the local storage
if (currentData == null)
{
// this code add in the local storage the fake data
var originalData = await _http.GetFromJsonAsync<Item[]>($"{_navigationManager.BaseUri}fake-data.json");
await _localStorage.SetItemAsync("data", originalData);
}
return (await _localStorage.GetItemAsync<Item[]>("data")).Length; return (await _localStorage.GetItemAsync<Item[]>("data")).Length;
} }
@ -162,5 +174,24 @@ namespace BlazorApp1.Sevices
// Save the data // Save the data
await _localStorage.SetItemAsync("data", currentData); await _localStorage.SetItemAsync("data", currentData);
} }
public Task<List<CraftingRecipe>> GetRecipes()
{
var items = new List<CraftingRecipe>
{
new CraftingRecipe
{
Give = new Item { DisplayName = "Extragen", Name = "extragen" },
Have = new List<List<string>>
{
new List<string> { "chorizon", "chorizon", "chorizon" },
new List<string> { "chorizon", null, "chorizon" },
new List<string> { "chorizon", "chorizon", "chorizon" }
}
}
};
return Task.FromResult(items);
}
} }
} }

@ -1,4 +1,5 @@
using BlazorApp1.Models; using BlazorApp1.Components;
using BlazorApp1.Models;
namespace BlazorApp1.Sevices namespace BlazorApp1.Sevices
{ {
@ -15,5 +16,7 @@ namespace BlazorApp1.Sevices
Task Update(int id, ItemModel model); Task Update(int id, ItemModel model);
Task Delete(int id); Task Delete(int id);
Task<List<CraftingRecipe>> GetRecipes();
} }
} }

File diff suppressed because one or more lines are too long

@ -1,17 +1,17 @@
{ {
"format": 1, "format": 1,
"restore": { "restore": {
"C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj": {} "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj": {}
}, },
"projects": { "projects": {
"C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj": { "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj": {
"version": "1.0.0", "version": "1.0.0",
"restore": { "restore": {
"projectUniqueName": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj", "projectUniqueName": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj",
"projectName": "BlazorApp1", "projectName": "BlazorApp1",
"projectPath": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj", "projectPath": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj",
"packagesPath": "C:\\Users\\babaverel\\.nuget\\packages\\", "packagesPath": "C:\\Users\\babaverel\\.nuget\\packages\\",
"outputPath": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\obj\\", "outputPath": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\obj\\",
"projectStyle": "PackageReference", "projectStyle": "PackageReference",
"fallbackFolders": [ "fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"

@ -8,117 +8,129 @@ build_property.PlatformNeutralAssembly =
build_property._SupportedPlatformList = Linux,macOS,Windows build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = BlazorApp1 build_property.RootNamespace = BlazorApp1
build_property.RootNamespace = BlazorApp1 build_property.RootNamespace = BlazorApp1
build_property.ProjectDir = C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\ build_property.ProjectDir = C:\Users\babaverel\source\repos\Blazor\BlazorApp1\
build_property.RazorLangVersion = 6.0 build_property.RazorLangVersion = 6.0
build_property.SupportLocalizedComponentNames = build_property.SupportLocalizedComponentNames =
build_property.GenerateRazorMetadataSourceChecksumAttributes = build_property.GenerateRazorMetadataSourceChecksumAttributes =
build_property.MSBuildProjectDirectory = C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1 build_property.MSBuildProjectDirectory = C:\Users\babaverel\source\repos\Blazor\BlazorApp1
build_property._RazorSourceGeneratorDebug = build_property._RazorSourceGeneratorDebug =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/App.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/App.razor]
build_metadata.AdditionalFiles.TargetPath = QXBwLnJhem9y build_metadata.AdditionalFiles.TargetPath = QXBwLnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Components/Card.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Components/Card.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xDYXJkLnJhem9y build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xDYXJkLnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Modals/DeleteConfirmation.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Components/ShowItems.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xTaG93SXRlbXMucmF6b3I=
build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Modals/DeleteConfirmation.razor]
build_metadata.AdditionalFiles.TargetPath = TW9kYWxzXERlbGV0ZUNvbmZpcm1hdGlvbi5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = TW9kYWxzXERlbGV0ZUNvbmZpcm1hdGlvbi5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/Add.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/Add.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQWRkLnJhem9y build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQWRkLnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/Admin/Admin.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/Admin/Admin.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQWRtaW5cQWRtaW4ucmF6b3I= build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQWRtaW5cQWRtaW4ucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/Admin/_Imports.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/Admin/_Imports.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQWRtaW5cX0ltcG9ydHMucmF6b3I= build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQWRtaW5cX0ltcG9ydHMucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/Counter.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/Counter.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQ291bnRlci5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcQ291bnRlci5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/Edit.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/Edit.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcRWRpdC5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcRWRpdC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/FetchData.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/FetchData.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcRmV0Y2hEYXRhLnJhem9y build_metadata.AdditionalFiles.TargetPath = UGFnZXNcRmV0Y2hEYXRhLnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/Index.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/Index.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcSW5kZXgucmF6b3I= build_metadata.AdditionalFiles.TargetPath = UGFnZXNcSW5kZXgucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/List.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/List.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTGlzdC5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcTGlzdC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/ParameterParent.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/ParameterParent.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUGFyYW1ldGVyUGFyZW50LnJhem9y build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUGFyYW1ldGVyUGFyZW50LnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/ParameterParent2.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/ParameterParent2.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUGFyYW1ldGVyUGFyZW50Mi5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUGFyYW1ldGVyUGFyZW50Mi5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/ParameterParent3.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/ParameterParent3.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUGFyYW1ldGVyUGFyZW50My5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUGFyYW1ldGVyUGFyZW50My5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/RouteParameter.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/RouteParameter.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUm91dGVQYXJhbWV0ZXIucmF6b3I= build_metadata.AdditionalFiles.TargetPath = UGFnZXNcUm91dGVQYXJhbWV0ZXIucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/User.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/User.razor]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcVXNlci5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = UGFnZXNcVXNlci5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Shared/AdminLayout.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Shared/AdminLayout.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXEFkbWluTGF5b3V0LnJhem9y build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXEFkbWluTGF5b3V0LnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Shared/CultureSelector.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Shared/CultureSelector.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXEN1bHR1cmVTZWxlY3Rvci5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXEN1bHR1cmVTZWxlY3Rvci5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Shared/ParameterChild.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Shared/ParameterChild.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFBhcmFtZXRlckNoaWxkLnJhem9y build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFBhcmFtZXRlckNoaWxkLnJhem9y
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Shared/SurveyPrompt.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Shared/SurveyPrompt.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFN1cnZleVByb21wdC5yYXpvcg== build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFN1cnZleVByb21wdC5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Shared/TestLayout.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Shared/TestLayout.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFRlc3RMYXlvdXQucmF6b3I= build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXFRlc3RMYXlvdXQucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/_Imports.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/_Imports.razor]
build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I= build_metadata.AdditionalFiles.TargetPath = X0ltcG9ydHMucmF6b3I=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Shared/MainLayout.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Components/Crafting.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xDcmFmdGluZy5yYXpvcg==
build_metadata.AdditionalFiles.CssScope = b-tdt2ebyjkm
[C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Components/CraftingItem.razor]
build_metadata.AdditionalFiles.TargetPath = Q29tcG9uZW50c1xDcmFmdGluZ0l0ZW0ucmF6b3I=
build_metadata.AdditionalFiles.CssScope = b-prsi1ksbyr
[C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Shared/MainLayout.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXE1haW5MYXlvdXQucmF6b3I= build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXE1haW5MYXlvdXQucmF6b3I=
build_metadata.AdditionalFiles.CssScope = b-45rkf8v3vv build_metadata.AdditionalFiles.CssScope = b-45rkf8v3vv
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Shared/NavMenu.razor] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Shared/NavMenu.razor]
build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXE5hdk1lbnUucmF6b3I= build_metadata.AdditionalFiles.TargetPath = U2hhcmVkXE5hdk1lbnUucmF6b3I=
build_metadata.AdditionalFiles.CssScope = b-b5wscdn8ts build_metadata.AdditionalFiles.CssScope = b-b5wscdn8ts
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/Error.cshtml] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/Error.cshtml]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcRXJyb3IuY3NodG1s build_metadata.AdditionalFiles.TargetPath = UGFnZXNcRXJyb3IuY3NodG1s
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/_Host.cshtml] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/_Host.cshtml]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcX0hvc3QuY3NodG1s build_metadata.AdditionalFiles.TargetPath = UGFnZXNcX0hvc3QuY3NodG1s
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =
[C:/Users/babaverel/Source/Repos/Blazor/BlazorApp1/Pages/_Layout.cshtml] [C:/Users/babaverel/source/repos/Blazor/BlazorApp1/Pages/_Layout.cshtml]
build_metadata.AdditionalFiles.TargetPath = UGFnZXNcX0xheW91dC5jc2h0bWw= build_metadata.AdditionalFiles.TargetPath = UGFnZXNcX0xheW91dC5jc2h0bWw=
build_metadata.AdditionalFiles.CssScope = build_metadata.AdditionalFiles.CssScope =

@ -1 +1 @@
8c43b398431f7058bcac2f6f7fba98d3d2236ebb 660671749a3dae85f536e2de89d0c6b6c9e59103

@ -51,3 +51,5 @@ C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\obj\Debug\net6.0\BlazorApp1.Re
C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\obj\Debug\net6.0\BlazorApp1.Resources.Pages.List.fr-FR.resources C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\obj\Debug\net6.0\BlazorApp1.Resources.Pages.List.fr-FR.resources
C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\obj\Debug\net6.0\BlazorApp1.csproj.GenerateResource.cache C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\obj\Debug\net6.0\BlazorApp1.csproj.GenerateResource.cache
C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\obj\Debug\net6.0\fr-FR\BlazorApp1.resources.dll C:\Users\babaverel\Source\Repos\Blazor\BlazorApp1\obj\Debug\net6.0\fr-FR\BlazorApp1.resources.dll
C:\Users\babaverel\source\repos\Blazor\BlazorApp1\obj\Debug\net6.0\scopedcss\Components\Crafting.razor.rz.scp.css
C:\Users\babaverel\source\repos\Blazor\BlazorApp1\obj\Debug\net6.0\scopedcss\Components\CraftingItem.razor.rz.scp.css

@ -1 +1 @@
53ddcef7a5e4c7c711e7884088e2c424cc584915 edfff131de8135942e5a4a993816fd220ce19436

File diff suppressed because one or more lines are too long

@ -0,0 +1,19 @@
.css-grid[b-tdt2ebyjkm] {
grid-template-columns: repeat(4,minmax(0,1fr));
gap: 10px;
display: grid;
width: 286px;
}
.css-recipe[b-tdt2ebyjkm] {
grid-template-columns: repeat(3,minmax(0,1fr));
gap: 10px;
display: grid;
width: 212px;
}
.actions[b-tdt2ebyjkm] {
border: 1px solid black;
height: 250px;
overflow: scroll;
}

@ -0,0 +1,6 @@
.item[b-prsi1ksbyr] {
width: 64px;
height: 64px;
border: 1px solid;
overflow: hidden;
}

@ -1,5 +1,32 @@
@import '_content/Blazored.Modal/Blazored.Modal.bundle.scp.css'; @import '_content/Blazored.Modal/Blazored.Modal.bundle.scp.css';
/* _content/BlazorApp1/Components/Crafting.razor.rz.scp.css */
.css-grid[b-tdt2ebyjkm] {
grid-template-columns: repeat(4,minmax(0,1fr));
gap: 10px;
display: grid;
width: 286px;
}
.css-recipe[b-tdt2ebyjkm] {
grid-template-columns: repeat(3,minmax(0,1fr));
gap: 10px;
display: grid;
width: 212px;
}
.actions[b-tdt2ebyjkm] {
border: 1px solid black;
height: 250px;
overflow: scroll;
}
/* _content/BlazorApp1/Components/CraftingItem.razor.rz.scp.css */
.item[b-prsi1ksbyr] {
width: 64px;
height: 64px;
border: 1px solid;
overflow: hidden;
}
/* _content/BlazorApp1/Shared/MainLayout.razor.rz.scp.css */ /* _content/BlazorApp1/Shared/MainLayout.razor.rz.scp.css */
.page[b-45rkf8v3vv] { .page[b-45rkf8v3vv] {
position: relative; position: relative;

@ -1,3 +1,30 @@
/* _content/BlazorApp1/Components/Crafting.razor.rz.scp.css */
.css-grid[b-tdt2ebyjkm] {
grid-template-columns: repeat(4,minmax(0,1fr));
gap: 10px;
display: grid;
width: 286px;
}
.css-recipe[b-tdt2ebyjkm] {
grid-template-columns: repeat(3,minmax(0,1fr));
gap: 10px;
display: grid;
width: 212px;
}
.actions[b-tdt2ebyjkm] {
border: 1px solid black;
height: 250px;
overflow: scroll;
}
/* _content/BlazorApp1/Components/CraftingItem.razor.rz.scp.css */
.item[b-prsi1ksbyr] {
width: 64px;
height: 64px;
border: 1px solid;
overflow: hidden;
}
/* _content/BlazorApp1/Shared/MainLayout.razor.rz.scp.css */ /* _content/BlazorApp1/Shared/MainLayout.razor.rz.scp.css */
.page[b-45rkf8v3vv] { .page[b-45rkf8v3vv] {
position: relative; position: relative;

@ -1,6 +1,6 @@
{ {
"Version": 1, "Version": 1,
"Hash": "px1fqB7+MVe76miwqr7Ba78iX1ykUq9wsSY9EHz30/Q=", "Hash": "34WRv6Z9afmr5F42/DFDOFkwnZtDWnzwiO6MKxVQffY=",
"Source": "BlazorApp1", "Source": "BlazorApp1",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"Mode": "Default", "Mode": "Default",
@ -10,7 +10,7 @@
{ {
"Name": "BlazorApp1\\wwwroot", "Name": "BlazorApp1\\wwwroot",
"Source": "BlazorApp1", "Source": "BlazorApp1",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"Pattern": "**" "Pattern": "**"
} }
@ -680,10 +680,27 @@
"OriginalItemSpec": "C:\\Users\\babaverel\\.nuget\\packages\\blazorise\\1.1.3.1\\staticwebassets\\vendors\\Pickr.js" "OriginalItemSpec": "C:\\Users\\babaverel\\.nuget\\packages\\blazorise\\1.1.3.1\\staticwebassets\\vendors\\Pickr.js"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\bundle\\BlazorApp1.styles.css", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\Components\\Crafting.razor.js",
"SourceId": "BlazorApp1",
"SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\",
"BasePath": "_content/BlazorApp1",
"RelativePath": "Components/Crafting.razor.js",
"AssetKind": "All",
"AssetMode": "All",
"AssetRole": "Primary",
"RelatedAsset": "",
"AssetTraitName": "",
"AssetTraitValue": "",
"CopyToOutputDirectory": "Never",
"CopyToPublishDirectory": "PreserveNewest",
"OriginalItemSpec": "Components\\Crafting.razor.js"
},
{
"Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\bundle\\BlazorApp1.styles.css",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Computed", "SourceType": "Computed",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\bundle\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\bundle\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "BlazorApp1.styles.css", "RelativePath": "BlazorApp1.styles.css",
"AssetKind": "All", "AssetKind": "All",
@ -694,13 +711,13 @@
"AssetTraitValue": "ApplicationBundle", "AssetTraitValue": "ApplicationBundle",
"CopyToOutputDirectory": "Never", "CopyToOutputDirectory": "Never",
"CopyToPublishDirectory": "PreserveNewest", "CopyToPublishDirectory": "PreserveNewest",
"OriginalItemSpec": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\bundle\\BlazorApp1.styles.css" "OriginalItemSpec": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\bundle\\BlazorApp1.styles.css"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\projectbundle\\BlazorApp1.bundle.scp.css", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\projectbundle\\BlazorApp1.bundle.scp.css",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Computed", "SourceType": "Computed",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\projectbundle\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\projectbundle\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "BlazorApp1.bundle.scp.css", "RelativePath": "BlazorApp1.bundle.scp.css",
"AssetKind": "All", "AssetKind": "All",
@ -711,13 +728,13 @@
"AssetTraitValue": "ProjectBundle", "AssetTraitValue": "ProjectBundle",
"CopyToOutputDirectory": "Never", "CopyToOutputDirectory": "Never",
"CopyToPublishDirectory": "PreserveNewest", "CopyToPublishDirectory": "PreserveNewest",
"OriginalItemSpec": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\projectbundle\\BlazorApp1.bundle.scp.css" "OriginalItemSpec": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\obj\\Debug\\net6.0\\scopedcss\\projectbundle\\BlazorApp1.bundle.scp.css"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\bootstrap\\bootstrap.min.css", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\bootstrap\\bootstrap.min.css",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/bootstrap/bootstrap.min.css", "RelativePath": "css/bootstrap/bootstrap.min.css",
"AssetKind": "All", "AssetKind": "All",
@ -731,10 +748,10 @@
"OriginalItemSpec": "wwwroot\\css\\bootstrap\\bootstrap.min.css" "OriginalItemSpec": "wwwroot\\css\\bootstrap\\bootstrap.min.css"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\bootstrap\\bootstrap.min.css.map", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\bootstrap\\bootstrap.min.css.map",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/bootstrap/bootstrap.min.css.map", "RelativePath": "css/bootstrap/bootstrap.min.css.map",
"AssetKind": "All", "AssetKind": "All",
@ -748,10 +765,10 @@
"OriginalItemSpec": "wwwroot\\css\\bootstrap\\bootstrap.min.css.map" "OriginalItemSpec": "wwwroot\\css\\bootstrap\\bootstrap.min.css.map"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\css\\open-iconic-bootstrap.min.css", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\css\\open-iconic-bootstrap.min.css",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/font/css/open-iconic-bootstrap.min.css", "RelativePath": "css/open-iconic/font/css/open-iconic-bootstrap.min.css",
"AssetKind": "All", "AssetKind": "All",
@ -765,10 +782,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\css\\open-iconic-bootstrap.min.css" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\css\\open-iconic-bootstrap.min.css"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.eot", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.eot",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/font/fonts/open-iconic.eot", "RelativePath": "css/open-iconic/font/fonts/open-iconic.eot",
"AssetKind": "All", "AssetKind": "All",
@ -782,10 +799,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.eot" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.eot"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.otf", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.otf",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/font/fonts/open-iconic.otf", "RelativePath": "css/open-iconic/font/fonts/open-iconic.otf",
"AssetKind": "All", "AssetKind": "All",
@ -799,10 +816,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.otf" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.otf"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.svg", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.svg",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/font/fonts/open-iconic.svg", "RelativePath": "css/open-iconic/font/fonts/open-iconic.svg",
"AssetKind": "All", "AssetKind": "All",
@ -816,10 +833,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.svg" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.svg"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.ttf", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.ttf",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/font/fonts/open-iconic.ttf", "RelativePath": "css/open-iconic/font/fonts/open-iconic.ttf",
"AssetKind": "All", "AssetKind": "All",
@ -833,10 +850,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.ttf" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.ttf"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.woff", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.woff",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/font/fonts/open-iconic.woff", "RelativePath": "css/open-iconic/font/fonts/open-iconic.woff",
"AssetKind": "All", "AssetKind": "All",
@ -850,10 +867,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.woff" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\font\\fonts\\open-iconic.woff"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\FONT-LICENSE", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\FONT-LICENSE",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/FONT-LICENSE", "RelativePath": "css/open-iconic/FONT-LICENSE",
"AssetKind": "All", "AssetKind": "All",
@ -867,10 +884,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\FONT-LICENSE" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\FONT-LICENSE"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\ICON-LICENSE", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\ICON-LICENSE",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/ICON-LICENSE", "RelativePath": "css/open-iconic/ICON-LICENSE",
"AssetKind": "All", "AssetKind": "All",
@ -884,10 +901,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\ICON-LICENSE" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\ICON-LICENSE"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\README.md", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\open-iconic\\README.md",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/open-iconic/README.md", "RelativePath": "css/open-iconic/README.md",
"AssetKind": "All", "AssetKind": "All",
@ -901,10 +918,10 @@
"OriginalItemSpec": "wwwroot\\css\\open-iconic\\README.md" "OriginalItemSpec": "wwwroot\\css\\open-iconic\\README.md"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\css\\site.css", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\css\\site.css",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "css/site.css", "RelativePath": "css/site.css",
"AssetKind": "All", "AssetKind": "All",
@ -918,10 +935,10 @@
"OriginalItemSpec": "wwwroot\\css\\site.css" "OriginalItemSpec": "wwwroot\\css\\site.css"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\fake-data.json", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\fake-data.json",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "fake-data.json", "RelativePath": "fake-data.json",
"AssetKind": "All", "AssetKind": "All",
@ -935,10 +952,10 @@
"OriginalItemSpec": "wwwroot\\fake-data.json" "OriginalItemSpec": "wwwroot\\fake-data.json"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\favicon.ico", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\favicon.ico",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "favicon.ico", "RelativePath": "favicon.ico",
"AssetKind": "All", "AssetKind": "All",
@ -952,10 +969,10 @@
"OriginalItemSpec": "wwwroot\\favicon.ico" "OriginalItemSpec": "wwwroot\\favicon.ico"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\images\\default.png", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\images\\default.png",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "images/default.png", "RelativePath": "images/default.png",
"AssetKind": "All", "AssetKind": "All",
@ -969,10 +986,10 @@
"OriginalItemSpec": "wwwroot\\images\\default.png" "OriginalItemSpec": "wwwroot\\images\\default.png"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\images\\fezfez.png", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\images\\fezfez.png",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "images/fezfez.png", "RelativePath": "images/fezfez.png",
"AssetKind": "All", "AssetKind": "All",
@ -986,10 +1003,10 @@
"OriginalItemSpec": "wwwroot\\images\\fezfez.png" "OriginalItemSpec": "wwwroot\\images\\fezfez.png"
}, },
{ {
"Identity": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\images\\lelel.png", "Identity": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\images\\lelel.png",
"SourceId": "BlazorApp1", "SourceId": "BlazorApp1",
"SourceType": "Discovered", "SourceType": "Discovered",
"ContentRoot": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\wwwroot\\", "ContentRoot": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\wwwroot\\",
"BasePath": "_content/BlazorApp1", "BasePath": "_content/BlazorApp1",
"RelativePath": "images/lelel.png", "RelativePath": "images/lelel.png",
"AssetKind": "All", "AssetKind": "All",

File diff suppressed because one or more lines are too long

@ -1,8 +1,8 @@
{ {
"version": 2, "version": 2,
"dgSpecHash": "CyVNETzvrilyIVWUkEXKs/yJGlik+NMUqtPn8xgBNFkwG4umYJ8SY5VxtR1eHN5WBpq5mM7LgsB8oPXU2I4vCw==", "dgSpecHash": "FYayu1eUirjUplxuBH4BjeGJugpVXd8p/2lztaYqvxC5jl4L/nEbqJaV30AbeCjysE8MJIYDFFClPZXl1QfQlA==",
"success": true, "success": true,
"projectFilePath": "C:\\Users\\babaverel\\Source\\Repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj", "projectFilePath": "C:\\Users\\babaverel\\source\\repos\\Blazor\\BlazorApp1\\BlazorApp1.csproj",
"expectedPackageFiles": [ "expectedPackageFiles": [
"C:\\Users\\babaverel\\.nuget\\packages\\blazored.localstorage\\4.3.0\\blazored.localstorage.4.3.0.nupkg.sha512", "C:\\Users\\babaverel\\.nuget\\packages\\blazored.localstorage\\4.3.0\\blazored.localstorage.4.3.0.nupkg.sha512",
"C:\\Users\\babaverel\\.nuget\\packages\\blazored.modal\\7.1.0\\blazored.modal.7.1.0.nupkg.sha512", "C:\\Users\\babaverel\\.nuget\\packages\\blazored.modal\\7.1.0\\blazored.modal.7.1.0.nupkg.sha512",

@ -65,3 +65,14 @@
2.0 2.0
2.0 2.0
2.0 2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0
2.0

@ -0,0 +1,364 @@
// --------------------------------------------------------------------------------------------------------------------
// <copyright file="CraftingController.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 crafting controller.
/// </summary>
[ApiController]
[Route("api/[controller]")]
public class CraftingController : ControllerBase
{
/// <summary>
/// The json serializer options.
/// </summary>
private readonly JsonSerializerOptions _jsonSerializerOptions = new()
{
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
WriteIndented = true,
DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault
};
/// <summary>
/// Adds the specified item.
/// </summary>
/// <param name="item">The item.</param>
/// <returns>The async task.</returns>
[HttpPost]
[Route("")]
public Task Add(Item item)
{
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.json"), _jsonSerializerOptions);
if (data == null)
{
throw new Exception("Unable to get the items.");
}
data.Add(item);
System.IO.File.WriteAllText("Data/items.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
return Task.CompletedTask;
}
/// <summary>
/// Count the number of items.
/// </summary>
/// <returns>The number of items.</returns>
[HttpGet]
[Route("count")]
public Task<int> Count()
{
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.json"), _jsonSerializerOptions);
if (data == null)
{
throw new Exception("Unable to get the items.");
}
return Task.FromResult(data.Count);
}
/// <summary>
/// Deletes the specified identifier.
/// </summary>
/// <param name="id">The identifier.</param>
/// <returns>The async task.</returns>
[HttpDelete]
[Route("{id}")]
public Task Delete(int id)
{
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.json"), _jsonSerializerOptions);
if (data == null)
{
throw new Exception("Unable to get the items.");
}
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/items.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
return Task.CompletedTask;
}
/// <summary>
/// Gets the item by identifier.
/// </summary>
/// <param name="id">The identifier.</param>
/// <returns>The item.</returns>
[HttpGet]
[Route("{id}")]
public Task<Item> GetById(int id)
{
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.json"), _jsonSerializerOptions);
if (data == null)
{
throw new Exception("Unable to get the items.");
}
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);
}
/// <summary>
/// Gets the recipes.
/// </summary>
/// <returns>The recipes.</returns>
[HttpGet]
[Route("recipe")]
public Task<List<Recipe>> GetRecipe()
{
if (!System.IO.File.Exists("Data/convert-recipes.json"))
{
ResetRecipes();
}
var data = JsonSerializer.Deserialize<List<Recipe>>(System.IO.File.ReadAllText("Data/convert-recipes.json"), _jsonSerializerOptions);
if (data == null)
{
throw new Exception("Unable to get the recipes.");
}
return Task.FromResult(data);
}
/// <summary>
/// Get the items with pagination.
/// </summary>
/// <param name="currentPage">The current page.</param>
/// <param name="pageSize">Size of the page.</param>
/// <returns>The items.</returns>
[HttpGet]
[Route("")]
public Task<List<Item>> List(int currentPage, int pageSize)
{
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.json"), _jsonSerializerOptions);
if (data == null)
{
throw new Exception("Unable to get the items.");
}
return Task.FromResult(data.Skip((currentPage - 1) * pageSize).Take(pageSize).ToList());
}
/// <summary>
/// Resets the items.
/// </summary>
/// <returns>The async task.</returns>
[HttpGet]
[Route("reset-items")]
public Task ResetItems()
{
if (!System.IO.File.Exists("Data/items.json"))
{
System.IO.File.Delete("Data/items.json");
}
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items-original.json"), _jsonSerializerOptions);
if (data == null)
{
throw new Exception("Unable to get the items.");
}
var defaultImage = Convert.ToBase64String(System.IO.File.ReadAllBytes("Images/default.png"));
foreach (var item in data)
{
var imageFilepath = defaultImage;
if (System.IO.File.Exists($"Images/{item.Name}.png"))
{
imageFilepath = Convert.ToBase64String(System.IO.File.ReadAllBytes($"Images/{item.Name}.png"));
}
item.ImageBase64 = imageFilepath;
}
System.IO.File.WriteAllText("Data/items.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
return Task.FromResult(data);
}
/// <summary>
/// Resets the recipes.
/// </summary>
/// <returns>The async task.</returns>
[HttpGet]
[Route("reset-recipes")]
public Task ResetRecipes()
{
if (!System.IO.File.Exists("Data/convert-recipes.json"))
{
System.IO.File.Delete("Data/convert-recipes.json");
}
ConvertRecipes();
return Task.CompletedTask;
}
/// <summary>
/// Updates the specified identifier.
/// </summary>
/// <param name="id">The identifier.</param>
/// <param name="item">The item.</param>
/// <returns>The async task.</returns>
[HttpPut]
[Route("{id}")]
public Task Update(int id, Item item)
{
var data = JsonSerializer.Deserialize<List<Item>>(System.IO.File.ReadAllText("Data/items.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 = item.Id;
itemOriginal.Name = item.Name;
itemOriginal.CreatedDate = item.CreatedDate;
itemOriginal.DisplayName = item.DisplayName;
itemOriginal.EnchantCategories = item.EnchantCategories;
itemOriginal.MaxDurability = item.MaxDurability;
itemOriginal.RepairWith = item.RepairWith;
itemOriginal.StackSize = item.StackSize;
itemOriginal.UpdatedDate = item.UpdatedDate;
System.IO.File.WriteAllText("Data/items.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
return Task.CompletedTask;
}
/// <summary>
/// Gets the name of the item.
/// </summary>
/// <param name="items">The items.</param>
/// <param name="inShape">The in shape.</param>
/// <param name="line">The line.</param>
/// <param name="row">The row.</param>
/// <returns>The name of the item.</returns>
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);
}
/// <summary>
/// Gets the name of the item.
/// </summary>
/// <param name="items">The items.</param>
/// <param name="id">The identifier.</param>
/// <returns>The name of the item.</returns>
private static string GetItemName(List<Item> items, long id)
{
var item = items.FirstOrDefault(w => w.Id == id);
return item?.Name;
}
/// <summary>
/// Converts the recipes.
/// </summary>
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));
}
}
}

@ -0,0 +1,143 @@
// --------------------------------------------------------------------------------------------------------------------
// <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(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.");
}
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}");
}
inventoryItem.ItemName = item.ItemName;
inventoryItem.Position = item.Position;
System.IO.File.WriteAllText("Data/inventory.json", JsonSerializer.Serialize(data, _jsonSerializerOptions));
return Task.CompletedTask;
}
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

@ -0,0 +1,22 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["Minecraft.Crafting.Api/Minecraft.Crafting.Api.csproj", "Minecraft.Crafting.Api/"]
RUN dotnet restore "Minecraft.Crafting.Api/Minecraft.Crafting.Api.csproj"
COPY . .
WORKDIR "/src/Minecraft.Crafting.Api"
RUN dotnet build "Minecraft.Crafting.Api.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Minecraft.Crafting.Api.csproj" -c Release -o /app/publish /p:UseAppHost=false
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Minecraft.Crafting.Api.dll"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save