diff --git a/DiscImageChef.Server/Areas/Admin/Controllers/ReportsController.cs b/DiscImageChef.Server/Areas/Admin/Controllers/ReportsController.cs index b0db3acc..2c3f9a98 100644 --- a/DiscImageChef.Server/Areas/Admin/Controllers/ReportsController.cs +++ b/DiscImageChef.Server/Areas/Admin/Controllers/ReportsController.cs @@ -5,6 +5,7 @@ using DiscImageChef.Server.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.ChangeTracking; namespace DiscImageChef.Server.Areas.Admin.Controllers { @@ -171,5 +172,35 @@ namespace DiscImageChef.Server.Areas.Admin.Controllers public IActionResult Find(int id, string manufacturer, string model, string bus) => throw new NotImplementedException(); + + public IActionResult Promote(int? id) + { + if(id == null) + { + return NotFound(); + } + + UploadedReport uploadedReport = _context.Reports.FirstOrDefault(m => m.Id == id); + + if(uploadedReport == null) + { + return NotFound(); + } + + var device = new Device(uploadedReport.ATAId, uploadedReport.ATAPIId, uploadedReport.FireWireId, + uploadedReport.MultiMediaCardId, uploadedReport.PCMCIAId, + uploadedReport.SecureDigitalId, uploadedReport.SCSIId, uploadedReport.USBId, + uploadedReport.UploadedWhen, uploadedReport.Manufacturer, uploadedReport.Model, + uploadedReport.Revision, uploadedReport.CompactFlash, uploadedReport.Type); + + EntityEntry res = _context.Devices.Add(device); + _context.Reports.Remove(uploadedReport); + _context.SaveChanges(); + + return RedirectToAction(nameof(DevicesController.Details), "Devices", new + { + id = res.Entity.Id + }); + } } } \ No newline at end of file diff --git a/DiscImageChef.Server/Models/Device.cs b/DiscImageChef.Server/Models/Device.cs index 5d77efaa..70a7db96 100644 --- a/DiscImageChef.Server/Models/Device.cs +++ b/DiscImageChef.Server/Models/Device.cs @@ -32,6 +32,7 @@ using System; using System.ComponentModel; +using DiscImageChef.CommonTypes.Enums; using DiscImageChef.CommonTypes.Metadata; namespace DiscImageChef.Server.Models @@ -59,11 +60,41 @@ namespace DiscImageChef.Server.Models Type = report.Type; } + public Device(int? ataId, int? atapiId, int? firewireId, int? multimediacardId, int? pcmciaId, + int? securedigitalId, int? scsiId, int? usbId, DateTime uploadedWhen, string manufacturer, + string model, string revision, bool compactFlash, DeviceType type) + { + ATAId = ataId; + ATAPIId = atapiId; + FireWireId = firewireId; + MultiMediaCardId = multimediacardId; + PCMCIAId = pcmciaId; + SecureDigitalId = securedigitalId; + SCSIId = scsiId; + USBId = usbId; + AddedWhen = uploadedWhen; + ModifiedWhen = DateTime.UtcNow; + Manufacturer = manufacturer; + Model = model; + Revision = revision; + CompactFlash = compactFlash; + Type = type; + } + public DateTime AddedWhen { get; set; } public DateTime? ModifiedWhen { get; set; } public virtual CompactDiscOffset CdOffset { get; set; } [DefaultValue(0)] public int OptimalMultipleSectorsRead { get; set; } + + public int? ATAId { get; set; } + public int? ATAPIId { get; set; } + public int? FireWireId { get; set; } + public int? MultiMediaCardId { get; set; } + public int? PCMCIAId { get; set; } + public int? SecureDigitalId { get; set; } + public int? SCSIId { get; set; } + public int? USBId { get; set; } } } \ No newline at end of file diff --git a/DiscImageChef.Server/Models/UploadedReport.cs b/DiscImageChef.Server/Models/UploadedReport.cs index f2896247..5394387d 100644 --- a/DiscImageChef.Server/Models/UploadedReport.cs +++ b/DiscImageChef.Server/Models/UploadedReport.cs @@ -58,5 +58,14 @@ namespace DiscImageChef.Server.Models } public DateTime UploadedWhen { get; set; } + + public int? ATAId { get; set; } + public int? ATAPIId { get; set; } + public int? FireWireId { get; set; } + public int? MultiMediaCardId { get; set; } + public int? PCMCIAId { get; set; } + public int? SecureDigitalId { get; set; } + public int? SCSIId { get; set; } + public int? USBId { get; set; } } } \ No newline at end of file