diff --git a/Marechai/Areas/Admin/Controllers/ScreensByMachineController.cs b/Marechai/Areas/Admin/Controllers/ScreensByMachineController.cs deleted file mode 100644 index 5ead8bf2..00000000 --- a/Marechai/Areas/Admin/Controllers/ScreensByMachineController.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using Marechai.Areas.Admin.Models; -using Marechai.Database.Models; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Query; - -namespace Marechai.Areas.Admin.Controllers -{ - [Area("Admin"), Authorize] - public class ScreensByMachineController : Controller - { - readonly MarechaiContext _context; - - public ScreensByMachineController(MarechaiContext context) => _context = context; - - // GET: ScreensByMachine - public async Task Index() - { - IIncludableQueryable marechaiContext = - _context.ScreensByMachine.Include(s => s.Machine).Include(s => s.Screen); - - return View(await marechaiContext.Select(s => new ScreensByMachineViewModel - { - Id = s.Id, - Screen = s.Screen.NativeResolution != null - ? $"{s.Screen.Diagonal}\" {s.Screen.Type} with {s.Screen.NativeResolution}" - : $"{s.Screen.Diagonal}\" {s.Screen}", - Machine = $"{s.Machine.Company.Name} {s.Machine.Name}" - }).OrderBy(s => s.Machine).ThenBy(s => s.Screen).ToListAsync()); - } - - // GET: ScreensByMachine/Details/5 - public async Task Details(long? id) - { - if(id == null) - return NotFound(); - - ScreensByMachineViewModel screensByMachine = - await _context.ScreensByMachine.Include(s => s.Machine).Include(s => s.Screen). - Select(s => new ScreensByMachineViewModel - { - Id = s.Id, - Screen = s.Screen.NativeResolution != null - ? $"{s.Screen.Diagonal}\" {s.Screen.Type} with {s.Screen.NativeResolution}" - : $"{s.Screen.Diagonal}\" {s.Screen}", - Machine = $"{s.Machine.Company.Name} {s.Machine.Name}" - }).FirstOrDefaultAsync(m => m.Id == id); - - if(screensByMachine == null) - return NotFound(); - - return View(screensByMachine); - } - - // GET: ScreensByMachine/Create - public IActionResult Create() - { - ViewData["MachineId"] = new SelectList(_context.Machines.OrderBy(m => m.Company.Name).ThenBy(m => m.Name). - Select(m => new - { - m.Id, Name = $"{m.Company.Name} {m.Name}" - }), "Id", "Name"); - - ViewData["ScreenId"] = new SelectList(_context.Screens.Select(s => new - { - s.Id, - Name = s.NativeResolution != null ? $"{s.Diagonal}\" {s.Type} with {s.NativeResolution}" - : $"{s.Diagonal}\" {s.Type}" - }).OrderBy(s => s.Name), "Id", "Name"); - - return View(); - } - - // POST: ScreensByMachine/Create - // To protect from overposting attacks, please enable the specific properties you want to bind to, for - // more details see http://go.microsoft.com/fwlink/?LinkId=317598. - [HttpPost, ValidateAntiForgeryToken] - public async Task Create([Bind("ScreenId,MachineId,Id")] ScreensByMachine screensByMachine) - { - if(ModelState.IsValid) - { - _context.Add(screensByMachine); - await _context.SaveChangesAsync(); - - return RedirectToAction(nameof(Index)); - } - - ViewData["MachineId"] = new SelectList(_context.Machines.OrderBy(m => m.Company.Name).ThenBy(m => m.Name). - Select(m => new - { - m.Id, Name = $"{m.Company.Name} {m.Name}" - }), "Id", "Name", screensByMachine.MachineId); - - ViewData["ScreenId"] = new SelectList(_context.Screens.Select(s => new - { - s.Id, - Name = s.NativeResolution != null ? $"{s.Diagonal}\" {s.Type} with {s.NativeResolution}" - : $"{s.Diagonal}\" {s.Type}" - }).OrderBy(s => s.Name), "Id", "Name", screensByMachine.ScreenId); - - return View(screensByMachine); - } - - // GET: ScreensByMachine/Edit/5 - public async Task Edit(long? id) - { - if(id == null) - return NotFound(); - - ScreensByMachine screensByMachine = await _context.ScreensByMachine.FindAsync(id); - - if(screensByMachine == null) - return NotFound(); - - ViewData["MachineId"] = new SelectList(_context.Machines.OrderBy(m => m.Company.Name).ThenBy(m => m.Name). - Select(m => new - { - m.Id, Name = $"{m.Company.Name} {m.Name}" - }), "Id", "Name", screensByMachine.MachineId); - - ViewData["ScreenId"] = new SelectList(_context.Screens.Select(s => new - { - s.Id, - Name = s.NativeResolution != null ? $"{s.Diagonal}\" {s.Type} with {s.NativeResolution}" - : $"{s.Diagonal}\" {s.Type}" - }).OrderBy(s => s.Name), "Id", "Name", screensByMachine.ScreenId); - - return View(screensByMachine); - } - - // POST: ScreensByMachine/Edit/5 - // To protect from overposting attacks, please enable the specific properties you want to bind to, for - // more details see http://go.microsoft.com/fwlink/?LinkId=317598. - [HttpPost, ValidateAntiForgeryToken] - public async Task Edit( - long id, [Bind("ScreenId,MachineId,Id")] ScreensByMachine screensByMachine) - { - if(id != screensByMachine.Id) - return NotFound(); - - if(ModelState.IsValid) - { - try - { - _context.Update(screensByMachine); - await _context.SaveChangesAsync(); - } - catch(DbUpdateConcurrencyException) - { - if(!ScreensByMachineExists(screensByMachine.Id)) - return NotFound(); - - throw; - } - - return RedirectToAction(nameof(Index)); - } - - ViewData["MachineId"] = new SelectList(_context.Machines.OrderBy(m => m.Company.Name).ThenBy(m => m.Name). - Select(m => new - { - m.Id, Name = $"{m.Company.Name} {m.Name}" - }), "Id", "Name", screensByMachine.MachineId); - - ViewData["ScreenId"] = new SelectList(_context.Screens.Select(s => new - { - s.Id, - Name = s.NativeResolution != null ? $"{s.Diagonal}\" {s.Type} with {s.NativeResolution}" - : $"{s.Diagonal}\" {s.Type}" - }).OrderBy(s => s.Name), "Id", "Name", screensByMachine.ScreenId); - - return View(screensByMachine); - } - - // GET: ScreensByMachine/Delete/5 - public async Task Delete(long? id) - { - if(id == null) - return NotFound(); - - ScreensByMachineViewModel screensByMachine = - await _context.ScreensByMachine.Include(s => s.Machine).Include(s => s.Screen). - Select(s => new ScreensByMachineViewModel - { - Id = s.Id, - Screen = s.Screen.NativeResolution != null - ? $"{s.Screen.Diagonal}\" {s.Screen.Type} with {s.Screen.NativeResolution}" - : $"{s.Screen.Diagonal}\" {s.Screen}", - Machine = $"{s.Machine.Company.Name} {s.Machine.Name}" - }).FirstOrDefaultAsync(m => m.Id == id); - - if(screensByMachine == null) - return NotFound(); - - return View(screensByMachine); - } - - // POST: ScreensByMachine/Delete/5 - [HttpPost, ActionName("Delete"), ValidateAntiForgeryToken] - public async Task DeleteConfirmed(long id) - { - ScreensByMachine screensByMachine = await _context.ScreensByMachine.FindAsync(id); - _context.ScreensByMachine.Remove(screensByMachine); - await _context.SaveChangesAsync(); - - return RedirectToAction(nameof(Index)); - } - - bool ScreensByMachineExists(long id) => _context.ScreensByMachine.Any(e => e.Id == id); - - [AcceptVerbs("Get", "Post")] - public async Task VerifyUnique(int screenId, int machineId) => - await _context.ScreensByMachine.FirstOrDefaultAsync(i => i.ScreenId == screenId && i.MachineId == machineId) - is null ? Json(true) : Json("The selected machine already has the selected screen."); - } -} \ No newline at end of file diff --git a/Marechai/Areas/Admin/Views/ScreensByMachine/Create.cshtml b/Marechai/Areas/Admin/Views/ScreensByMachine/Create.cshtml deleted file mode 100644 index 1a1ea4a0..00000000 --- a/Marechai/Areas/Admin/Views/ScreensByMachine/Create.cshtml +++ /dev/null @@ -1,42 +0,0 @@ -@model Marechai.Database.Models.ScreensByMachine - -@{ - ViewData["Title"] = "Create"; -} -

Create

-

Screens by machine

-
-
-
-
-
-
-
- - - - -
-
- - - - -
- -
-
-
- -@section Scripts { - @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } -} \ No newline at end of file diff --git a/Marechai/Areas/Admin/Views/ScreensByMachine/Delete.cshtml b/Marechai/Areas/Admin/Views/ScreensByMachine/Delete.cshtml deleted file mode 100644 index 07357c98..00000000 --- a/Marechai/Areas/Admin/Views/ScreensByMachine/Delete.cshtml +++ /dev/null @@ -1,32 +0,0 @@ -@model Marechai.Areas.Admin.Models.ScreensByMachineViewModel - -@{ - ViewData["Title"] = "Delete"; -} -

Delete

-

Are you sure you want to delete this?

-
-

Screens by machine

-
-
-
- @Html.DisplayNameFor(model => model.Screen) -
-
- @Html.DisplayFor(model => model.Screen) -
-
- @Html.DisplayNameFor(model => model.Machine) -
-
- @Html.DisplayFor(model => model.Machine) -
-
-
- - - - Back to List - -
-
\ No newline at end of file diff --git a/Marechai/Areas/Admin/Views/ScreensByMachine/Details.cshtml b/Marechai/Areas/Admin/Views/ScreensByMachine/Details.cshtml deleted file mode 100644 index 8006d5bf..00000000 --- a/Marechai/Areas/Admin/Views/ScreensByMachine/Details.cshtml +++ /dev/null @@ -1,32 +0,0 @@ -@model Marechai.Areas.Admin.Models.ScreensByMachineViewModel - -@{ - ViewData["Title"] = "Details"; -} -

Details

-
-

Screens by machine

-
-
-
- @Html.DisplayNameFor(model => model.Screen) -
-
- @Html.DisplayFor(model => model.Screen) -
-
- @Html.DisplayNameFor(model => model.Machine) -
-
- @Html.DisplayFor(model => model.Machine) -
-
-
- \ No newline at end of file diff --git a/Marechai/Areas/Admin/Views/ScreensByMachine/Edit.cshtml b/Marechai/Areas/Admin/Views/ScreensByMachine/Edit.cshtml deleted file mode 100644 index c6561ffb..00000000 --- a/Marechai/Areas/Admin/Views/ScreensByMachine/Edit.cshtml +++ /dev/null @@ -1,43 +0,0 @@ -@model Marechai.Database.Models.ScreensByMachine - -@{ - ViewData["Title"] = "Edit"; -} -

Edit

-

Screens by machine

-
-
-
-
-
-
-
- - - - -
-
- - - - -
- -
- - Back to List -
-
-
-
-
-
- -@section Scripts { - @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); } -} \ No newline at end of file diff --git a/Marechai/Areas/Admin/Views/ScreensByMachine/Index.cshtml b/Marechai/Areas/Admin/Views/ScreensByMachine/Index.cshtml deleted file mode 100644 index 68e9558f..00000000 --- a/Marechai/Areas/Admin/Views/ScreensByMachine/Index.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@model IEnumerable - -@{ - ViewData["Title"] = "Index"; -} -

Screens by machine

-

- - Create new - -

- - - - - - - - - - @foreach (var item in Model) - { - - - - - - } - -
- @Html.DisplayNameFor(model => model.Screen) - - @Html.DisplayNameFor(model => model.Machine) -
- @Html.DisplayFor(modelItem => item.Screen) - - @Html.DisplayFor(modelItem => item.Machine) - - - Details - - - Edit - - - Delete - -
\ No newline at end of file diff --git a/Marechai/Marechai.csproj b/Marechai/Marechai.csproj index 29a04e8f..289ba025 100644 --- a/Marechai/Marechai.csproj +++ b/Marechai/Marechai.csproj @@ -2,7 +2,7 @@ netcoreapp3.1 - 3.0.99.1390 + 3.0.99.1396 Canary Islands Computer Museum Copyright © 2003-2020 Natalia Portillo Canary Islands Computer Museum Website @@ -169,5 +169,10 @@ <_ContentIncludedByDefault Remove="Areas\Admin\Views\StorageByMachines\Details.cshtml" /> <_ContentIncludedByDefault Remove="Areas\Admin\Views\StorageByMachines\Edit.cshtml" /> <_ContentIncludedByDefault Remove="Areas\Admin\Views\StorageByMachines\Index.cshtml" /> + <_ContentIncludedByDefault Remove="Areas\Admin\Views\ScreensByMachine\Create.cshtml" /> + <_ContentIncludedByDefault Remove="Areas\Admin\Views\ScreensByMachine\Delete.cshtml" /> + <_ContentIncludedByDefault Remove="Areas\Admin\Views\ScreensByMachine\Details.cshtml" /> + <_ContentIncludedByDefault Remove="Areas\Admin\Views\ScreensByMachine\Edit.cshtml" /> + <_ContentIncludedByDefault Remove="Areas\Admin\Views\ScreensByMachine\Index.cshtml" /> \ No newline at end of file diff --git a/Marechai/Pages/Admin/Details/Machine.razor b/Marechai/Pages/Admin/Details/Machine.razor index 19747d67..56f77963 100644 --- a/Marechai/Pages/Admin/Details/Machine.razor +++ b/Marechai/Pages/Admin/Details/Machine.razor @@ -47,6 +47,8 @@ @inject ProcessorsService ProcessorsService @inject MemoriesByMachineService MemoriesByMachineService @inject StorageByMachineService StorageByMachineService +@inject ScreensByMachineService ScreensByMachineService +@inject ScreensService ScreensService @attribute [Authorize(Roles = "UberAdmin, Admin")]

@L["Machine details"]


@@ -554,6 +556,87 @@ } +
+

@L["Screens attached"]

+ + @if (_addingScreen) + { +
+ + @L["Screens"] + + + + +
+ } + @if (_machineScreens?.Count > 0) + { +
+ + + + + + + + + + + + + + @foreach (var item in _machineScreens) + { + + + + + + + + + + } + +
+ @L["Diagonal"] + + @L["Width"] + + @L["Height"] + + @L["Type"] + + @L["Effective colors"] + + @L["Native resolution"] +
+ @item.Screen.Diagonal + + @item.Screen.Width + + @item.Screen.Height + + @item.Screen.Type + + @item.Screen.EffectiveColors + + @item.Screen.NativeResolution + + +
+
+ } + diff --git a/Marechai/Pages/Admin/Details/Machine.razor.cs b/Marechai/Pages/Admin/Details/Machine.razor.cs index 14de7e32..8deadec1 100644 --- a/Marechai/Pages/Admin/Details/Machine.razor.cs +++ b/Marechai/Pages/Admin/Details/Machine.razor.cs @@ -21,29 +21,33 @@ namespace Marechai.Pages.Admin.Details double? _addingMemorySpeed; int _addingMemoryType; int _addingMemoryUsage; - bool _addingStorage; - long? _addingStorageSize; - int _addingStorageType; - int _addingStorageInterface; float? _addingProcessorSpeed; + bool _addingScreen; + int? _addingScreenId; bool _addingSound; int? _addingSoundId; + bool _addingStorage; + int _addingStorageInterface; + long? _addingStorageSize; + int _addingStorageType; List _companies; List _cpus; bool _creating; ProcessorByMachineViewModel _currentCpuByMachine; GpuByMachineViewModel _currentGpuByMachine; MemoryByMachineViewModel _currentMemoryByMachine; - SoundSynthByMachineViewModel _currentSoundByMachine; - StorageByMachineViewModel _currentStorageByMachine; + ScreenByMachineViewModel _currentScreenByMachine; + SoundSynthByMachineViewModel _currentSoundByMachine; + StorageByMachineViewModel _currentStorageByMachine; bool _deleteInProgress; string _deleteText; string _deleteTitle; bool _deletingCpuByMachine; bool _deletingGpuByMachine; - bool _deletingMemoryByMachine; - bool _deletingStorageByMachine; + bool _deletingMemoryByMachine; + bool _deletingScreenByMachine; bool _deletingSoundByMachine; + bool _deletingStorageByMachine; bool _editing; List _families; Modal _frmDelete; @@ -52,23 +56,26 @@ namespace Marechai.Pages.Admin.Details List _machineCpus; List _machineGpus; List _machineMemories; + List _machineScreens; List _machineSound; - List _machineStorage; + List _machineStorage; MachineViewModel _model; bool _noFamily; bool _prototype; bool _savingCpu; bool _savingGpu; bool _savingMemory; - bool _savingSound; - bool _savingStorage; + bool _savingScreen; + bool _savingSound; + bool _savingStorage; + List _screens; List _soundSynths; bool _unknownIntroduced; bool _unknownMemorySize; bool _unknownMemorySpeed; bool _unknownModel; bool _unknownProcessorSpeed; - bool _unknownStorageSize; + bool _unknownStorageSize; [Parameter] public int Id { get; set; } @@ -98,10 +105,12 @@ namespace Marechai.Pages.Admin.Details _machineGpus = await GpusByMachineService.GetByMachine(Id); _machineCpus = await ProcessorsByMachineService.GetByMachine(Id); _gpus = await GpusService.GetAsync(); + _screens = await ScreensService.GetAsync(); _cpus = await ProcessorsService.GetAsync(); _soundSynths = await SoundSynthsService.GetAsync(); _machineMemories = await MemoriesByMachineService.GetByMachine(Id); - _machineStorage = await StorageByMachineService.GetByMachine(Id); + _machineStorage = await StorageByMachineService.GetByMachine(Id); + _machineScreens = await ScreensByMachineService.GetByMachine(Id); _editing = _creating || NavigationManager.ToBaseRelativePath(NavigationManager.Uri).ToLowerInvariant(). StartsWith("admin/machines/edit/", @@ -210,6 +219,8 @@ namespace Marechai.Pages.Admin.Details await ConfirmDeleteMemoryByMachine(); else if(_deletingStorageByMachine) await ConfirmDeleteStorageByMachine(); + else if(_deletingScreenByMachine) + await ConfirmDeleteScreenByMachine(); } async Task ConfirmDeleteGpuByMachine() @@ -237,13 +248,17 @@ namespace Marechai.Pages.Admin.Details void ModalClosing(ModalClosingEventArgs obj) { - _deleteInProgress = false; - _deletingGpuByMachine = false; - _currentGpuByMachine = null; - _deletingSoundByMachine = false; - _currentSoundByMachine = null; - _deletingCpuByMachine = false; - _currentCpuByMachine = null; + _deleteInProgress = false; + _deletingGpuByMachine = false; + _currentGpuByMachine = null; + _deletingSoundByMachine = false; + _currentSoundByMachine = null; + _deletingCpuByMachine = false; + _currentCpuByMachine = null; + _deletingScreenByMachine = false; + _currentScreenByMachine = null; + _deletingMemoryByMachine = false; + _deletingStorageByMachine = false; } void OnAddGpuClick() @@ -574,7 +589,7 @@ namespace Marechai.Pages.Admin.Details { _currentStorageByMachine = _machineStorage.FirstOrDefault(n => n.Id == itemId); _deletingStorageByMachine = true; - _deleteTitle = L["Delete storage from this machine"]; + _deleteTitle = L["Delete storage from this machine"]; _deleteText = string.Format(L["Are you sure you want to delete the storage type {0} with interface {1} from this machine?"], @@ -608,10 +623,10 @@ namespace Marechai.Pages.Admin.Details void OnAddStorageClick() { - _addingStorage = true; - _savingStorage = false; - _addingStorageSize = 0; - _unknownStorageSize = true; + _addingStorage = true; + _savingStorage = false; + _addingStorageSize = 0; + _unknownStorageSize = true; } void CancelAddStorage() @@ -630,8 +645,8 @@ namespace Marechai.Pages.Admin.Details await Task.Yield(); await StorageByMachineService.CreateAsync(Id, (StorageType)_addingStorageType, - (StorageInterface)_addingStorageInterface, - _unknownStorageSize ? null : _addingStorageSize); + (StorageInterface)_addingStorageInterface, + _unknownStorageSize ? null : _addingStorageSize); _machineStorage = await StorageByMachineService.GetByMachine(Id); @@ -656,5 +671,81 @@ namespace Marechai.Pages.Admin.Details e.Status = item > 0 ? ValidationStatus.Success : ValidationStatus.Error; } + + void ShowScreenDeleteModal(long itemId) + { + _currentScreenByMachine = _machineScreens.FirstOrDefault(n => n.Id == itemId); + _deletingScreenByMachine = true; + _deleteTitle = L["Delete screen from this machine"]; + _deleteText = L["Are you sure you want to delete the selected screen from this machine?"]; + + _frmDelete.Show(); + } + + async Task ConfirmDeleteScreenByMachine() + { + if(_currentScreenByMachine is null) + return; + + _deleteInProgress = true; + + // Yield thread to let UI to update + await Task.Yield(); + + await ScreensByMachineService.DeleteAsync(_currentScreenByMachine.Id); + _machineScreens = await ScreensByMachineService.GetByMachine(Id); + + _deleteInProgress = false; + _frmDelete.Hide(); + + // Yield thread to let UI to update + await Task.Yield(); + + // Tell we finished loading + StateHasChanged(); + } + + void OnAddScreenClick() + { + _addingScreen = true; + _savingScreen = false; + _addingScreenId = _screens.First(s => _machineScreens.All(m => m.ScreenId == s.Id)).Id; + } + + void CancelAddScreen() + { + _addingScreen = false; + _savingScreen = false; + _addingScreenId = null; + } + + async Task ConfirmAddScreen() + { + if(_addingScreenId is null || + _addingScreenId <= 0) + { + CancelAddScreen(); + + return; + } + + _savingScreen = true; + + // Yield thread to let UI to update + await Task.Yield(); + + await ScreensByMachineService.CreateAsync(_addingScreenId.Value, Id); + _machineScreens = await ScreensByMachineService.GetByMachine(Id); + + _addingScreen = false; + _savingScreen = false; + _addingScreenId = null; + + // Yield thread to let UI to update + await Task.Yield(); + + // Tell we finished loading + StateHasChanged(); + } } } \ No newline at end of file diff --git a/Marechai/Pages/Admin/Screens.razor.cs b/Marechai/Pages/Admin/Screens.razor.cs index f2c38d16..3a09e400 100644 --- a/Marechai/Pages/Admin/Screens.razor.cs +++ b/Marechai/Pages/Admin/Screens.razor.cs @@ -3,6 +3,7 @@ using System.Linq; using System.Threading.Tasks; using Blazorise; using Marechai.Database.Models; +using Marechai.ViewModels; namespace Marechai.Pages.Admin { @@ -10,8 +11,8 @@ namespace Marechai.Pages.Admin { bool _deleteInProgress; Modal _frmDelete; - Screen _screen; - List _screens; + ScreenViewModel _screen; + List _screens; void ShowModal(int itemId) { @@ -33,7 +34,7 @@ namespace Marechai.Pages.Admin await Task.Yield(); await Service.DeleteAsync(_screen.Id); - _screens = Service.Get(); + _screens = await Service.GetAsync(); _deleteInProgress = false; _frmDelete.Hide(); @@ -47,6 +48,6 @@ namespace Marechai.Pages.Admin void ModalClosing(ModalClosingEventArgs obj) => _screen = null; - protected override void OnInitialized() => _screens = Service.Get(); + protected override async Task OnInitializedAsync() => _screens = await Service.GetAsync(); } } \ No newline at end of file diff --git a/Marechai/Services/Register.cs b/Marechai/Services/Register.cs index 0339f9c4..8229ddc4 100644 --- a/Marechai/Services/Register.cs +++ b/Marechai/Services/Register.cs @@ -67,6 +67,7 @@ namespace Marechai.Services services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); } } } \ No newline at end of file diff --git a/Marechai/Services/ScreensByMachineService.cs b/Marechai/Services/ScreensByMachineService.cs new file mode 100644 index 00000000..5621bd2a --- /dev/null +++ b/Marechai/Services/ScreensByMachineService.cs @@ -0,0 +1,66 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Marechai.Database.Models; +using Marechai.ViewModels; +using Microsoft.EntityFrameworkCore; + +namespace Marechai.Services +{ + public class ScreensByMachineService + { + readonly MarechaiContext _context; + + public ScreensByMachineService(MarechaiContext context) => _context = context; + + public async Task> GetByMachine(int machineId) => + await _context.ScreensByMachine.Where(s => s.MachineId == machineId). + Select(s => new ScreenByMachineViewModel + { + Id = s.Id, ScreenId = s.ScreenId, MachineId = s.MachineId, Screen = new ScreenViewModel + { + Diagonal = s.Screen.Diagonal, EffectiveColors = s.Screen.EffectiveColors, + Height = s.Screen.Height, Id = s.Screen.Id, NativeResolution = + new ResolutionViewModel + { + Chars = s.Screen.NativeResolution.Chars, + Colors = s.Screen.NativeResolution.Colors, + Grayscale = s.Screen.NativeResolution.Grayscale, + Height = s.Screen.NativeResolution.Height, Id = s.Screen.NativeResolutionId, + Palette = s.Screen.NativeResolution.Palette, + Width = s.Screen.NativeResolution.Width + }, + NativeResolutionId = s.Screen.NativeResolutionId, Type = s.Screen.Type, + Width = s.Screen.Width + } + }).ToListAsync(); + + public async Task DeleteAsync(long id) + { + ScreensByMachine item = await _context.ScreensByMachine.FindAsync(id); + + if(item is null) + return; + + _context.ScreensByMachine.Remove(item); + + await _context.SaveChangesAsync(); + } + + public async Task CreateAsync(int machineId, int screenId) + { + if(_context.ScreensByMachine.Any(s => s.MachineId == machineId && s.ScreenId == screenId)) + return 0; + + var item = new ScreensByMachine + { + ScreenId = screenId, MachineId = machineId + }; + + await _context.ScreensByMachine.AddAsync(item); + await _context.SaveChangesAsync(); + + return item.Id; + } + } +} \ No newline at end of file diff --git a/Marechai/Services/ScreensService.cs b/Marechai/Services/ScreensService.cs index 5265a609..3cc333a0 100644 --- a/Marechai/Services/ScreensService.cs +++ b/Marechai/Services/ScreensService.cs @@ -13,9 +13,38 @@ namespace Marechai.Services public ScreensService(MarechaiContext context) => _context = context; - public List Get() => _context.Screens.AsEnumerable().OrderBy(s => s.Diagonal). - ThenBy(s => s.EffectiveColors).ThenBy(s => s.NativeResolution.ToString()). - ThenBy(s => s.Type).ThenBy(s => s.Size).ToList(); + public async Task> GetAsync() => await _context.Screens.Select(s => new ScreenViewModel + { + Diagonal = s.Diagonal, + EffectiveColors = s.EffectiveColors, + Height = s.Height, Id = s.Id, + Type = s.Type, Width = s.Width, + NativeResolutionId = + s.NativeResolutionId, + NativeResolution = + new ResolutionViewModel + { + Chars = s.NativeResolution. + Chars, + Colors = s.NativeResolution. + Colors, + Grayscale = s. + NativeResolution. + Grayscale, + Height = s.NativeResolution. + Height, + Id = s.NativeResolution.Id, + Palette = s.NativeResolution. + Palette, + Width = s.NativeResolution. + Width + } + }).OrderBy(s => s.Diagonal). + ThenBy(s => s.EffectiveColors). + ThenBy(s => s.NativeResolution. + ToString()). + ThenBy(s => s.Type).ThenBy(s => s.Size). + ToListAsync(); public async Task GetAsync(int id) => await _context.Screens.Where(s => s.Id == id).Select(s => new ScreenViewModel diff --git a/Marechai/ViewModels/ScreenByMachineViewModel.cs b/Marechai/ViewModels/ScreenByMachineViewModel.cs new file mode 100644 index 00000000..8a174f07 --- /dev/null +++ b/Marechai/ViewModels/ScreenByMachineViewModel.cs @@ -0,0 +1,9 @@ +namespace Marechai.ViewModels +{ + public class ScreenByMachineViewModel : BaseViewModel + { + public int MachineId { get; set; } + public ScreenViewModel Screen { get; set; } + public int ScreenId { get; set; } + } +} \ No newline at end of file