update character

This commit is contained in:
2023-12-25 16:59:25 +01:00
parent 9894ba735e
commit 73660076e5
10 changed files with 204 additions and 103 deletions
@@ -8,6 +8,8 @@ namespace Kemkas.Web.Services.Character;
public interface ICharacterDtoToDbModelService
{
public V1Karakter Convert(CharacterDto dto);
public void Update(V1Karakter original, CharacterDto dto);
}
public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
@@ -45,6 +47,34 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
return karakter;
}
public void Update(V1Karakter original, CharacterDto dto)
{
original.Nev = dto.Name;
original.Nem = dto.Nem;
original.Kor = dto.Kor;
original.Jellem = JellemExtensions.Convert(dto.Jellem);
original.Isten = dto.Isten;
original.Faj = FajExtensions.Convert(dto.Faj);
original.Osztaly = OsztalyExtensions.Convert(dto.Osztaly);
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.KarakterKepzettsegek = ConvertKepzettsegek(dto, original);
original.Felszereles = dto.Felszereles.FegyverIds.Select(x => new V1Felszereles
{
Karakter = original,
IsFegyver = true,
Name = x,
}).ToList();
original.Szintlepesek = ConvertSzintLepes(dto, original);
}
// TODO: this is unnecessary duplication of business logic!!
private static List<V1Szintlepes> ConvertSzintLepes(CharacterDto dto, V1Karakter karakter)
{
@@ -11,9 +11,11 @@ public interface ICharacterPersistenceService
{
public Task<Guid> StoreNewCharacter(V1Karakter karakter, bool isPublic = false);
public Task<V1Karakter?> GetCharacterById(Guid id);
public Task<V1Karakter?> GetCharacterById(Guid id, bool tracking = false);
public Task<List<CharacterListItemDto>> GetAllCharactersOfUser();
public Task UpdateCharacter(V1Karakter karakter, bool isPublic = false);
}
public class CharacterPersistenceService(
@@ -33,12 +35,15 @@ public class CharacterPersistenceService(
return karakter.Id;
}
public async Task<V1Karakter?> GetCharacterById(Guid id)
public async Task<V1Karakter?> GetCharacterById(Guid id, bool tracking = false)
{
var entity = await dbContext.Karakterek
.Include(x => x.KarakterKepzettsegek)
IQueryable<V1Karakter> queriable = dbContext.Karakterek.Include(x => x.KarakterKepzettsegek)
.Include(x => x.Szintlepesek)
.Include(x => x.Felszereles)
.Include(x => x.Felszereles);
queriable = tracking ? queriable.AsTracking() : queriable.AsNoTracking();
var entity = await queriable
.FirstOrDefaultAsync(x => x.Id == id);
if (entity?.OwnerUserId is null || entity.IsPublic)
@@ -72,4 +77,11 @@ public class CharacterPersistenceService(
return characters;
}
public async Task UpdateCharacter(V1Karakter karakter, bool isPublic = false)
{
karakter.IsPublic = isPublic;
dbContext.Karakterek.Attach(karakter);
await dbContext.SaveChangesAsync();
}
}