using Kemkas.Web.Db.Enums; using Kemkas.Web.Db.Models; using Kemkas.Web.ViewModels; namespace Kemkas.Web.Services.SecondEdition.Character; public interface ICharacter2EDtoToDbModelService { public V2Karakter Convert(Karakter2eDto dto); public void Update(V2Karakter original, Karakter2eDto dto); } public class Character2EDtoToDbModelService : ICharacter2EDtoToDbModelService { public V2Karakter Convert(Karakter2eDto dto) { var karakter = new V2Karakter { Nev = dto.Nev, Nem = dto.Nem, Kor = dto.Kor, Isten = dto.Isten, Jellem = JellemExtensions.Convert(dto.Jellem), Faj = FajExtensions.Convert2E(dto.Faj), Ero = dto.Tulajdonsagok.Ero, Ugyesseg = dto.Tulajdonsagok.Ugy, Egeszseg = dto.Tulajdonsagok.Egs, Intelligencia = dto.Tulajdonsagok.Int, Bolcsesseg = dto.Tulajdonsagok.Bol, Karizma = dto.Tulajdonsagok.Kar, Szint = dto.Szint, Pajzs = dto.Felszereles.PajzsId, Pancel = dto.Felszereles.PancelId, AranyTaller = dto.Felszereles.AranyTaller, ElektrumTaller = dto.Felszereles.ElektrumTaller, EzustTaller = dto.Felszereles.EzustTaller, }; karakter.KarakterKepzettsegek = ConvertKarakterKepzettsegek(dto, karakter); var felszereles = dto.Felszereles.Fegyverek.Select(x => new V2Felszereles { Karakter = karakter, IsFegyver = true, TargyId = x.Id, Count = x.Count, }).ToList(); felszereles.AddRange(dto.Felszereles.Viselt.Select(x => new V2Felszereles { Karakter = karakter, IsViselt = true, TargyId = x.Id, Count = x.Count, })); felszereles.AddRange(dto.Felszereles.Cipelt.Select(x => new V2Felszereles { Karakter = karakter, IsCipelt = true, TargyId = x.Id, Count = x.Count, })); felszereles.AddRange(dto.Felszereles.Aprosagok.Select(x => new V2Felszereles { Karakter = karakter, IsAprosag = true, TargyId = x.Id, Count = x.Count, })); karakter.Felszereles = felszereles; karakter.Szintlepesek = dto.Szintlepesek.Select((x, i) => new V2Szintlepes { Karakter = karakter, Osztaly = OsztalyExtensions.Convert2E(x.Osztaly), KarakterSzint = (byte)(i + 1), HpRoll = x.HProll, FegyverSpecializacio = x.HarcosFegyver ?? x.KalozKritikus, TulajdonsagNoveles = x.TulajdonsagNoveles == null ? null : TulajdonsagExtensions.Convert(x.TulajdonsagNoveles), TolvajExtraKepzettseg = x.TolvajExtraKepzettseg == null ? null : KepzettsegExtensions.Convert2E(x.TolvajExtraKepzettseg), }).ToList(); karakter.Varazslatok = dto.Varazslatok?.Select(v => new V2KarakterVarazslat { Karakter = karakter, Bekeszitve = v.Bekeszitve, VarazslatId = v.VarazslatId, }).ToHashSet() ?? []; return karakter; } public void Update(V2Karakter original, Karakter2eDto dto) { original.Nev = dto.Nev; original.Nem = dto.Nem; original.Kor = dto.Kor; original.Isten = dto.Isten; original.Jellem = JellemExtensions.Convert(dto.Jellem); original.Faj = FajExtensions.Convert2E(dto.Faj); original.Ero = dto.Tulajdonsagok.Ero; original.Ugyesseg = dto.Tulajdonsagok.Ugy; original.Egeszseg = dto.Tulajdonsagok.Egs; original.Intelligencia = dto.Tulajdonsagok.Int; original.Bolcsesseg = dto.Tulajdonsagok.Bol; original.Karizma = dto.Tulajdonsagok.Kar; original.Szint = dto.Szint; original.Pajzs = dto.Felszereles.PajzsId; original.Pancel = dto.Felszereles.PancelId; original.AranyTaller = dto.Felszereles.AranyTaller; original.ElektrumTaller = dto.Felszereles.ElektrumTaller; original.EzustTaller = dto.Felszereles.EzustTaller; original.KarakterKepzettsegek = ConvertKarakterKepzettsegek(dto, original); var felszereles = dto.Felszereles.Fegyverek.Select(x => new V2Felszereles { Karakter = original, IsFegyver = true, TargyId = x.Id, Count = x.Count, }).ToList(); felszereles.AddRange(dto.Felszereles.Viselt.Select(x => new V2Felszereles { Karakter = original, IsViselt = true, TargyId = x.Id, Count = x.Count, })); felszereles.AddRange(dto.Felszereles.Cipelt.Select(x => new V2Felszereles { Karakter = original, IsCipelt = true, TargyId = x.Id, Count = x.Count, })); felszereles.AddRange(dto.Felszereles.Aprosagok.Select(x => new V2Felszereles { Karakter = original, IsAprosag = true, TargyId = x.Id, Count = x.Count, })); original.Felszereles = felszereles; original.Szintlepesek = dto.Szintlepesek.Select((x, i) => new V2Szintlepes { Karakter = original, Osztaly = OsztalyExtensions.Convert2E(x.Osztaly), KarakterSzint = (byte)(i + 1), HpRoll = x.HProll, FegyverSpecializacio = x.HarcosFegyver ?? x.KalozKritikus, TulajdonsagNoveles = x.TulajdonsagNoveles == null ? null : TulajdonsagExtensions.Convert(x.TulajdonsagNoveles), TolvajExtraKepzettseg = x.TolvajExtraKepzettseg == null ? null : KepzettsegExtensions.Convert2E(x.TolvajExtraKepzettseg), }).ToList(); if (dto.Varazslatok == null) { original.Varazslatok = new HashSet(); } else { var dtoVarazslatok = dto.Varazslatok.ToList(); var toAdd = dtoVarazslatok.Where(v => original.Varazslatok.Any(x => x.VarazslatId == v.VarazslatId)) .Select(v => new V2KarakterVarazslat { VarazslatId = v.VarazslatId, Bekeszitve = v.Bekeszitve, }).ToList(); var toUpdate = original.Varazslatok .Select(x => { var dtoVarazslat = dtoVarazslatok.FirstOrDefault(v => v.VarazslatId == x.VarazslatId); return (dbVarazslat: x, dtoVarazslat); }) .Where(x => x.dtoVarazslat != null) .Select(x => { x.dbVarazslat.Bekeszitve = x.dtoVarazslat!.Bekeszitve; return x.dbVarazslat; }) .ToList(); original.Varazslatok = toAdd.Concat(toUpdate).ToHashSet(); } } private static List ConvertKarakterKepzettsegek(Karakter2eDto dto, V2Karakter karakter) { var kepzettsegek = dto.Kepzettsegek.Select(x => new V2KarakterKepzettseg { Karakter = karakter, IsTolvajKepzettseg = false, Kepzettseg = KepzettsegExtensions.Convert2E(x), }).ToList(); if (dto.Tolvajkepzettsegek != null) { kepzettsegek.AddRange(dto.Tolvajkepzettsegek.Select(x => new V2KarakterKepzettseg { Karakter = karakter, IsTolvajKepzettseg = true, Kepzettseg = KepzettsegExtensions.Convert2E(x), })); } return kepzettsegek; } }