1.WEB,API -> connection string appsettings.json ############################################################ 2.DataModel - Client.cs namespace Kolokwium.Model.DataModels; public class Client{ public int Id{get;set;}//czy moze byc nullem? public DateTime RegistrationDate{get;set;} public string FirstName{get;set;}=null!; public string LastName{get;set;}=null!; public string Email{get;set;}=null!; public string Phone{get;set;}=null!; public ICollection Orders{get;set;}=null!; } Order{ public Client Client{get;set;}=null!;-------one to many } --------------------------------------------------------------- namespace Kolokwium.Model.DataModels; public class Order{ public int Id{get;set;} public DateTime CreationDate{get;set;} public string ShippingAdress{get;set;}=null!; public string? Description{get;set;} public string Status{get;set;}=null!; public int TotalAmount{get;set;} public DateTime DueDate{get;set;} public int ClientId{get;set;} public Client Client{get;set;}=null!; public ICollection Products{get;set;}=null!; } ############################################################# 3.VM - ClientVm.cs using Kolokwium.Model.DataModels; namespace Kolokwium.ViewModel.VM; public class ClientVm { public int? Id{get;set;} public DateTime RegistrationDate{get;set;} public string FirstName{get;set;}=null!; public string LastName{get;set;}=null!; public string Email{get;set;}=null!; public string Phone{get;set;}=null!; public ICollection Orders{get;set;}=null!; } ---------------------------------------------------------- VM - ModifyClientVm.cs namespace Kolokwium.ViewModel.VM; public class ModifyClientVm { public int? Id{get;set;} public DateTime RegistrationDate{get;set;} public string FirstName{get;set;}=null!; public string LastName{get;set;}=null!; public string Email{get;set;}=null!; public string Phone{get;set;}=null!; } ############################################################# 4.Services ->tworzymy folder Interfaces - IStudentService.cs using System.Linq.Expressions; using Kolokwium.Model.DataModels; using Kolokwium.ViewModel.VM; namespace Kolokwium.Services.Interfaces; public interface IClientService { IEnumerable GetClientVms(Expression>? predicate = null); ClientVm GetClientVm(Expression> predicate); Client Modify(ModifyClientVm ModifyClientVm); void DeleteClient(int id); } ############################################################## 5.ConcreteServices -> StudentService.cs using System.Linq.Expressions; using System.Security.Cryptography.X509Certificates; using AutoMapper; using Kolokwium.DAL; using Kolokwium.Model.DataModels; using Kolokwium.Services.Interfaces; using Kolokwium.ViewModel.VM; using Microsoft.EntityFrameworkCore.Diagnostics; using Microsoft.Extensions.Logging; namespace Kolokwium.Services.ConcreteServices; public class ClientService : BaseService, IClientService { public ClientService(ApplicationDbContext dbContext, IMapper mapper, ILogger logger) : base(dbContext, mapper, logger) { } public Client Modify(ModifyClientVm ModifyClientVm) { try { if(ModifyClientVm == null) throw new Exception("Error"); var Client = Mapper.Map(ModifyClientVm); if(!ModifyClientVm.Id.HasValue) { DbContext.Clients.Add(Client); DbContext.SaveChanges(); return Client; } else { var oldClient = DbContext.Clients.Find(ModifyClientVm.Id); if(oldClient == null) throw new Exception(); oldClient.RegistrationDate = Client.RegistrationDate; oldClient.FirstName = Client.FirstName; oldClient.LastName = Client.LastName; oldClient.Email = Client.Email; oldClient.Phone = Client.Phone; DbContext.SaveChanges(); return oldClient; } } catch(Exception e) { Logger.LogError(e,e.Message); throw; } } public void DeleteClient(int id) { try { var Client = DbContext.Clients.FirstOrDefault(x => x.Id == id); if(Client == null) throw new Exception(); DbContext.Clients.Remove(Client); DbContext.SaveChanges(); } catch(Exception e) { Logger.LogError(e,e.Message); } } public ClientVm GetClientVm(Expression> predicate) { try { if(predicate == null) throw new Exception(); var Client = DbContext.Clients.FirstOrDefault(predicate); if(Client == null) throw new Exception(); var ClientVm = Mapper.Map(Client); return ClientVm; } catch(Exception e) { Logger.LogError(e,e.Message); throw; } } public IEnumerable GetClientVms(Expression>? predicate = null) { try { var Clients = DbContext.Clients.AsQueryable(); if(predicate != null) { Clients.Where(predicate); } var ClientsVm = Mapper.Map>(Clients); return ClientsVm; } catch(Exception e) { Logger.LogError(e,e.Message); throw; } } } ######################################################################################################### 6.Configuration -> MainProfile.cs //ZRÓB USINGI ctrl .//*2 CreateMap(); CreateMap(); CreateMap(); ########################################################################################### 7.Web -> Controllers -> StudentController.cs using AutoMapper; using Kolokwium.Model.DataModels; using Kolokwium.Services.ConcreteServices; using Kolokwium.Services.Interfaces; using Kolokwium.ViewModel.VM; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; namespace Kolokwium.Web.Controllers; public class ClientController : BaseController { private readonly IClientService ClientService1; public ClientController(ILogger logger, IMapper mapper, IStringLocalizer localizer, IClientService ClientService) : base(logger, mapper, localizer) { ClientService1 = ClientService; } public IActionResult Index() { var ClientsVm = ClientService1.GetClientVms(); return View(ClientsVm); } public IActionResult Modify(int? id = null) { if(id == null) return View(); else { var Client = ClientService1.GetClientVm(x => x.Id == id); var ModifyClientVm = Mapper.Map(Client); return View(ModifyClientVm); } } [HttpPost] public IActionResult Modify(ModifyClientVm ModifyClientVm) { if(ModifyClientVm == null) throw new Exception(); ClientService1.Modify(ModifyClientVm); return RedirectToAction(nameof(Index)); } public IActionResult DeleteClient(int id) { ClientService1.DeleteClient(id); return RedirectToAction(nameof(Index)); } } ##################################################################### 8.Web -> Program.cs//*2 builder.Services.AddTransient(); ##################################################################### 9.dotnet aspnet-codegenerator view -p Kolokwium.Web Index List -m StudentVm -outDir Views/Student -scripts -udl ######################################################################## 10.Shared -> Layout ########################################################################### 11.DAL -> DbContext//*3 public virtual DbSet Students {get; set;} = null!; ########################################################################## 12.dotnet aspnet-codegenerator view -p Kolokwium.Web Modify Create -m ModifyStudentVm -outDir Views/Student -scripts -udl //Wpisuj ręcznie lepiej xddd ########################################################################### 13.Web -> Views -> Index Wywal Details Zmienić akcje @Html.ActionLink("Edit", "Modify", new {id = item.Id}) | @Html.ActionLink("Delete", "DeleteSportowiec", new {id = item.Id}) W 10 linii zmień Create na Modify xdddd ######################################################################### 14.Usunąć ID z Modify.cshtml Dodaj na poczatku w @: var clients=ViewBag.Clients; potem zamien diva z ClientId
############################################################################# Polecenia: 1. dotnet ef migrations add migrancja1 --project Kolokwium.DAL --startup-project Kolokwium.Web 2. dotnet ef database update --project Kolokwium.DAL --startup-project Kolokwium.Web 2*3. dotnet aspnet-codegenerator view -p Kolokwium.Web Index List -m StudentVm -outDir Views/Student -scripts -udl 2*4. dotnet aspnet-codegenerator view -p Kolokwium.Web Modify Create -m ModifyStudentVm -outDir Views/Student -scripts -udl 5. dotnet run --project Kolokwium.Web