public IActionResult Details(int id)
        {
            var computerAssembly = _computerAssemblyService.GetComputerAssembly(id);

            if (computerAssembly == null)
            {
                return(NotFound());
            }

            var model = new ComputerAssemblyViewModel();

            model.Id                  = computerAssembly.Id;
            model.Name                = computerAssembly.Name;
            model.UserId              = computerAssembly.OwnerId;
            model.CPUId               = computerAssembly.CPUId;
            model.CPUName             = computerAssembly.CPU == null ? "Пусто" : computerAssembly.CPU.Name;
            model.CPUImage            = computerAssembly.CPU == null ? "" : "/Images/CPU/" + computerAssembly.CPU.Image;
            model.MotherBoardId       = computerAssembly.MotherBoardId;
            model.MotherBoardName     = computerAssembly.MotherBoard == null ? "Пусто" : computerAssembly.MotherBoard.Name;
            model.MotherBoardImage    = computerAssembly.MotherBoard == null ? "" : "/Images/MotherBoard/" + computerAssembly.MotherBoard.Image;
            model.PCCaseId            = computerAssembly.PCCaseId;
            model.PCCaseName          = computerAssembly.PCCase == null ? "Пусто" : computerAssembly.PCCase.Name;
            model.PCCaseImage         = computerAssembly.PCCase == null ? "" : "/Images/PCCase/" + computerAssembly.PCCase.Image;
            model.PowerSupplyId       = computerAssembly.PowerSupplyId;
            model.PowerSupplyName     = computerAssembly.PowerSupply == null ? "Пусто" : computerAssembly.PowerSupply.Name;
            model.PowerSupplyImage    = computerAssembly.PowerSupply == null ? "" : "/Images/PowerSupply/" + computerAssembly.PowerSupply.Image;
            model.VideoCards          = computerAssembly.VideoCards.Select(m => new VideoCardShortModel(m.VideoCard)).ToList();
            model.RAMs                = computerAssembly.ComputerAssemblyRAMs.Select(m => new RAMShortModel(m.RAM)).ToList();
            model.SSDs                = computerAssembly.SSDs.Select(m => new SSDShortModel(m.SSD)).ToList();
            model.HDDs                = computerAssembly.HDDs.Select(m => new HDDShortModel(m.HDD)).ToList();
            model.RAMFreeSlot         = _computerAssemblyService.CalculateFreeRAMSlot(computerAssembly);
            model.OuterMemoryFreeSlot = _computerAssemblyService.CalculateFreeOuterMemorySlot(computerAssembly);
            model.OwnerName           = computerAssembly.Owner.Name + " " + computerAssembly.Owner.Surname;
            var userId = _userService.GetApplicationUserManager().GetUserId(this.User);

            model.Comments = computerAssembly.Comments.Select(m => new CommentViewModel(m, userId)).ToList();
            return(View(model));
        }
        public IActionResult Index(int?id, string name)
        {
            if (id.HasValue)
            {
                var computerAssembly = _computerAssemblyService.GetComputerAssembly(id.Value);
                if (computerAssembly == null)
                {
                    return(NotFound());
                }

                System.Security.Claims.ClaimsPrincipal currentUser = this.User;
                var userId = _userService.GetApplicationUserManager().GetUserId(this.User);
                if (computerAssembly.OwnerId != userId)
                {
                    return(Forbid());
                }

                var model = new ComputerAssemblyViewModel();
                model.Id                  = computerAssembly.Id;
                model.Name                = computerAssembly.Name;
                model.UserId              = computerAssembly.OwnerId;
                model.CPUId               = computerAssembly.CPUId;
                model.CPUName             = computerAssembly.CPU == null ? "Пусто" : computerAssembly.CPU.Name;
                model.CPUImage            = computerAssembly.CPU == null ? "" : "/Images/CPU/" + computerAssembly.CPU.Image;
                model.MotherBoardId       = computerAssembly.MotherBoardId;
                model.MotherBoardName     = computerAssembly.MotherBoard == null ? "Пусто" : computerAssembly.MotherBoard.Name;
                model.MotherBoardImage    = computerAssembly.MotherBoard == null ? "" : "/Images/MotherBoard/" + computerAssembly.MotherBoard.Image;
                model.PCCaseId            = computerAssembly.PCCaseId;
                model.PCCaseName          = computerAssembly.PCCase == null ? "Пусто" : computerAssembly.PCCase.Name;
                model.PCCaseImage         = computerAssembly.PCCase == null ? "" : "/Images/PCCase/" + computerAssembly.PCCase.Image;
                model.PowerSupplyId       = computerAssembly.PowerSupplyId;
                model.PowerSupplyName     = computerAssembly.PowerSupply == null ? "Пусто" : computerAssembly.PowerSupply.Name;
                model.PowerSupplyImage    = computerAssembly.PowerSupply == null ? "" : "/Images/PowerSupply/" + computerAssembly.PowerSupply.Image;
                model.VideoCards          = computerAssembly.VideoCards.Select(m => new VideoCardShortModel(m.VideoCard)).ToList() ?? new List <VideoCardShortModel>();
                model.RAMs                = computerAssembly.ComputerAssemblyRAMs.Select(m => new RAMShortModel(m.RAM)).ToList() ?? new List <RAMShortModel>();
                model.SSDs                = computerAssembly.SSDs.Select(m => new SSDShortModel(m.SSD)).ToList() ?? new List <SSDShortModel>();
                model.HDDs                = computerAssembly.HDDs.Select(m => new HDDShortModel(m.HDD)).ToList() ?? new List <HDDShortModel>();
                model.RAMFreeSlot         = _computerAssemblyService.CalculateFreeRAMSlot(computerAssembly);
                model.OuterMemoryFreeSlot = _computerAssemblyService.CalculateFreeOuterMemorySlot(computerAssembly);
                model.Public              = computerAssembly.Public;
                return(View(model));
            }
            else
            {
                System.Security.Claims.ClaimsPrincipal currentUser = this.User;
                var userId             = _userService.GetApplicationUserManager().GetUserId(this.User);
                var computerAssembly   = new ComputerAssembly();
                var computerAssemblies = _computerAssemblyService.GetComputerAssemblies().Where(m => m.OwnerId == userId && m.Name == name);
                if (computerAssemblies.Any())
                {
                    return(Json(new { error = "Ви вже створили збірку з цією назвою" }));
                }
                computerAssembly.Name    = name;
                computerAssembly.OwnerId = userId;
                _computerAssemblyService.CreateComputerAssembly(computerAssembly);
                var model = new ComputerAssemblyViewModel();
                model.Id                  = computerAssembly.Id;
                model.Name                = computerAssembly.Name;
                model.UserId              = computerAssembly.OwnerId;
                model.CPUId               = computerAssembly.CPUId;
                model.CPUName             = computerAssembly.CPU == null ? "Пусто" : computerAssembly.CPU.Name;
                model.CPUImage            = computerAssembly.CPU == null ? "" : "/Images/CPU/" + computerAssembly.CPU.Image;
                model.MotherBoardId       = computerAssembly.MotherBoardId;
                model.MotherBoardName     = computerAssembly.MotherBoard == null ? "Пусто" : computerAssembly.MotherBoard.Name;
                model.MotherBoardImage    = computerAssembly.MotherBoard == null ? "" : "/Images/MotherBoard/" + computerAssembly.MotherBoard.Image;
                model.PCCaseId            = computerAssembly.PCCaseId;
                model.PCCaseName          = computerAssembly.PCCase == null ? "Пусто" : computerAssembly.PCCase.Name;
                model.PCCaseImage         = computerAssembly.PCCase == null ? "" : "/Images/PCCase/" + computerAssembly.PCCase.Image;
                model.PowerSupplyId       = computerAssembly.PowerSupplyId;
                model.PowerSupplyName     = computerAssembly.PowerSupply == null ? "Пусто" : computerAssembly.PowerSupply.Name;
                model.PowerSupplyImage    = computerAssembly.PowerSupply == null ? "" : "/Images/PowerSupply/" + computerAssembly.PowerSupply.Image;
                model.VideoCards          = new List <VideoCardShortModel>();
                model.RAMs                = new List <RAMShortModel>();
                model.SSDs                = new List <SSDShortModel>();
                model.HDDs                = new List <HDDShortModel>();
                model.RAMFreeSlot         = 1;
                model.OuterMemoryFreeSlot = 1;
                model.Public              = false;
                return(Json(model));
            }
        }