diff --git a/Kemkas.Web/Controllers/Character1EController.cs b/Kemkas.Web/Controllers/Character1EController.cs
new file mode 100644
index 0000000..30c0a16
--- /dev/null
+++ b/Kemkas.Web/Controllers/Character1EController.cs
@@ -0,0 +1,90 @@
+using System.ComponentModel.DataAnnotations;
+using Kemkas.Web.Db.Models;
+using Kemkas.Web.Services.FirstEdition.Character;
+using Kemkas.Web.Services.Shared;
+using Kemkas.Web.ViewModels;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Kemkas.Web.Controllers;
+
+///
+/// First edition character endpoints
+///
+///
+///
+///
+///
+[ApiController]
+[Route("[controller]")]
+public class Character1EController(
+ ICharacterValidationService validationService,
+ ICharacter1EDtoToDbModelService dtoToDbModelService,
+ ICharacterDbModelToDtoService dbModelToDtoService,
+ ICharacterPersistenceService persistenceService)
+ : ControllerBase
+{
+ [HttpPost]
+ public async Task> StoreNewCharacter([FromBody] Character1eDto dto, [FromQuery]bool isPublic = true)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
+ var errors = validationService.Validate(dto);
+ if (errors != null)
+ {
+ return BadRequest(errors);
+ }
+
+ V1Karakter model;
+ try
+ {
+ model = dtoToDbModelService.Convert(dto);
+ }
+ catch (ValidationException ex)
+ {
+ return BadRequest(ex.Message);
+ }
+ var id = await persistenceService.StoreNewCharacter1E(model, isPublic);
+ return id;
+ }
+
+ [HttpGet("{id:guid}")]
+ public async Task> GetCharacterById([FromRoute] Guid id)
+ {
+ var entity = await persistenceService.GetCharacter1EById(id);
+ if (entity is null)
+ {
+ return NotFound();
+ }
+
+ return dbModelToDtoService.Convert(entity);
+ }
+
+ [HttpPost("{id:guid}")]
+ public async Task> UpdateCharacter([FromRoute] Guid id, [FromBody] Character1eDto dto, [FromQuery]bool isPublic = true)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
+ var errors = validationService.Validate(dto);
+ if (errors != null)
+ {
+ return BadRequest(errors);
+ }
+
+ var original = await persistenceService.GetCharacter1EById(id, tracking: true);
+ if (original is null)
+ {
+ return NotFound();
+ }
+
+ dtoToDbModelService.Update(original, dto);
+
+ await persistenceService.UpdateCharacter1E(original, isPublic);
+
+ return id;
+ }
+
+}
\ No newline at end of file
diff --git a/Kemkas.Web/Controllers/Character2EController.cs b/Kemkas.Web/Controllers/Character2EController.cs
new file mode 100644
index 0000000..ea0acaf
--- /dev/null
+++ b/Kemkas.Web/Controllers/Character2EController.cs
@@ -0,0 +1,43 @@
+using System.ComponentModel.DataAnnotations;
+using Kemkas.Web.Db.Models;
+using Kemkas.Web.Services.SecondEdition.Character;
+using Kemkas.Web.Services.Shared;
+using Kemkas.Web.ViewModels;
+using Microsoft.AspNetCore.Mvc;
+
+namespace Kemkas.Web.Controllers;
+
+[ApiController]
+[Route("[controller]")]
+public class Character2EController(
+ ICharacter2EDtoToDbModelService dtoToDbModelService,
+ ICharacterPersistenceService persistenceService
+ ) : ControllerBase
+{
+ [HttpPost]
+ public async Task> StoreNewCharacter([FromBody] Character2eDto dto, [FromQuery]bool isPublic = true)
+ {
+ if (!ModelState.IsValid)
+ {
+ return BadRequest(ModelState);
+ }
+ // var errors = validationService.Validate(dto);
+ // if (errors != null)
+ // {
+ // return BadRequest(errors);
+ // }
+
+ V2Karakter model;
+ try
+ {
+ model = dtoToDbModelService.Convert(dto);
+ }
+ catch (ValidationException ex)
+ {
+ return BadRequest(ex.Message);
+ }
+ var id = await persistenceService.StoreNewCharacter2E(model, isPublic);
+ return id;
+ }
+
+}
\ No newline at end of file
diff --git a/Kemkas.Web/Controllers/CharacterController.cs b/Kemkas.Web/Controllers/CharacterController.cs
index 11e230b..02f90d2 100644
--- a/Kemkas.Web/Controllers/CharacterController.cs
+++ b/Kemkas.Web/Controllers/CharacterController.cs
@@ -1,85 +1,19 @@
-using System.ComponentModel.DataAnnotations;
-using Kemkas.Web.Db.Models;
-using Kemkas.Web.Services.Character;
+using Kemkas.Web.Services.FirstEdition.Character;
+using Kemkas.Web.Services.Shared;
using Kemkas.Web.ViewModels;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace Kemkas.Web.Controllers;
+///
+/// Shared first and second edition character endpoints
+///
+///
[ApiController]
[Route("[controller]")]
-public class CharacterController(
- ICharacterValidationService validationService,
- ICharacterDtoToDbModelService dtoToDbModelService,
- ICharacterDbModelToDtoService dbModelToDtoService,
- ICharacterPersistenceService persistenceService)
- : ControllerBase
+public class CharacterController(ICharacterPersistenceService persistenceService) : ControllerBase
{
- [HttpPost]
- public async Task> StoreNewCharacter([FromBody] CharacterDto dto, [FromQuery]bool isPublic = true)
- {
- if (!ModelState.IsValid)
- {
- return BadRequest(ModelState);
- }
- var errors = validationService.Validate(dto);
- if (errors != null)
- {
- return BadRequest(errors);
- }
-
- V1Karakter model;
- try
- {
- model = dtoToDbModelService.Convert(dto);
- }
- catch (ValidationException ex)
- {
- return BadRequest(ex.Message);
- }
- var id = await persistenceService.StoreNewCharacter(model, isPublic);
- return id;
- }
-
- [HttpGet("{id:guid}")]
- public async Task> GetCharacterById([FromRoute] Guid id)
- {
- var entity = await persistenceService.GetCharacterById(id);
- if (entity is null)
- {
- return NotFound();
- }
-
- return dbModelToDtoService.Convert(entity);
- }
-
- [HttpPost("{id:guid}")]
- public async Task> UpdateCharacter([FromRoute] Guid id, [FromBody] CharacterDto dto, [FromQuery]bool isPublic = true)
- {
- if (!ModelState.IsValid)
- {
- return BadRequest(ModelState);
- }
- var errors = validationService.Validate(dto);
- if (errors != null)
- {
- return BadRequest(errors);
- }
-
- var original = await persistenceService.GetCharacterById(id, tracking: true);
- if (original is null)
- {
- return NotFound();
- }
-
- dtoToDbModelService.Update(original, dto);
-
- await persistenceService.UpdateCharacter(original, isPublic);
-
- return id;
- }
-
[HttpGet]
[Authorize]
public async Task> GetAllCharacters()
diff --git a/Kemkas.Web/Controllers/WeatherForecastController.cs b/Kemkas.Web/Controllers/WeatherForecastController.cs
deleted file mode 100644
index 246c5a1..0000000
--- a/Kemkas.Web/Controllers/WeatherForecastController.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using Kemkas.Web.ViewModels;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-
-namespace Kemkas.Web.Controllers;
-
-[ApiController]
-[Route("[controller]")]
-public class WeatherForecastController : ControllerBase
-{
- private static readonly string[] Summaries = new[]
- {
- "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
- };
-
- private readonly ILogger _logger;
-
- public WeatherForecastController(ILogger logger)
- {
- _logger = logger;
- }
-
- [HttpGet]
- public IEnumerable Get()
- {
- return Enumerable.Range(1, 5).Select(
- index => new WeatherForecast
- {
- Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
- TemperatureC = Random.Shared.Next(-20, 55),
- Summary = Summaries[Random.Shared.Next(Summaries.Length)]
- })
- .ToArray();
- }
-}
diff --git a/Kemkas.Web/Db/ApplicationDbContext.cs b/Kemkas.Web/Db/ApplicationDbContext.cs
index 789f779..35b73ca 100644
--- a/Kemkas.Web/Db/ApplicationDbContext.cs
+++ b/Kemkas.Web/Db/ApplicationDbContext.cs
@@ -13,6 +13,8 @@ public class ApplicationDbContext : IdentityDbContext DataProtectionKeys { get; set; }
+ // 1st edition character
+
public DbSet Karakterek { get; set; }
public DbSet KarakterKepzettsegek { get; set; }
@@ -21,4 +23,13 @@ public class ApplicationDbContext : IdentityDbContext Felszerelesek { get; set; }
+ // 2nd edition character
+
+ public DbSet Karakterek2E { get; set; }
+
+ public DbSet KarakterKepzettsegek2E { get; set; }
+
+ public DbSet Szintlepesek2E { get; set; }
+
+ public DbSet Felszerelesek2E { get; set; }
}
diff --git a/Kemkas.Web/Db/Enums/Faj.cs b/Kemkas.Web/Db/Enums/Faj.cs
index 49ef477..0868b78 100644
--- a/Kemkas.Web/Db/Enums/Faj.cs
+++ b/Kemkas.Web/Db/Enums/Faj.cs
@@ -1,6 +1,6 @@
namespace Kemkas.Web.Db.Enums;
-public enum Faj
+public enum Faj1E
{
Ember = 0,
Amazon = 1,
@@ -14,4 +14,21 @@ public enum Faj
Felszerzet = 9,
Gnom = 10,
Torpe = 11,
-}
\ No newline at end of file
+}
+
+public enum Faj2E
+{
+ Ember = 0,
+ Amazon = 1,
+ Birodalmi = 2,
+ Nomad = 3,
+ Eszaki = 4,
+ Osember = 5,
+ Elf = 6,
+ Felelf = 7,
+ Felork = 8,
+ Felszerzet = 9,
+ Gnom = 10,
+ Torpe = 11,
+}
+
diff --git a/Kemkas.Web/Db/Enums/FajExtensions.cs b/Kemkas.Web/Db/Enums/FajExtensions.cs
index 316ceb3..5ee7f86 100644
--- a/Kemkas.Web/Db/Enums/FajExtensions.cs
+++ b/Kemkas.Web/Db/Enums/FajExtensions.cs
@@ -2,42 +2,82 @@ namespace Kemkas.Web.Db.Enums;
public static class FajExtensions
{
- public static Faj Convert(string faj)
+ public static Faj1E Convert1E(string faj)
{
return faj switch
{
- "f_ember" => Faj.Ember,
- "f_amazon" => Faj.Amazon,
- "f_birodalmi" => Faj.Birodalmi,
- "f_etuniai" => Faj.Etuniai,
- "f_eszaki" => Faj.Eszaki,
- "f_osember" => Faj.Osember,
- "f_elf" => Faj.Elf,
- "f_felelf" => Faj.Felelf,
- "f_felork" => Faj.Felork,
- "f_felszerzet" => Faj.Felszerzet,
- "f_gnom" => Faj.Gnom,
- "f_torpe" => Faj.Torpe,
+ "f_ember" => Faj1E.Ember,
+ "f_amazon" => Faj1E.Amazon,
+ "f_birodalmi" => Faj1E.Birodalmi,
+ "f_etuniai" => Faj1E.Etuniai,
+ "f_eszaki" => Faj1E.Eszaki,
+ "f_osember" => Faj1E.Osember,
+ "f_elf" => Faj1E.Elf,
+ "f_felelf" => Faj1E.Felelf,
+ "f_felork" => Faj1E.Felork,
+ "f_felszerzet" => Faj1E.Felszerzet,
+ "f_gnom" => Faj1E.Gnom,
+ "f_torpe" => Faj1E.Torpe,
+ _ => throw new Exception("invalid faj: " + faj)
+ };
+ }
+
+ public static Faj2E Convert2E(string faj)
+ {
+ return faj switch
+ {
+ "f_2e_ember" => Faj2E.Ember,
+ "f_2e_amazon" => Faj2E.Amazon,
+ "f_2e_birodalmi" => Faj2E.Birodalmi,
+ "f_2e_nomad" => Faj2E.Nomad,
+ "f_2e_eszaki" => Faj2E.Eszaki,
+ "f_2e_osember" => Faj2E.Osember,
+ "f_2e_elf" => Faj2E.Elf,
+ "f_2e_felelf" => Faj2E.Felelf,
+ "f_2e_felork" => Faj2E.Felork,
+ "f_2e_felszerzet" => Faj2E.Felszerzet,
+ "f_2e_gnom" => Faj2E.Gnom,
+ "f_2e_torpe" => Faj2E.Torpe,
_ => throw new Exception("invalid faj: " + faj)
};
}
- public static string Convert(this Faj faj)
+ public static string Convert(this Faj1E faj)
{
return faj switch
{
- Faj.Ember => "f_ember",
- Faj.Amazon => "f_amazon",
- Faj.Birodalmi => "f_birodalmi",
- Faj.Etuniai => "f_etuniai",
- Faj.Eszaki => "f_eszaki",
- Faj.Osember => "f_osember",
- Faj.Elf => "f_elf",
- Faj.Felelf => "f_felelf",
- Faj.Felork => "f_felork",
- Faj.Felszerzet => "f_felszerzet",
- Faj.Gnom => "f_gnom",
- Faj.Torpe => "f_torpe",
+ Faj1E.Ember => "f_ember",
+ Faj1E.Amazon => "f_amazon",
+ Faj1E.Birodalmi => "f_birodalmi",
+ Faj1E.Etuniai => "f_etuniai",
+ Faj1E.Eszaki => "f_eszaki",
+ Faj1E.Osember => "f_osember",
+ Faj1E.Elf => "f_elf",
+ Faj1E.Felelf => "f_felelf",
+ Faj1E.Felork => "f_felork",
+ Faj1E.Felszerzet => "f_felszerzet",
+ Faj1E.Gnom => "f_gnom",
+ Faj1E.Torpe => "f_torpe",
+ _ => throw new Exception("invalid faj: " + faj)
+ };
+ }
+
+ public static string Convert(this Faj2E faj)
+ {
+ return faj switch
+ {
+ Faj2E.Ember => "f_2e_ember",
+ Faj2E.Amazon => "f_2e_amazon",
+ Faj2E.Birodalmi => "f_2e_birodalmi",
+ Faj2E.Nomad => "f_2e_nomad",
+ Faj2E.Eszaki => "f_2e_eszaki",
+ Faj2E.Osember => "f_2e_osember",
+ Faj2E.Elf => "f_2e_elf",
+ Faj2E.Felelf => "f_2e_felelf",
+ Faj2E.Felork => "f_2e_felork",
+ Faj2E.Felszerzet => "f_2e_felszerzet",
+ Faj2E.Gnom => "f_2e_gnom",
+ Faj2E.Torpe => "f_2e_torpe",
_ => throw new Exception("invalid faj: " + faj)
};
}
diff --git a/Kemkas.Web/Db/Enums/Kepzettseg.cs b/Kemkas.Web/Db/Enums/Kepzettseg.cs
index 8246187..f3e6b62 100644
--- a/Kemkas.Web/Db/Enums/Kepzettseg.cs
+++ b/Kemkas.Web/Db/Enums/Kepzettseg.cs
@@ -1,6 +1,6 @@
namespace Kemkas.Web.Db.Enums;
-public enum Kepzettseg
+public enum Kepzettseg1E
{
Alkimia = 1,
Alcazas = 2,
@@ -31,4 +31,40 @@ public enum Kepzettseg
Varazslatismeret = 27,
Zarnyitas = 28,
Zsebmetszes = 29,
+}
+
+// offset by 200 to make it more different from 1e karakter kepzettsegek
+// I don't plan to mix them, but let's make it obvious which one is which.
+// But it could be useful in one-time character conversions in the future.
+public enum Kepzettseg2E
+{
+ Alkimia = 201,
+ Alcazas = 202,
+ Allatidomitas = 203,
+ Csapdak = 204,
+ Csillagjoslas = 205,
+ Egyensulyozas = 206,
+ Eloadas = 207,
+ Ertekbecsles = 208,
+ Gyogyitas = 209,
+ Hajozas = 210,
+ Hallgatozas = 211,
+ Hamisitas = 212,
+ JelekOlvasasa = 213,
+ Herbalizmus = 601,
+ Historia = 602,
+ Lovaglas = 215,
+ Maszas = 216,
+ Megfigyeles = 217,
+ Meregkeveres = 218,
+ Mesterseg = 219,
+ Nyomkereses = 220,
+ Okkultizmus = 666, // inside joke
+ Osonas = 221,
+ Szabadulomuveszet = 223,
+ Ugras = 225,
+ Uszas = 226,
+ Vadonjaras = 603,
+ Zarnyitas = 228,
+ Zsebmetszes = 229,
}
\ No newline at end of file
diff --git a/Kemkas.Web/Db/Enums/KepzettsegExtensions.cs b/Kemkas.Web/Db/Enums/KepzettsegExtensions.cs
index d9c9d4d..e29c78b 100644
--- a/Kemkas.Web/Db/Enums/KepzettsegExtensions.cs
+++ b/Kemkas.Web/Db/Enums/KepzettsegExtensions.cs
@@ -4,76 +4,150 @@ namespace Kemkas.Web.Db.Enums;
public static class KepzettsegExtensions
{
- public static Kepzettseg Convert(string kepzettseg)
+ public static Kepzettseg1E Convert1E(string kepzettseg)
{
return kepzettseg switch
{
- "k_alkimia" => Kepzettseg.Alkimia,
- "k_alcazas" => Kepzettseg.Alcazas,
- "k_allatidomitas" => Kepzettseg.Allatidomitas,
- "k_csapdak" => Kepzettseg.Csapdak,
- "k_csillagjoslas" => Kepzettseg.Csillagjoslas,
- "k_egyensulyozas" => Kepzettseg.Egyensulyozas,
- "k_eloadas" => Kepzettseg.Eloadas,
- "k_ertekbecsles" => Kepzettseg.Ertekbecsles,
- "k_gyogyitas" => Kepzettseg.Gyogyitas,
- "k_hajozas" => Kepzettseg.Hajozas,
- "k_hallgatozas" => Kepzettseg.Hallgatozas,
- "k_hamisitas" => Kepzettseg.Hamisitas,
- "k_jelek_olvasasa" => Kepzettseg.JelekOlvasasa,
- "k_koncentracio" => Kepzettseg.Koncentracio,
- "k_lovaglas" => Kepzettseg.Lovaglas,
- "k_maszas" => Kepzettseg.Maszas,
- "k_megfigyeles" => Kepzettseg.Megfigyeles,
- "k_meregkeveres" => Kepzettseg.Meregkeveres,
- "k_mesterseg" => Kepzettseg.Mesterseg,
- "k_nyomkereses" => Kepzettseg.Nyomkereses,
- "k_osonas" => Kepzettseg.Osonas,
- "k_rejtozes" => Kepzettseg.Rejtozes,
- "k_szabadulomuveszet" => Kepzettseg.Szabadulomuveszet,
- "k_tudas" => Kepzettseg.Tudas,
- "k_ugras" => Kepzettseg.Ugras,
- "k_uszas" => Kepzettseg.Uszas,
- "k_varazslatismeret" => Kepzettseg.Varazslatismeret,
- "k_zarnyitas" => Kepzettseg.Zarnyitas,
- "k_zsebmetszes" => Kepzettseg.Zsebmetszes,
+ "k_alkimia" => Kepzettseg1E.Alkimia,
+ "k_alcazas" => Kepzettseg1E.Alcazas,
+ "k_allatidomitas" => Kepzettseg1E.Allatidomitas,
+ "k_csapdak" => Kepzettseg1E.Csapdak,
+ "k_csillagjoslas" => Kepzettseg1E.Csillagjoslas,
+ "k_egyensulyozas" => Kepzettseg1E.Egyensulyozas,
+ "k_eloadas" => Kepzettseg1E.Eloadas,
+ "k_ertekbecsles" => Kepzettseg1E.Ertekbecsles,
+ "k_gyogyitas" => Kepzettseg1E.Gyogyitas,
+ "k_hajozas" => Kepzettseg1E.Hajozas,
+ "k_hallgatozas" => Kepzettseg1E.Hallgatozas,
+ "k_hamisitas" => Kepzettseg1E.Hamisitas,
+ "k_jelek_olvasasa" => Kepzettseg1E.JelekOlvasasa,
+ "k_koncentracio" => Kepzettseg1E.Koncentracio,
+ "k_lovaglas" => Kepzettseg1E.Lovaglas,
+ "k_maszas" => Kepzettseg1E.Maszas,
+ "k_megfigyeles" => Kepzettseg1E.Megfigyeles,
+ "k_meregkeveres" => Kepzettseg1E.Meregkeveres,
+ "k_mesterseg" => Kepzettseg1E.Mesterseg,
+ "k_nyomkereses" => Kepzettseg1E.Nyomkereses,
+ "k_osonas" => Kepzettseg1E.Osonas,
+ "k_rejtozes" => Kepzettseg1E.Rejtozes,
+ "k_szabadulomuveszet" => Kepzettseg1E.Szabadulomuveszet,
+ "k_tudas" => Kepzettseg1E.Tudas,
+ "k_ugras" => Kepzettseg1E.Ugras,
+ "k_uszas" => Kepzettseg1E.Uszas,
+ "k_varazslatismeret" => Kepzettseg1E.Varazslatismeret,
+ "k_zarnyitas" => Kepzettseg1E.Zarnyitas,
+ "k_zsebmetszes" => Kepzettseg1E.Zsebmetszes,
+ _ => throw new ValidationException("invalid kepzettseg: " + kepzettseg),
+ };
+ }
+
+ public static Kepzettseg2E Convert2E(string kepzettseg)
+ {
+ return kepzettseg switch
+ {
+ "k_alkimia" => Kepzettseg2E.Alkimia,
+ "k_alcazas" => Kepzettseg2E.Alcazas,
+ "k_allatidomitas" => Kepzettseg2E.Allatidomitas,
+ "k_csapdak" => Kepzettseg2E.Csapdak,
+ "k_csillagjoslas" => Kepzettseg2E.Csillagjoslas,
+ "k_egyensulyozas" => Kepzettseg2E.Egyensulyozas,
+ "k_eloadas" => Kepzettseg2E.Eloadas,
+ "k_ertekbecsles" => Kepzettseg2E.Ertekbecsles,
+ "k_gyogyitas" => Kepzettseg2E.Gyogyitas,
+ "k_hajozas" => Kepzettseg2E.Hajozas,
+ "k_hallgatozas" => Kepzettseg2E.Hallgatozas,
+ "k_hamisitas" => Kepzettseg2E.Hamisitas,
+ "k_herbalizmus" => Kepzettseg2E.Herbalizmus,
+ "k_historia" => Kepzettseg2E.Historia,
+ "k_jelek_olvasasa" => Kepzettseg2E.JelekOlvasasa,
+ "k_lovaglas" => Kepzettseg2E.Lovaglas,
+ "k_maszas" => Kepzettseg2E.Maszas,
+ "k_megfigyeles" => Kepzettseg2E.Megfigyeles,
+ "k_meregkeveres" => Kepzettseg2E.Meregkeveres,
+ "k_mesterseg" => Kepzettseg2E.Mesterseg,
+ "k_nyomkereses" => Kepzettseg2E.Nyomkereses,
+ "k_okkultizmus" => Kepzettseg2E.Okkultizmus,
+ "k_osonas" => Kepzettseg2E.Osonas,
+ "k_szabadulomuveszet" => Kepzettseg2E.Szabadulomuveszet,
+ "k_ugras" => Kepzettseg2E.Ugras,
+ "k_uszas" => Kepzettseg2E.Uszas,
+ "k_vadonjaras" => Kepzettseg2E.Vadonjaras,
+ "k_zarnyitas" => Kepzettseg2E.Zarnyitas,
+ "k_zsebmetszes" => Kepzettseg2E.Zsebmetszes,
_ => throw new ValidationException("invalid kepzettseg: " + kepzettseg),
};
}
- public static string Convert(this Kepzettseg kepzettseg)
+ public static string Convert(this Kepzettseg1E kepzettseg)
{
return kepzettseg switch
{
- Kepzettseg.Alkimia => "k_alkimia",
- Kepzettseg.Alcazas => "k_alcazas",
- Kepzettseg.Allatidomitas => "k_allatidomitas",
- Kepzettseg.Csapdak => "k_csapdak",
- Kepzettseg.Csillagjoslas => "k_csillagjoslas",
- Kepzettseg.Egyensulyozas => "k_egyensulyozas",
- Kepzettseg.Eloadas => "k_eloadas",
- Kepzettseg.Ertekbecsles => "k_ertekbecsles",
- Kepzettseg.Gyogyitas => "k_gyogyitas",
- Kepzettseg.Hajozas => "k_hajozas",
- Kepzettseg.Hallgatozas => "k_hallgatozas",
- Kepzettseg.Hamisitas => "k_hamisitas",
- Kepzettseg.JelekOlvasasa => "k_jelek_olvasasa",
- Kepzettseg.Koncentracio => "k_koncentracio",
- Kepzettseg.Lovaglas => "k_lovaglas",
- Kepzettseg.Maszas => "k_maszas",
- Kepzettseg.Megfigyeles => "k_megfigyeles",
- Kepzettseg.Meregkeveres => "k_meregkeveres",
- Kepzettseg.Mesterseg => "k_mesterseg",
- Kepzettseg.Nyomkereses => "k_nyomkereses",
- Kepzettseg.Osonas => "k_osonas",
- Kepzettseg.Rejtozes => "k_rejtozes",
- Kepzettseg.Szabadulomuveszet => "k_szabadulomuveszet",
- Kepzettseg.Tudas => "k_tudas",
- Kepzettseg.Ugras => "k_ugras",
- Kepzettseg.Uszas => "k_uszas",
- Kepzettseg.Varazslatismeret => "k_varazslatismeret",
- Kepzettseg.Zarnyitas => "k_zarnyitas",
- Kepzettseg.Zsebmetszes => "k_zsebmetszes",
+ Kepzettseg1E.Alkimia => "k_alkimia",
+ Kepzettseg1E.Alcazas => "k_alcazas",
+ Kepzettseg1E.Allatidomitas => "k_allatidomitas",
+ Kepzettseg1E.Csapdak => "k_csapdak",
+ Kepzettseg1E.Csillagjoslas => "k_csillagjoslas",
+ Kepzettseg1E.Egyensulyozas => "k_egyensulyozas",
+ Kepzettseg1E.Eloadas => "k_eloadas",
+ Kepzettseg1E.Ertekbecsles => "k_ertekbecsles",
+ Kepzettseg1E.Gyogyitas => "k_gyogyitas",
+ Kepzettseg1E.Hajozas => "k_hajozas",
+ Kepzettseg1E.Hallgatozas => "k_hallgatozas",
+ Kepzettseg1E.Hamisitas => "k_hamisitas",
+ Kepzettseg1E.JelekOlvasasa => "k_jelek_olvasasa",
+ Kepzettseg1E.Koncentracio => "k_koncentracio",
+ Kepzettseg1E.Lovaglas => "k_lovaglas",
+ Kepzettseg1E.Maszas => "k_maszas",
+ Kepzettseg1E.Megfigyeles => "k_megfigyeles",
+ Kepzettseg1E.Meregkeveres => "k_meregkeveres",
+ Kepzettseg1E.Mesterseg => "k_mesterseg",
+ Kepzettseg1E.Nyomkereses => "k_nyomkereses",
+ Kepzettseg1E.Osonas => "k_osonas",
+ Kepzettseg1E.Rejtozes => "k_rejtozes",
+ Kepzettseg1E.Szabadulomuveszet => "k_szabadulomuveszet",
+ Kepzettseg1E.Tudas => "k_tudas",
+ Kepzettseg1E.Ugras => "k_ugras",
+ Kepzettseg1E.Uszas => "k_uszas",
+ Kepzettseg1E.Varazslatismeret => "k_varazslatismeret",
+ Kepzettseg1E.Zarnyitas => "k_zarnyitas",
+ Kepzettseg1E.Zsebmetszes => "k_zsebmetszes",
+ _ => throw new ValidationException("invalid kepzettseg: " + kepzettseg),
+ };
+ }
+
+ public static string Convert(this Kepzettseg2E kepzettseg)
+ {
+ return kepzettseg switch
+ {
+ Kepzettseg2E.Alkimia => "k_alkimia",
+ Kepzettseg2E.Alcazas => "k_alcazas",
+ Kepzettseg2E.Allatidomitas => "k_allatidomitas",
+ Kepzettseg2E.Csapdak => "k_csapdak",
+ Kepzettseg2E.Csillagjoslas => "k_csillagjoslas",
+ Kepzettseg2E.Egyensulyozas => "k_egyensulyozas",
+ Kepzettseg2E.Eloadas => "k_eloadas",
+ Kepzettseg2E.Ertekbecsles => "k_ertekbecsles",
+ Kepzettseg2E.Gyogyitas => "k_gyogyitas",
+ Kepzettseg2E.Hajozas => "k_hajozas",
+ Kepzettseg2E.Hallgatozas => "k_hallgatozas",
+ Kepzettseg2E.Hamisitas => "k_hamisitas",
+ Kepzettseg2E.Herbalizmus => "k_herbalizmus",
+ Kepzettseg2E.Historia => "k_historia",
+ Kepzettseg2E.JelekOlvasasa => "k_jelek_olvasasa",
+ Kepzettseg2E.Lovaglas => "k_lovaglas",
+ Kepzettseg2E.Maszas => "k_maszas",
+ Kepzettseg2E.Megfigyeles => "k_megfigyeles",
+ Kepzettseg2E.Meregkeveres => "k_meregkeveres",
+ Kepzettseg2E.Mesterseg => "k_mesterseg",
+ Kepzettseg2E.Nyomkereses => "k_nyomkereses",
+ Kepzettseg2E.Okkultizmus => "k_okkultizmus",
+ Kepzettseg2E.Osonas => "k_osonas",
+ Kepzettseg2E.Szabadulomuveszet => "k_szabadulomuveszet",
+ Kepzettseg2E.Ugras => "k_ugras",
+ Kepzettseg2E.Uszas => "k_uszas",
+ Kepzettseg2E.Vadonjaras => "k_vadonjaras",
+ Kepzettseg2E.Zarnyitas => "k_zarnyitas",
+ Kepzettseg2E.Zsebmetszes => "k_zsebmetszes",
_ => throw new ValidationException("invalid kepzettseg: " + kepzettseg),
};
}
diff --git a/Kemkas.Web/Db/Enums/Osztaly.cs b/Kemkas.Web/Db/Enums/Osztaly.cs
index b1dfeae..3390dac 100644
--- a/Kemkas.Web/Db/Enums/Osztaly.cs
+++ b/Kemkas.Web/Db/Enums/Osztaly.cs
@@ -1,6 +1,6 @@
namespace Kemkas.Web.Db.Enums;
-public enum Osztaly
+public enum Osztaly1E
{
Error = 0, // for unset enum value mapping
Harcos = 1,
@@ -12,4 +12,21 @@ public enum Osztaly
Tolvaj = 7,
Varazslo = 8,
Illuzionista = 9,
+}
+
+public enum Osztaly2E
+{
+ Error = 0, // for unset enum value mapping
+ Harcos = 1,
+ Ijasz = 2,
+ Amazon = 3,
+ Kaloz = 4,
+ Barbar = 5,
+ Pap = 6,
+ Tolvaj = 7,
+ Varazslo = 8,
+ Illuzionista = 9,
+ Dalnok = 10,
+ Druida = 11,
+ Vandor = 12,
}
\ No newline at end of file
diff --git a/Kemkas.Web/Db/Enums/OsztalyExtensions.cs b/Kemkas.Web/Db/Enums/OsztalyExtensions.cs
index bc8af7d..c96c629 100644
--- a/Kemkas.Web/Db/Enums/OsztalyExtensions.cs
+++ b/Kemkas.Web/Db/Enums/OsztalyExtensions.cs
@@ -4,36 +4,76 @@ namespace Kemkas.Web.Db.Enums;
public static class OsztalyExtensions
{
- public static Osztaly Convert(string osztaly)
+ public static Osztaly1E Convert1E(string osztaly)
{
return osztaly switch
{
- "o_harcos" => Osztaly.Harcos,
- "o_ijasz" => Osztaly.Ijasz,
- "o_amazon" => Osztaly.Amazon,
- "o_kaloz" => Osztaly.Kaloz,
- "o_barbar" => Osztaly.Barbar,
- "o_pap" => Osztaly.Pap,
- "o_tolvaj" => Osztaly.Tolvaj,
- "o_varazslo" => Osztaly.Varazslo,
- "o_illuzionista" => Osztaly.Illuzionista,
+ "o_harcos" => Osztaly1E.Harcos,
+ "o_ijasz" => Osztaly1E.Ijasz,
+ "o_amazon" => Osztaly1E.Amazon,
+ "o_kaloz" => Osztaly1E.Kaloz,
+ "o_barbar" => Osztaly1E.Barbar,
+ "o_pap" => Osztaly1E.Pap,
+ "o_tolvaj" => Osztaly1E.Tolvaj,
+ "o_varazslo" => Osztaly1E.Varazslo,
+ "o_illuzionista" => Osztaly1E.Illuzionista,
_ => throw new ValidationException("unknown osztaly: " + osztaly)
};
}
- public static string Convert(this Osztaly osztaly)
+ public static Osztaly2E Convert2E(string osztaly)
{
return osztaly switch
{
- Osztaly.Harcos => "o_harcos",
- Osztaly.Ijasz => "o_ijasz",
- Osztaly.Amazon => "o_amazon",
- Osztaly.Kaloz => "o_kaloz",
- Osztaly.Barbar => "o_barbar",
- Osztaly.Pap => "o_pap",
- Osztaly.Tolvaj => "o_tolvaj",
- Osztaly.Varazslo => "o_varazslo",
- Osztaly.Illuzionista => "o_illuzionista",
+ "o_2e_harcos" => Osztaly2E.Harcos,
+ "o_2e_ijasz" => Osztaly2E.Ijasz,
+ "o_2e_amazon" => Osztaly2E.Amazon,
+ "o_2e_kaloz" => Osztaly2E.Kaloz,
+ "o_2e_barbar" => Osztaly2E.Barbar,
+ "o_2e_pap" => Osztaly2E.Pap,
+ "o_2e_tolvaj" => Osztaly2E.Tolvaj,
+ "o_2e_varazslo" => Osztaly2E.Varazslo,
+ "o_2e_illuzionista" => Osztaly2E.Illuzionista,
+ "o_2e_dalnok" => Osztaly2E.Dalnok,
+ "o_2e_druida" => Osztaly2E.Druida,
+ "o_2e_vandor" => Osztaly2E.Vandor,
+ _ => throw new ValidationException("unknown osztaly: " + osztaly)
+ };
+ }
+
+ public static string Convert(this Osztaly1E osztaly)
+ {
+ return osztaly switch
+ {
+ Osztaly1E.Harcos => "o_harcos",
+ Osztaly1E.Ijasz => "o_ijasz",
+ Osztaly1E.Amazon => "o_amazon",
+ Osztaly1E.Kaloz => "o_kaloz",
+ Osztaly1E.Barbar => "o_barbar",
+ Osztaly1E.Pap => "o_pap",
+ Osztaly1E.Tolvaj => "o_tolvaj",
+ Osztaly1E.Varazslo => "o_varazslo",
+ Osztaly1E.Illuzionista => "o_illuzionista",
+ _ => throw new ValidationException("invalid osztaly!")
+ };
+ }
+
+ public static string Convert(this Osztaly2E osztaly)
+ {
+ return osztaly switch
+ {
+ Osztaly2E.Harcos => "o_2e_harcos",
+ Osztaly2E.Ijasz => "o_2e_ijasz",
+ Osztaly2E.Amazon => "o_2e_amazon",
+ Osztaly2E.Kaloz => "o_2e_kaloz",
+ Osztaly2E.Barbar => "o_2e_barbar",
+ Osztaly2E.Pap => "o_2e_pap",
+ Osztaly2E.Tolvaj => "o_2e_tolvaj",
+ Osztaly2E.Varazslo => "o_2e_varazslo",
+ Osztaly2E.Illuzionista => "o_2e_illuzionista",
+ Osztaly2E.Dalnok => "o_2e_dalnok",
+ Osztaly2E.Druida => "o_2e_druida",
+ Osztaly2E.Vandor => "o_2e_vandor",
_ => throw new ValidationException("invalid osztaly!")
};
}
diff --git a/Kemkas.Web/Db/Migrations/20240214163223_AddSecondEditionModels.Designer.cs b/Kemkas.Web/Db/Migrations/20240214163223_AddSecondEditionModels.Designer.cs
new file mode 100644
index 0000000..6149286
--- /dev/null
+++ b/Kemkas.Web/Db/Migrations/20240214163223_AddSecondEditionModels.Designer.cs
@@ -0,0 +1,690 @@
+//
+using System;
+using Kemkas.Web.Db;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace Kemkas.Web.Db.Migrations
+{
+ [DbContext(typeof(ApplicationDbContext))]
+ [Migration("20240214163223_AddSecondEditionModels")]
+ partial class AddSecondEditionModels
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.0")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.ApplicationRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("NormalizedName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasDatabaseName("RoleNameIndex");
+
+ b.ToTable("AspNetRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.ApplicationUser", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AccessFailedCount")
+ .HasColumnType("integer");
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("text");
+
+ b.Property("Email")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("EmailConfirmed")
+ .HasColumnType("boolean");
+
+ b.Property("LockoutEnabled")
+ .HasColumnType("boolean");
+
+ b.Property("LockoutEnd")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("NormalizedEmail")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("NormalizedUserName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("PasswordHash")
+ .HasColumnType("text");
+
+ b.Property("PhoneNumber")
+ .HasColumnType("text");
+
+ b.Property("PhoneNumberConfirmed")
+ .HasColumnType("boolean");
+
+ b.Property("SecurityStamp")
+ .HasColumnType("text");
+
+ b.Property("TwoFactorEnabled")
+ .HasColumnType("boolean");
+
+ b.Property("UserName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedEmail")
+ .HasDatabaseName("EmailIndex");
+
+ b.HasIndex("NormalizedUserName")
+ .IsUnique()
+ .HasDatabaseName("UserNameIndex");
+
+ b.ToTable("AspNetUsers", (string)null);
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1Felszereles", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IsFegyver")
+ .HasColumnType("boolean");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("Felszerelesek");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1Karakter", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Bolcsesseg")
+ .HasColumnType("smallint");
+
+ b.Property("Egeszseg")
+ .HasColumnType("smallint");
+
+ b.Property("Ero")
+ .HasColumnType("smallint");
+
+ b.Property("Faj")
+ .HasColumnType("integer");
+
+ b.Property("Intelligencia")
+ .HasColumnType("smallint");
+
+ b.Property("IsPublic")
+ .HasColumnType("boolean");
+
+ b.Property("Isten")
+ .HasColumnType("text");
+
+ b.Property("Jellem")
+ .HasColumnType("smallint");
+
+ b.Property("Karizma")
+ .HasColumnType("smallint");
+
+ b.Property("Kor")
+ .HasColumnType("double precision");
+
+ b.Property("Nem")
+ .HasColumnType("text");
+
+ b.Property("Nev")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Osztaly")
+ .HasColumnType("integer");
+
+ b.Property("OwnerUserId")
+ .HasColumnType("integer");
+
+ b.Property("Pajzs")
+ .HasColumnType("text");
+
+ b.Property("Pancel")
+ .HasColumnType("text");
+
+ b.Property("Szint")
+ .HasColumnType("smallint");
+
+ b.Property("Ugyesseg")
+ .HasColumnType("smallint");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OwnerUserId");
+
+ b.ToTable("Karakterek");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1KarakterKepzettseg", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IsTolvajKepzettseg")
+ .HasColumnType("boolean");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("Kepzettseg")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("KarakterKepzettsegek");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1Szintlepes", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("FegyverSpecializacio")
+ .HasColumnType("text");
+
+ b.Property("HpRoll")
+ .HasColumnType("smallint");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("KarakterSzint")
+ .HasColumnType("smallint");
+
+ b.Property("TulajdonsagNoveles")
+ .HasColumnType("smallint");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("Szintlepesek");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Felszereles", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IsFegyver")
+ .HasColumnType("boolean");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("TargyId")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("Felszerelesek2E");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Karakter", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Bolcsesseg")
+ .HasColumnType("smallint");
+
+ b.Property("Egeszseg")
+ .HasColumnType("smallint");
+
+ b.Property("Ero")
+ .HasColumnType("smallint");
+
+ b.Property("Faj")
+ .HasColumnType("integer");
+
+ b.Property("Intelligencia")
+ .HasColumnType("smallint");
+
+ b.Property("IsPublic")
+ .HasColumnType("boolean");
+
+ b.Property("Isten")
+ .HasColumnType("text");
+
+ b.Property("Jellem")
+ .HasColumnType("smallint");
+
+ b.Property("Karizma")
+ .HasColumnType("smallint");
+
+ b.Property("Kor")
+ .HasColumnType("double precision");
+
+ b.Property("Nem")
+ .HasColumnType("text");
+
+ b.Property("Nev")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("OwnerUserId")
+ .HasColumnType("integer");
+
+ b.Property("Pajzs")
+ .HasColumnType("text");
+
+ b.Property("Pancel")
+ .HasColumnType("text");
+
+ b.Property("Szint")
+ .HasColumnType("smallint");
+
+ b.Property("Ugyesseg")
+ .HasColumnType("smallint");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OwnerUserId");
+
+ b.ToTable("Karakterek2E");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2KarakterKepzettseg", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IsTolvajKepzettseg")
+ .HasColumnType("boolean");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("Kepzettseg")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("KarakterKepzettsegek2E");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Szintlepes", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("FegyverSpecializacio")
+ .HasColumnType("text");
+
+ b.Property("HpRoll")
+ .HasColumnType("smallint");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("KarakterSzint")
+ .HasColumnType("smallint");
+
+ b.Property("Osztaly")
+ .HasColumnType("integer");
+
+ b.Property("TolvajExtraKepzettseg")
+ .HasColumnType("integer");
+
+ b.Property("TulajdonsagNoveles")
+ .HasColumnType("smallint");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("Szintlepesek2E");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("FriendlyName")
+ .HasColumnType("text");
+
+ b.Property("Xml")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("DataProtectionKeys");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("text");
+
+ b.Property("ClaimValue")
+ .HasColumnType("text");
+
+ b.Property("RoleId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetRoleClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("text");
+
+ b.Property("ClaimValue")
+ .HasColumnType("text");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserClaims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("ProviderKey")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("text");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("LoginProvider", "ProviderKey");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("AspNetUserLogins", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.Property("RoleId")
+ .HasColumnType("integer");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("AspNetUserRoles", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.Property("LoginProvider")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("Name")
+ .HasMaxLength(128)
+ .HasColumnType("character varying(128)");
+
+ b.Property("Value")
+ .HasColumnType("text");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("AspNetUserTokens", (string)null);
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1Felszereles", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V1Karakter", "Karakter")
+ .WithMany("Felszereles")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1Karakter", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationUser", "OwnerUser")
+ .WithMany()
+ .HasForeignKey("OwnerUserId");
+
+ b.Navigation("OwnerUser");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1KarakterKepzettseg", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V1Karakter", "Karakter")
+ .WithMany("KarakterKepzettsegek")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1Szintlepes", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V1Karakter", "Karakter")
+ .WithMany("Szintlepesek")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Felszereles", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V2Karakter", "Karakter")
+ .WithMany("Felszereles")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Karakter", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationUser", "OwnerUser")
+ .WithMany()
+ .HasForeignKey("OwnerUserId");
+
+ b.Navigation("OwnerUser");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2KarakterKepzettseg", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V2Karakter", "Karakter")
+ .WithMany("KarakterKepzettsegek")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Szintlepes", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V2Karakter", "Karakter")
+ .WithMany("Szintlepesek")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationRole", null)
+ .WithMany()
+ .HasForeignKey("RoleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationUser", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationUser", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationRole", null)
+ .WithMany()
+ .HasForeignKey("RoleId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationUser", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationUser", null)
+ .WithMany()
+ .HasForeignKey("UserId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V1Karakter", b =>
+ {
+ b.Navigation("Felszereles");
+
+ b.Navigation("KarakterKepzettsegek");
+
+ b.Navigation("Szintlepesek");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Karakter", b =>
+ {
+ b.Navigation("Felszereles");
+
+ b.Navigation("KarakterKepzettsegek");
+
+ b.Navigation("Szintlepesek");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Kemkas.Web/Db/Migrations/20240214163223_AddSecondEditionModels.cs b/Kemkas.Web/Db/Migrations/20240214163223_AddSecondEditionModels.cs
new file mode 100644
index 0000000..0b1f079
--- /dev/null
+++ b/Kemkas.Web/Db/Migrations/20240214163223_AddSecondEditionModels.cs
@@ -0,0 +1,148 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Kemkas.Web.Db.Migrations
+{
+ ///
+ public partial class AddSecondEditionModels : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Karakterek2E",
+ columns: table => new
+ {
+ Id = table.Column(type: "uuid", nullable: false),
+ IsPublic = table.Column(type: "boolean", nullable: false),
+ OwnerUserId = table.Column(type: "integer", nullable: true),
+ Nev = table.Column(type: "text", nullable: false),
+ Nem = table.Column(type: "text", nullable: true),
+ Kor = table.Column(type: "double precision", nullable: true),
+ Jellem = table.Column(type: "smallint", nullable: false),
+ Isten = table.Column(type: "text", nullable: true),
+ Faj = table.Column(type: "integer", nullable: false),
+ Ero = table.Column(type: "smallint", nullable: false),
+ Ugyesseg = table.Column(type: "smallint", nullable: false),
+ Egeszseg = table.Column(type: "smallint", nullable: false),
+ Intelligencia = table.Column(type: "smallint", nullable: false),
+ Bolcsesseg = table.Column(type: "smallint", nullable: false),
+ Karizma = table.Column(type: "smallint", nullable: false),
+ Szint = table.Column(type: "smallint", nullable: false),
+ Pancel = table.Column(type: "text", nullable: true),
+ Pajzs = table.Column(type: "text", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Karakterek2E", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Karakterek2E_AspNetUsers_OwnerUserId",
+ column: x => x.OwnerUserId,
+ principalTable: "AspNetUsers",
+ principalColumn: "Id");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Felszerelesek2E",
+ columns: table => new
+ {
+ Id = table.Column(type: "uuid", nullable: false),
+ KarakterId = table.Column(type: "uuid", nullable: false),
+ TargyId = table.Column(type: "text", nullable: false),
+ IsFegyver = table.Column(type: "boolean", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Felszerelesek2E", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Felszerelesek2E_Karakterek2E_KarakterId",
+ column: x => x.KarakterId,
+ principalTable: "Karakterek2E",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "KarakterKepzettsegek2E",
+ columns: table => new
+ {
+ Id = table.Column(type: "uuid", nullable: false),
+ KarakterId = table.Column(type: "uuid", nullable: false),
+ Kepzettseg = table.Column(type: "integer", nullable: false),
+ IsTolvajKepzettseg = table.Column(type: "boolean", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_KarakterKepzettsegek2E", x => x.Id);
+ table.ForeignKey(
+ name: "FK_KarakterKepzettsegek2E_Karakterek2E_KarakterId",
+ column: x => x.KarakterId,
+ principalTable: "Karakterek2E",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Szintlepesek2E",
+ columns: table => new
+ {
+ Id = table.Column(type: "uuid", nullable: false),
+ KarakterId = table.Column(type: "uuid", nullable: false),
+ KarakterSzint = table.Column(type: "smallint", nullable: false),
+ Osztaly = table.Column(type: "integer", nullable: false),
+ HpRoll = table.Column(type: "smallint", nullable: false),
+ TulajdonsagNoveles = table.Column(type: "smallint", nullable: true),
+ FegyverSpecializacio = table.Column(type: "text", nullable: true),
+ TolvajExtraKepzettseg = table.Column(type: "integer", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Szintlepesek2E", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Szintlepesek2E_Karakterek2E_KarakterId",
+ column: x => x.KarakterId,
+ principalTable: "Karakterek2E",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Felszerelesek2E_KarakterId",
+ table: "Felszerelesek2E",
+ column: "KarakterId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Karakterek2E_OwnerUserId",
+ table: "Karakterek2E",
+ column: "OwnerUserId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_KarakterKepzettsegek2E_KarakterId",
+ table: "KarakterKepzettsegek2E",
+ column: "KarakterId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Szintlepesek2E_KarakterId",
+ table: "Szintlepesek2E",
+ column: "KarakterId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Felszerelesek2E");
+
+ migrationBuilder.DropTable(
+ name: "KarakterKepzettsegek2E");
+
+ migrationBuilder.DropTable(
+ name: "Szintlepesek2E");
+
+ migrationBuilder.DropTable(
+ name: "Karakterek2E");
+ }
+ }
+}
diff --git a/Kemkas.Web/Db/Migrations/ApplicationDbContextModelSnapshot.cs b/Kemkas.Web/Db/Migrations/ApplicationDbContextModelSnapshot.cs
index 370a89d..2b5073c 100644
--- a/Kemkas.Web/Db/Migrations/ApplicationDbContextModelSnapshot.cs
+++ b/Kemkas.Web/Db/Migrations/ApplicationDbContextModelSnapshot.cs
@@ -259,6 +259,150 @@ namespace Kemkas.Web.Db.Migrations
b.ToTable("Szintlepesek");
});
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Felszereles", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IsFegyver")
+ .HasColumnType("boolean");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("TargyId")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("Felszerelesek2E");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Karakter", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("Bolcsesseg")
+ .HasColumnType("smallint");
+
+ b.Property("Egeszseg")
+ .HasColumnType("smallint");
+
+ b.Property("Ero")
+ .HasColumnType("smallint");
+
+ b.Property("Faj")
+ .HasColumnType("integer");
+
+ b.Property("Intelligencia")
+ .HasColumnType("smallint");
+
+ b.Property("IsPublic")
+ .HasColumnType("boolean");
+
+ b.Property("Isten")
+ .HasColumnType("text");
+
+ b.Property("Jellem")
+ .HasColumnType("smallint");
+
+ b.Property("Karizma")
+ .HasColumnType("smallint");
+
+ b.Property("Kor")
+ .HasColumnType("double precision");
+
+ b.Property("Nem")
+ .HasColumnType("text");
+
+ b.Property("Nev")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("OwnerUserId")
+ .HasColumnType("integer");
+
+ b.Property("Pajzs")
+ .HasColumnType("text");
+
+ b.Property("Pancel")
+ .HasColumnType("text");
+
+ b.Property("Szint")
+ .HasColumnType("smallint");
+
+ b.Property("Ugyesseg")
+ .HasColumnType("smallint");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OwnerUserId");
+
+ b.ToTable("Karakterek2E");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2KarakterKepzettseg", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("IsTolvajKepzettseg")
+ .HasColumnType("boolean");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("Kepzettseg")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("KarakterKepzettsegek2E");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Szintlepes", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("uuid");
+
+ b.Property("FegyverSpecializacio")
+ .HasColumnType("text");
+
+ b.Property("HpRoll")
+ .HasColumnType("smallint");
+
+ b.Property("KarakterId")
+ .HasColumnType("uuid");
+
+ b.Property("KarakterSzint")
+ .HasColumnType("smallint");
+
+ b.Property("Osztaly")
+ .HasColumnType("integer");
+
+ b.Property("TolvajExtraKepzettseg")
+ .HasColumnType("integer");
+
+ b.Property("TulajdonsagNoveles")
+ .HasColumnType("smallint");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KarakterId");
+
+ b.ToTable("Szintlepesek2E");
+ });
+
modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b =>
{
b.Property("Id")
@@ -427,6 +571,48 @@ namespace Kemkas.Web.Db.Migrations
b.Navigation("Karakter");
});
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Felszereles", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V2Karakter", "Karakter")
+ .WithMany("Felszereles")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Karakter", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.ApplicationUser", "OwnerUser")
+ .WithMany()
+ .HasForeignKey("OwnerUserId");
+
+ b.Navigation("OwnerUser");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2KarakterKepzettseg", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V2Karakter", "Karakter")
+ .WithMany("KarakterKepzettsegek")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Szintlepes", b =>
+ {
+ b.HasOne("Kemkas.Web.Db.Models.V2Karakter", "Karakter")
+ .WithMany("Szintlepesek")
+ .HasForeignKey("KarakterId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Karakter");
+ });
+
modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
{
b.HasOne("Kemkas.Web.Db.Models.ApplicationRole", null)
@@ -486,6 +672,15 @@ namespace Kemkas.Web.Db.Migrations
b.Navigation("Szintlepesek");
});
+
+ modelBuilder.Entity("Kemkas.Web.Db.Models.V2Karakter", b =>
+ {
+ b.Navigation("Felszereles");
+
+ b.Navigation("KarakterKepzettsegek");
+
+ b.Navigation("Szintlepesek");
+ });
#pragma warning restore 612, 618
}
}
diff --git a/Kemkas.Web/Db/Models/V1Karakter.cs b/Kemkas.Web/Db/Models/V1Karakter.cs
index d961712..46d009a 100644
--- a/Kemkas.Web/Db/Models/V1Karakter.cs
+++ b/Kemkas.Web/Db/Models/V1Karakter.cs
@@ -4,6 +4,9 @@ using Kemkas.Web.Db.Enums;
namespace Kemkas.Web.Db.Models;
+///
+/// 1st edition character sheet
+///
public class V1Karakter
{
[Key] public Guid Id { get; set; }
@@ -15,8 +18,8 @@ public class V1Karakter
public double? Kor { get; set; }
public Jellem Jellem { get; set; } = Jellem.Semleges;
public string? Isten { get; set; }
- public Faj Faj { get; set; } = Faj.Ember;
- public Osztaly Osztaly { get; set; }
+ public Faj1E Faj { get; set; } = Faj1E.Ember;
+ public Osztaly1E Osztaly { get; set; }
public byte Ero { get; set; }
public byte Ugyesseg { get; set; }
public byte Egeszseg { get; set; }
diff --git a/Kemkas.Web/Db/Models/V1KarakterKepzettseg.cs b/Kemkas.Web/Db/Models/V1KarakterKepzettseg.cs
index 6650e37..bd23173 100644
--- a/Kemkas.Web/Db/Models/V1KarakterKepzettseg.cs
+++ b/Kemkas.Web/Db/Models/V1KarakterKepzettseg.cs
@@ -9,7 +9,7 @@ public class V1KarakterKepzettseg
[Key]
public Guid Id { get; set; }
public Guid KarakterId { get; set; }
- public Kepzettseg Kepzettseg { get; set; }
+ public Kepzettseg1E Kepzettseg { get; set; }
public bool IsTolvajKepzettseg { get; set; } = false;
[ForeignKey(nameof(KarakterId))]
diff --git a/Kemkas.Web/Db/Models/V1Szintlepes.cs b/Kemkas.Web/Db/Models/V1Szintlepes.cs
index 9145d34..6c465ea 100644
--- a/Kemkas.Web/Db/Models/V1Szintlepes.cs
+++ b/Kemkas.Web/Db/Models/V1Szintlepes.cs
@@ -19,6 +19,8 @@ public class V1Szintlepes
public byte HpRoll { get; set; }
public Tulajdonsag? TulajdonsagNoveles { get; set; }
+
+ // used for both Kaloz/Tengeresz and Harcos
public string? FegyverSpecializacio { get; set; }
[ForeignKey(nameof(KarakterId))]
diff --git a/Kemkas.Web/Db/Models/V2Felszereles.cs b/Kemkas.Web/Db/Models/V2Felszereles.cs
new file mode 100644
index 0000000..3e05a8a
--- /dev/null
+++ b/Kemkas.Web/Db/Models/V2Felszereles.cs
@@ -0,0 +1,17 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace Kemkas.Web.Db.Models;
+
+public class V2Felszereles
+{
+ [Key]
+ public Guid Id { get; set; }
+ public Guid KarakterId { get; set; }
+
+ public string TargyId { get; set; }
+ public bool IsFegyver { get; set; } = true;
+
+ [ForeignKey(nameof(KarakterId))]
+ public virtual V2Karakter Karakter { get; set; }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/Db/Models/V2Karakter.cs b/Kemkas.Web/Db/Models/V2Karakter.cs
new file mode 100644
index 0000000..aed7ce2
--- /dev/null
+++ b/Kemkas.Web/Db/Models/V2Karakter.cs
@@ -0,0 +1,44 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Kemkas.Web.Db.Enums;
+
+namespace Kemkas.Web.Db.Models;
+
+///
+/// 2nd edition character sheet
+///
+public class V2Karakter
+{
+ [Key] public Guid Id { get; set; }
+ public bool IsPublic { get; set; } = false;
+ public int? OwnerUserId { get; set; }
+
+ public string Nev { get; set; }
+ public string? Nem { get; set; }
+ public double? Kor { get; set; }
+ public Jellem Jellem { get; set; } = Jellem.Semleges;
+ public string? Isten { get; set; }
+ public Faj2E Faj { get; set; } = Faj2E.Ember;
+ public byte Ero { get; set; }
+ public byte Ugyesseg { get; set; }
+ public byte Egeszseg { get; set; }
+ public byte Intelligencia { get; set; }
+ public byte Bolcsesseg { get; set; }
+ public byte Karizma { get; set; }
+ public byte Szint { get; set; } = 1;
+
+ public string? Pancel { get; set; }
+ public string? Pajzs { get; set; }
+
+ [ForeignKey(nameof(OwnerUserId))]
+ public ApplicationUser? OwnerUser { get; set; }
+
+ [InverseProperty(nameof(V2KarakterKepzettseg.Karakter))]
+ public virtual IEnumerable KarakterKepzettsegek { get; set; }
+
+ [InverseProperty(nameof(V2Szintlepes.Karakter))]
+ public virtual IEnumerable Szintlepesek { get; set; }
+
+ [InverseProperty(nameof(V2Felszereles.Karakter))]
+ public virtual IEnumerable Felszereles { get; set; }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/Db/Models/V2KarakterKepzettseg.cs b/Kemkas.Web/Db/Models/V2KarakterKepzettseg.cs
new file mode 100644
index 0000000..293f972
--- /dev/null
+++ b/Kemkas.Web/Db/Models/V2KarakterKepzettseg.cs
@@ -0,0 +1,17 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Kemkas.Web.Db.Enums;
+
+namespace Kemkas.Web.Db.Models;
+
+public class V2KarakterKepzettseg
+{
+ [Key]
+ public Guid Id { get; set; }
+ public Guid KarakterId { get; set; }
+ public Kepzettseg2E Kepzettseg { get; set; }
+ public bool IsTolvajKepzettseg { get; set; } = false;
+
+ [ForeignKey(nameof(KarakterId))]
+ public virtual V2Karakter Karakter { get; set; }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/Db/Models/V2Szintlepes.cs b/Kemkas.Web/Db/Models/V2Szintlepes.cs
new file mode 100644
index 0000000..c7f6881
--- /dev/null
+++ b/Kemkas.Web/Db/Models/V2Szintlepes.cs
@@ -0,0 +1,29 @@
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+using Kemkas.Web.Db.Enums;
+
+namespace Kemkas.Web.Db.Models;
+
+public class V2Szintlepes
+{
+ [Key]
+ public Guid Id { get; set; }
+ public Guid KarakterId { get; set; }
+
+ // this is also used for ordering the level ups
+ public byte KarakterSzint { get; set; }
+
+ public Osztaly2E Osztaly { get; set; }
+
+ public byte HpRoll { get; set; }
+ public Tulajdonsag? TulajdonsagNoveles { get; set; }
+
+ // used for both Kaloz/Tengeresz and Harcos
+ public string? FegyverSpecializacio { get; set; }
+
+ // for the 9th level Tolvaj specialty
+ public Kepzettseg2E? TolvajExtraKepzettseg { get; set; }
+
+ [ForeignKey(nameof(KarakterId))]
+ public virtual V2Karakter Karakter { get; set; }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/Kemkas.Web.csproj b/Kemkas.Web/Kemkas.Web.csproj
index e95fe57..b9d83a4 100644
--- a/Kemkas.Web/Kemkas.Web.csproj
+++ b/Kemkas.Web/Kemkas.Web.csproj
@@ -52,6 +52,10 @@
+
+
+
+
diff --git a/Kemkas.Web/Program.cs b/Kemkas.Web/Program.cs
index 603f477..21bdc84 100644
--- a/Kemkas.Web/Program.cs
+++ b/Kemkas.Web/Program.cs
@@ -6,14 +6,14 @@ using Kemkas.Web.Config;
using Microsoft.EntityFrameworkCore;
using Kemkas.Web.Db;
using Kemkas.Web.Db.Models;
-using Kemkas.Web.Services.Character;
+using Kemkas.Web.Services.FirstEdition.Character;
using Kemkas.Web.Services.Identity;
using Microsoft.AspNetCore.DataProtection;
using Microsoft.AspNetCore.HttpOverrides;
using Microsoft.AspNetCore.Identity.UI.Services;
-using OpenTelemetry.Metrics;
-using OpenTelemetry.Resources;
-using OpenTelemetry.Trace;
+// using OpenTelemetry.Metrics;
+// using OpenTelemetry.Resources;
+// using OpenTelemetry.Trace;
using IPNetwork = Microsoft.AspNetCore.HttpOverrides.IPNetwork;
var builder = WebApplication.CreateBuilder(args);
diff --git a/Kemkas.Web/Services/Character/CharacterPersistenceService.cs b/Kemkas.Web/Services/Character/CharacterPersistenceService.cs
deleted file mode 100644
index 5f289b7..0000000
--- a/Kemkas.Web/Services/Character/CharacterPersistenceService.cs
+++ /dev/null
@@ -1,88 +0,0 @@
-using Kemkas.Web.Db;
-using Kemkas.Web.Db.Enums;
-using Kemkas.Web.Db.Models;
-using Kemkas.Web.Services.Identity;
-using Kemkas.Web.ViewModels;
-using Microsoft.EntityFrameworkCore;
-
-namespace Kemkas.Web.Services.Character;
-
-public interface ICharacterPersistenceService
-{
- public Task StoreNewCharacter(V1Karakter karakter, bool isPublic = false);
-
- public Task GetCharacterById(Guid id, bool tracking = false);
-
- public Task> GetAllCharactersOfUser();
-
- public Task UpdateCharacter(V1Karakter karakter, bool isPublic = false);
-}
-
-public class CharacterPersistenceService(
- ApplicationDbContext dbContext,
- ICurrentUserService currentUserService
- ) : ICharacterPersistenceService
-{
-
- public async Task StoreNewCharacter(V1Karakter karakter, bool isPublic = false)
- {
- var currentUser = await currentUserService.GetCurrentUser();
- karakter.OwnerUserId = currentUser?.Id;
- karakter.Id = Guid.Empty;
- karakter.IsPublic = isPublic;
- dbContext.Karakterek.Add(karakter);
- await dbContext.SaveChangesAsync();
- return karakter.Id;
- }
-
- public async Task GetCharacterById(Guid id, bool tracking = false)
- {
- IQueryable queriable = dbContext.Karakterek.Include(x => x.KarakterKepzettsegek)
- .Include(x => x.Szintlepesek)
- .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)
- {
- return entity;
- }
-
- var currentUser = await currentUserService.GetCurrentUser();
- return entity.OwnerUserId == currentUser?.Id ? entity : null;
- }
-
- public async Task> GetAllCharactersOfUser()
- {
- var currentUser = await currentUserService.GetCurrentUser();
- if (currentUser is null)
- {
- return [];
- }
-
- var characters = await dbContext.Karakterek
- .Where(k => k.OwnerUserId == currentUser.Id)
- .Select(k => new CharacterListItemDto
- {
- Id = k.Id,
- Name = k.Nev,
- Szint = k.Szint,
- Faj = k.Faj.Convert(),
- Osztaly = k.Osztaly.Convert(),
- Edition = "1e"
- })
- .ToListAsync();
-
- return characters;
- }
-
- public async Task UpdateCharacter(V1Karakter karakter, bool isPublic = false)
- {
- karakter.IsPublic = isPublic;
- dbContext.Karakterek.Attach(karakter);
- await dbContext.SaveChangesAsync();
- }
-}
\ No newline at end of file
diff --git a/Kemkas.Web/Services/Character/CharacterDtoToDbModelService.cs b/Kemkas.Web/Services/FirstEdition/Character/Character1EDtoToDbModelService.cs
similarity index 78%
rename from Kemkas.Web/Services/Character/CharacterDtoToDbModelService.cs
rename to Kemkas.Web/Services/FirstEdition/Character/Character1EDtoToDbModelService.cs
index b5555c7..09dfe08 100644
--- a/Kemkas.Web/Services/Character/CharacterDtoToDbModelService.cs
+++ b/Kemkas.Web/Services/FirstEdition/Character/Character1EDtoToDbModelService.cs
@@ -3,18 +3,18 @@ using Kemkas.Web.Db.Enums;
using Kemkas.Web.Db.Models;
using Kemkas.Web.ViewModels;
-namespace Kemkas.Web.Services.Character;
+namespace Kemkas.Web.Services.FirstEdition.Character;
-public interface ICharacterDtoToDbModelService
+public interface ICharacter1EDtoToDbModelService
{
- public V1Karakter Convert(CharacterDto dto);
+ public V1Karakter Convert(Character1eDto dto);
- public void Update(V1Karakter original, CharacterDto dto);
+ public void Update(V1Karakter original, Character1eDto dto);
}
-public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
+public class Character1EDtoToDbModelService : ICharacter1EDtoToDbModelService
{
- public V1Karakter Convert(CharacterDto dto)
+ public V1Karakter Convert(Character1eDto dto)
{
var karakter = new V1Karakter
{
@@ -23,8 +23,8 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
Kor = dto.Kor,
Jellem = JellemExtensions.Convert(dto.Jellem),
Isten = dto.Isten,
- Faj = FajExtensions.Convert(dto.Faj),
- Osztaly = OsztalyExtensions.Convert(dto.Osztaly),
+ Faj = FajExtensions.Convert1E(dto.Faj),
+ Osztaly = OsztalyExtensions.Convert1E(dto.Osztaly),
Ero = dto.Tulajdonsagok.Ero,
Ugyesseg = dto.Tulajdonsagok.Ugy,
Egeszseg = dto.Tulajdonsagok.Egs,
@@ -32,10 +32,10 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
Bolcsesseg = dto.Tulajdonsagok.Bol,
Karizma = dto.Tulajdonsagok.Kar,
Szint = dto.Szint,
+ Pajzs = dto.Felszereles.PajzsId,
+ Pancel = dto.Felszereles.PancelId
};
karakter.KarakterKepzettsegek = ConvertKepzettsegek(dto, karakter);
- karakter.Pajzs = dto.Felszereles.PajzsId;
- karakter.Pancel = dto.Felszereles.PancelId;
karakter.Felszereles = dto.Felszereles.FegyverIds.Select(x => new V1Felszereles
{
Karakter = karakter,
@@ -47,15 +47,15 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
return karakter;
}
- public void Update(V1Karakter original, CharacterDto dto)
+ public void Update(V1Karakter original, Character1eDto 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.Faj = FajExtensions.Convert1E(dto.Faj);
+ original.Osztaly = OsztalyExtensions.Convert1E(dto.Osztaly);
original.Ero = dto.Tulajdonsagok.Ero;
original.Ugyesseg = dto.Tulajdonsagok.Ugy;
original.Egeszseg = dto.Tulajdonsagok.Egs;
@@ -76,7 +76,7 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
}
// TODO: this is unnecessary duplication of business logic!!
- private static List ConvertSzintLepes(CharacterDto dto, V1Karakter karakter)
+ private static List ConvertSzintLepes(Character1eDto dto, V1Karakter karakter)
{
if (dto.HpRolls.Count < dto.Szint - 2)
{
@@ -103,15 +103,15 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
// OsztalySzint = 1,
HpRoll = karakter.Osztaly switch // TODO: duplication of logic!!
{
- Osztaly.Barbar => 12,
- Osztaly.Amazon or Osztaly.Harcos or Osztaly.Kaloz or Osztaly.Ijasz => 10,
- Osztaly.Pap => 8,
- Osztaly.Tolvaj => 6,
- Osztaly.Varazslo or Osztaly.Illuzionista => 4,
+ Osztaly1E.Barbar => 12,
+ Osztaly1E.Amazon or Osztaly1E.Harcos or Osztaly1E.Kaloz or Osztaly1E.Ijasz => 10,
+ Osztaly1E.Pap => 8,
+ Osztaly1E.Tolvaj => 6,
+ Osztaly1E.Varazslo or Osztaly1E.Illuzionista => 4,
_ => throw new ArgumentOutOfRangeException(nameof(karakter.Osztaly), karakter.Osztaly,
"invalid osztaly!")
},
- FegyverSpecializacio = karakter.Osztaly == Osztaly.Harcos ? dto.HarcosSpecializaciok[0] : null,
+ FegyverSpecializacio = karakter.Osztaly == Osztaly1E.Harcos ? dto.HarcosSpecializaciok[0] : null,
};
return Enumerable.Range(2, count: dto.Szint - 1).Select(szint =>
@@ -131,13 +131,13 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
}).Prepend(level1).ToList();
}
- private static List ConvertKepzettsegek(CharacterDto dto, V1Karakter karakter)
+ private static List ConvertKepzettsegek(Character1eDto dto, V1Karakter karakter)
{
var kepzettsegek = dto.Kepzettsegek.Select(x => new V1KarakterKepzettseg
{
Karakter = karakter,
IsTolvajKepzettseg = false,
- Kepzettseg = KepzettsegExtensions.Convert(x),
+ Kepzettseg = KepzettsegExtensions.Convert1E(x),
}).ToList();
if (dto.Tolvajkepzettsegek != null)
{
@@ -145,7 +145,7 @@ public class CharacterDtoToDbModelService : ICharacterDtoToDbModelService
{
Karakter = karakter,
IsTolvajKepzettseg = true,
- Kepzettseg = KepzettsegExtensions.Convert(x),
+ Kepzettseg = KepzettsegExtensions.Convert1E(x),
}));
}
return kepzettsegek;
diff --git a/Kemkas.Web/Services/Character/CharacterDbModelToDtoService.cs b/Kemkas.Web/Services/FirstEdition/Character/CharacterDbModelToDtoService.cs
similarity index 74%
rename from Kemkas.Web/Services/Character/CharacterDbModelToDtoService.cs
rename to Kemkas.Web/Services/FirstEdition/Character/CharacterDbModelToDtoService.cs
index 7144ec6..4c5ab97 100644
--- a/Kemkas.Web/Services/Character/CharacterDbModelToDtoService.cs
+++ b/Kemkas.Web/Services/FirstEdition/Character/CharacterDbModelToDtoService.cs
@@ -2,18 +2,18 @@ using Kemkas.Web.Db.Enums;
using Kemkas.Web.Db.Models;
using Kemkas.Web.ViewModels;
-namespace Kemkas.Web.Services.Character;
+namespace Kemkas.Web.Services.FirstEdition.Character;
public interface ICharacterDbModelToDtoService
{
- public CharacterDto Convert(V1Karakter entity);
+ public Character1eDto Convert(V1Karakter entity);
}
public class CharacterDbModelToDtoService : ICharacterDbModelToDtoService
{
- public CharacterDto Convert(V1Karakter entity)
+ public Character1eDto Convert(V1Karakter entity)
{
- return new CharacterDto
+ return new Character1eDto
{
Name = entity.Nev,
Nem = entity.Nem,
@@ -36,8 +36,8 @@ public class CharacterDbModelToDtoService : ICharacterDbModelToDtoService
Szint = entity.Szint,
HpRolls = entity.Szintlepesek.OrderBy(x => x.KarakterSzint).Skip(1).Select(x => x.HpRoll).ToList(),
TulajdonsagNovelesek = entity.Szintlepesek.OrderBy(x => x.KarakterSzint).Select(x => x.TulajdonsagNoveles).Where(x => x is not null).Cast().Select(x => x.Convert()).ToList(),
- HarcosSpecializaciok = entity.Osztaly == Osztaly.Harcos ? entity.Szintlepesek.OrderBy(x => x.KarakterSzint).Select(x => x.FegyverSpecializacio).Where(x => x != null).Cast().ToList() : [],
- KalozKritikus = entity.Osztaly == Osztaly.Kaloz ? entity.Szintlepesek.OrderBy(x => x.KarakterSzint).Select(x => x.FegyverSpecializacio).Where(x => x != null).Cast().ToList() : [],
+ HarcosSpecializaciok = entity.Osztaly == Osztaly1E.Harcos ? entity.Szintlepesek.OrderBy(x => x.KarakterSzint).Select(x => x.FegyverSpecializacio).Where(x => x != null).Cast().ToList() : [],
+ KalozKritikus = entity.Osztaly == Osztaly1E.Kaloz ? entity.Szintlepesek.OrderBy(x => x.KarakterSzint).Select(x => x.FegyverSpecializacio).Where(x => x != null).Cast().ToList() : [],
Felszereles = new KarakterFelszerelesDto
{
PajzsId = entity.Pajzs,
diff --git a/Kemkas.Web/Services/Character/CharacterServices.cs b/Kemkas.Web/Services/FirstEdition/Character/CharacterServices.cs
similarity index 76%
rename from Kemkas.Web/Services/Character/CharacterServices.cs
rename to Kemkas.Web/Services/FirstEdition/Character/CharacterServices.cs
index d6efc77..bd2e9d9 100644
--- a/Kemkas.Web/Services/Character/CharacterServices.cs
+++ b/Kemkas.Web/Services/FirstEdition/Character/CharacterServices.cs
@@ -1,6 +1,7 @@
using Kemkas.Web.Services.Identity;
+using Kemkas.Web.Services.Shared;
-namespace Kemkas.Web.Services.Character;
+namespace Kemkas.Web.Services.FirstEdition.Character;
public static class ServiceCollectionExtensions
{
@@ -9,7 +10,7 @@ public static class ServiceCollectionExtensions
serviceCollection.AddScoped();
serviceCollection.AddTransient();
- serviceCollection.AddTransient();
+ serviceCollection.AddTransient();
serviceCollection.AddTransient();
serviceCollection.AddScoped();
return serviceCollection;
diff --git a/Kemkas.Web/Services/Character/CharacterValidationService.cs b/Kemkas.Web/Services/FirstEdition/Character/CharacterValidationService.cs
similarity index 59%
rename from Kemkas.Web/Services/Character/CharacterValidationService.cs
rename to Kemkas.Web/Services/FirstEdition/Character/CharacterValidationService.cs
index 9bfb5aa..9f35636 100644
--- a/Kemkas.Web/Services/Character/CharacterValidationService.cs
+++ b/Kemkas.Web/Services/FirstEdition/Character/CharacterValidationService.cs
@@ -1,15 +1,15 @@
using Kemkas.Web.ViewModels;
-namespace Kemkas.Web.Services.Character;
+namespace Kemkas.Web.Services.FirstEdition.Character;
public interface ICharacterValidationService
{
- public string? Validate(CharacterDto dto);
+ public string? Validate(Character1eDto dto);
}
public class CharacterValidationService : ICharacterValidationService
{
- public string? Validate(CharacterDto dto)
+ public string? Validate(Character1eDto dto)
{
// TODO: add validation!!
return null;
diff --git a/Kemkas.Web/Services/SecondEdition/Character/Character2EDtoToDbModelService.cs b/Kemkas.Web/Services/SecondEdition/Character/Character2EDtoToDbModelService.cs
new file mode 100644
index 0000000..1f67a8a
--- /dev/null
+++ b/Kemkas.Web/Services/SecondEdition/Character/Character2EDtoToDbModelService.cs
@@ -0,0 +1,82 @@
+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(Character2eDto dto);
+
+ public void Update(V2Karakter original, Character2eDto dto);
+}
+
+public class Character1EDtoToDbModelService : ICharacter2EDtoToDbModelService
+{
+ public V2Karakter Convert(Character2eDto 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.PancelId,
+ Pancel = dto.Felszereles.PancelId
+ };
+
+ karakter.KarakterKepzettsegek = ConvertKarakterKepzettsegek(dto, karakter);
+ karakter.Felszereles = dto.Felszereles.FegyverIds.Select(x => new V2Felszereles
+ {
+ Karakter = karakter,
+ IsFegyver = true,
+ TargyId = x,
+ }).ToList();
+ 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();
+
+ return karakter;
+ }
+
+ public void Update(V2Karakter original, Character2eDto dto)
+ {
+ throw new NotImplementedException();
+ }
+
+ private static List ConvertKarakterKepzettsegek(Character2eDto 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;
+ }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/Services/Shared/CharacterPersistenceService.cs b/Kemkas.Web/Services/Shared/CharacterPersistenceService.cs
new file mode 100644
index 0000000..0d9cae2
--- /dev/null
+++ b/Kemkas.Web/Services/Shared/CharacterPersistenceService.cs
@@ -0,0 +1,147 @@
+using Kemkas.Web.Db;
+using Kemkas.Web.Db.Enums;
+using Kemkas.Web.Db.Models;
+using Kemkas.Web.Services.Identity;
+using Kemkas.Web.ViewModels;
+using Microsoft.EntityFrameworkCore;
+
+namespace Kemkas.Web.Services.Shared;
+
+public interface ICharacterPersistenceService
+{
+ public Task StoreNewCharacter1E(V1Karakter karakter, bool isPublic = false);
+
+ public Task StoreNewCharacter2E(V2Karakter karakter, bool isPublic = false);
+
+ public Task GetCharacter1EById(Guid id, bool tracking = false);
+
+ public Task GetCharacter2EById(Guid id, bool tracking = false);
+
+ public Task> GetAllCharactersOfUser();
+
+ public Task UpdateCharacter1E(V1Karakter karakter, bool isPublic = false);
+
+ public Task UpdateCharacter2E(V2Karakter karakter, bool isPublic = false);
+}
+
+public class CharacterPersistenceService(
+ ApplicationDbContext dbContext,
+ ICurrentUserService currentUserService
+ ) : ICharacterPersistenceService
+{
+
+ public async Task StoreNewCharacter1E(V1Karakter karakter, bool isPublic = false)
+ {
+ var currentUser = await currentUserService.GetCurrentUser();
+ karakter.OwnerUserId = currentUser?.Id;
+ karakter.Id = Guid.Empty;
+ karakter.IsPublic = isPublic;
+ dbContext.Karakterek.Add(karakter);
+ await dbContext.SaveChangesAsync();
+ return karakter.Id;
+ }
+
+ public async Task StoreNewCharacter2E(V2Karakter karakter, bool isPublic = false)
+ {
+ var currentUser = await currentUserService.GetCurrentUser();
+ karakter.OwnerUserId = currentUser?.Id;
+ karakter.Id = Guid.Empty;
+ karakter.IsPublic = isPublic;
+ dbContext.Karakterek2E.Add(karakter);
+ await dbContext.SaveChangesAsync();
+ return karakter.Id;
+ }
+
+ public async Task GetCharacter1EById(Guid id, bool tracking = false)
+ {
+ IQueryable queriable = dbContext.Karakterek.Include(x => x.KarakterKepzettsegek)
+ .Include(x => x.Szintlepesek)
+ .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)
+ {
+ return entity;
+ }
+
+ var currentUser = await currentUserService.GetCurrentUser();
+ return entity.OwnerUserId == currentUser?.Id ? entity : null;
+ }
+
+ public async Task GetCharacter2EById(Guid id, bool tracking = false)
+ {
+ IQueryable queriable = dbContext.Karakterek2E.Include(x => x.KarakterKepzettsegek)
+ .Include(x => x.Szintlepesek)
+ .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)
+ {
+ return entity;
+ }
+
+ var currentUser = await currentUserService.GetCurrentUser();
+ return entity.OwnerUserId == currentUser?.Id ? entity : null;
+ }
+
+ public async Task> GetAllCharactersOfUser()
+ {
+ var currentUser = await currentUserService.GetCurrentUser();
+ if (currentUser is null)
+ {
+ return [];
+ }
+
+ var characters = await dbContext.Karakterek
+ .Where(k => k.OwnerUserId == currentUser.Id)
+ .Select(k => new CharacterListItemDto
+ {
+ Id = k.Id,
+ Name = k.Nev,
+ Szint = k.Szint,
+ Faj = k.Faj.Convert(),
+ Osztaly = k.Osztaly.Convert(),
+ Edition = "1e"
+ })
+ .ToListAsync();
+
+ var characters2E = await dbContext.Karakterek2E
+ .Where(k => k.OwnerUserId == currentUser.Id)
+ .Select(k => new CharacterListItemDto
+ {
+ Id = k.Id,
+ Name = k.Nev,
+ Szint = k.Szint,
+ Faj = k.Faj.Convert(),
+ Osztaly = "TODO!", // TODO: support for multiclass characters
+ Edition = "2e"
+ })
+ .ToListAsync();
+
+ characters.AddRange(characters2E);
+
+ return characters;
+ }
+
+ public async Task UpdateCharacter1E(V1Karakter karakter, bool isPublic = false)
+ {
+ karakter.IsPublic = isPublic;
+ dbContext.Karakterek.Attach(karakter);
+ await dbContext.SaveChangesAsync();
+ }
+
+ public async Task UpdateCharacter2E(V2Karakter karakter, bool isPublic = false)
+ {
+ karakter.IsPublic = isPublic;
+ dbContext.Karakterek2E.Attach(karakter);
+ await dbContext.SaveChangesAsync();
+ }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/ViewModels/CharacterDto.cs b/Kemkas.Web/ViewModels/Character1eDto.cs
similarity index 98%
rename from Kemkas.Web/ViewModels/CharacterDto.cs
rename to Kemkas.Web/ViewModels/Character1eDto.cs
index cbaa420..6e2ef60 100644
--- a/Kemkas.Web/ViewModels/CharacterDto.cs
+++ b/Kemkas.Web/ViewModels/Character1eDto.cs
@@ -3,7 +3,7 @@ using System.Text.Json.Serialization;
namespace Kemkas.Web.ViewModels;
-public struct CharacterDto
+public struct Character1eDto
{
[Required]
[JsonPropertyName("name")]
diff --git a/Kemkas.Web/ViewModels/Character2eDto.cs b/Kemkas.Web/ViewModels/Character2eDto.cs
new file mode 100644
index 0000000..60cd3f9
--- /dev/null
+++ b/Kemkas.Web/ViewModels/Character2eDto.cs
@@ -0,0 +1,46 @@
+using System.ComponentModel.DataAnnotations;
+using System.Text.Json.Serialization;
+
+namespace Kemkas.Web.ViewModels;
+
+public struct Character2eDto
+{
+ [Required]
+ [JsonPropertyName("nev")]
+ public string Nev { get; set; }
+
+ [JsonPropertyName("nem")]
+ public string? Nem { get; set; }
+
+ [JsonPropertyName("kor")]
+ public double? Kor { get; set; }
+
+ [JsonPropertyName("jellem")]
+ public string Jellem { get; set; }
+
+ [JsonPropertyName("isten")]
+ public string? Isten { get; set; }
+
+ [JsonPropertyName("faj")]
+ public string Faj { get; set; }
+
+ [JsonPropertyName("tulajdonsagok")]
+ public KarakterTulajdonsagokDto Tulajdonsagok { get; set; }
+
+ [JsonPropertyName("kepzettsegek")]
+ public IList Kepzettsegek { get; set; }
+
+ [JsonPropertyName("tolvajkepzettsegek")]
+ public IList? Tolvajkepzettsegek { get; set; }
+
+ [JsonPropertyName("szint")]
+ public byte Szint { get; set; }
+
+ [JsonPropertyName("szintlepesek")]
+ public IList Szintlepesek { get; set; }
+
+ [JsonPropertyName("felszereles")]
+ public KarakterFelszerelesDto Felszereles { get; set; }
+
+ public bool? IsPublic { get; set; }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/ViewModels/KarakterFelszerelesDto.cs b/Kemkas.Web/ViewModels/KarakterFelszerelesDto.cs
index fc58b57..702534e 100644
--- a/Kemkas.Web/ViewModels/KarakterFelszerelesDto.cs
+++ b/Kemkas.Web/ViewModels/KarakterFelszerelesDto.cs
@@ -2,6 +2,9 @@ using System.Text.Json.Serialization;
namespace Kemkas.Web.ViewModels;
+///
+/// currently the same for 1st edition and 2nd edition, be cautious!
+///
public struct KarakterFelszerelesDto
{
[JsonPropertyName("pancelID")]
diff --git a/Kemkas.Web/ViewModels/KarakterTulajdonsagokDto.cs b/Kemkas.Web/ViewModels/KarakterTulajdonsagokDto.cs
index ea27e44..d8c8503 100644
--- a/Kemkas.Web/ViewModels/KarakterTulajdonsagokDto.cs
+++ b/Kemkas.Web/ViewModels/KarakterTulajdonsagokDto.cs
@@ -2,6 +2,9 @@ using System.Text.Json.Serialization;
namespace Kemkas.Web.ViewModels;
+///
+/// currently the same for 1st edition and 2nd edition, be cautious!
+///
public struct KarakterTulajdonsagokDto
{
[JsonPropertyName("t_ero")]
diff --git a/Kemkas.Web/ViewModels/Szintlepes.cs b/Kemkas.Web/ViewModels/Szintlepes.cs
new file mode 100644
index 0000000..2f2e451
--- /dev/null
+++ b/Kemkas.Web/ViewModels/Szintlepes.cs
@@ -0,0 +1,24 @@
+using System.Text.Json.Serialization;
+
+namespace Kemkas.Web.ViewModels;
+
+public struct Szintlepes
+{
+ [JsonPropertyName("osztaly")]
+ public string Osztaly { get; set; }
+
+ [JsonPropertyName("HProll")]
+ public byte HProll { get; set; }
+
+ [JsonPropertyName("tolvajExtraKepzettseg")]
+ public string? TolvajExtraKepzettseg { get; set; }
+
+ [JsonPropertyName("harcosFegyver")]
+ public string? HarcosFegyver { get; set; }
+
+ [JsonPropertyName("kalozKritikus")]
+ public string? KalozKritikus { get; set; }
+
+ [JsonPropertyName("tulajdonsagNoveles")]
+ public string? TulajdonsagNoveles { get; set; }
+}
\ No newline at end of file
diff --git a/Kemkas.Web/ViewModels/WeatherForecast.cs b/Kemkas.Web/ViewModels/WeatherForecast.cs
deleted file mode 100644
index 3a7b8e2..0000000
--- a/Kemkas.Web/ViewModels/WeatherForecast.cs
+++ /dev/null
@@ -1,12 +0,0 @@
-namespace Kemkas.Web.ViewModels;
-
-public class WeatherForecast
-{
- public DateOnly Date { get; set; }
-
- public int TemperatureC { get; set; }
-
- public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
-
- public string? Summary { get; set; }
-}
diff --git a/Kemkas.Web/frontend/src/App.tsx b/Kemkas.Web/frontend/src/App.tsx
index 9816d8d..877e027 100644
--- a/Kemkas.Web/frontend/src/App.tsx
+++ b/Kemkas.Web/frontend/src/App.tsx
@@ -62,7 +62,7 @@ function App(props: {faro?: Faro}) {
{
path: "/1e/karakter/:id",
element: ,
- loader: args => fetch(`${window.location.origin}/api/Character/${args.params.id}`),
+ loader: args => fetch(`${window.location.origin}/api/Character1E/${args.params.id}`),
ErrorBoundary: ErrorBoundary,
},
{
@@ -77,7 +77,7 @@ function App(props: {faro?: Faro}) {
{
path: "/2e/karakter/:id",
element: