diff --git a/.github/workflows/test-integration-jwt.yml b/.github/workflows/test-integration-jwt.yml index c3eabe1c3..0f3c5e928 100644 --- a/.github/workflows/test-integration-jwt.yml +++ b/.github/workflows/test-integration-jwt.yml @@ -22,7 +22,7 @@ jobs: - app-type: jwt-with-angular-app arg: 'import-jdl' - app-type: jwt-with-blazor-app - arg: 'blazor' + arg: 'import-jdl blazor' - app-type: jwt-with-mssql-app arg: 'no' - app-type: jwt-with-mysql-app diff --git a/generators/client/templates/blazor/src/Project.Client/Project.Client.csproj.ejs b/generators/client/templates/blazor/src/Project.Client/Project.Client.csproj.ejs index e6ed62f3d..d7913b748 100644 --- a/generators/client/templates/blazor/src/Project.Client/Project.Client.csproj.ejs +++ b/generators/client/templates/blazor/src/Project.Client/Project.Client.csproj.ejs @@ -84,6 +84,7 @@ + diff --git a/generators/client/templates/blazor/src/Project.Client/Services/EntityServices/AbstractEntityService.cs.ejs b/generators/client/templates/blazor/src/Project.Client/Services/EntityServices/AbstractEntityService.cs.ejs index 74ce5fb48..d20280464 100644 --- a/generators/client/templates/blazor/src/Project.Client/Services/EntityServices/AbstractEntityService.cs.ejs +++ b/generators/client/templates/blazor/src/Project.Client/Services/EntityServices/AbstractEntityService.cs.ejs @@ -16,6 +16,8 @@ using System; using System.Collections.Generic; using System.Net.Http; using System.Net.Http.Json; +using System.Text.Json; +using System.Text.Json.Serialization; using System.Threading.Tasks; using <%= namespace %>.Client.Models; using Microsoft.AspNetCore.Components.Authorization; @@ -26,6 +28,7 @@ namespace <%= namespace %>.Client.Services.EntityServices { private const string AuthorizationHeader = "Authorization"; private readonly AuthenticationStateProvider _authenticationStateProvider; + private readonly JsonSerializerOptions _options; protected readonly HttpClient _httpClient; @@ -44,26 +47,35 @@ namespace <%= namespace %>.Client.Services.EntityServices _httpClient.DefaultRequestHeaders.Add(AuthorizationHeader, $"Bearer {JwtToken.IdToken}"); } BaseUrl = baseUrl; + _options = new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + Converters = + { + new JsonStringEnumConverter(JsonNamingPolicy.CamelCase), + } + }; } public virtual async Task> GetAll() { - return await _httpClient.GetFromJsonAsync>(BaseUrl); + return await _httpClient.GetFromJsonAsync>(BaseUrl, _options); } public virtual async Task Get(string id) { - return await _httpClient.GetFromJsonAsync($"{BaseUrl}/{id}"); + return await _httpClient.GetFromJsonAsync($"{BaseUrl}/{id}", _options); } public virtual async Task Add(T model) { - await _httpClient.PostAsJsonAsync(BaseUrl,model); + await _httpClient.PostAsJsonAsync(BaseUrl, model, _options); } public virtual async Task Update(T model) { - await _httpClient.PutAsJsonAsync(BaseUrl, model); + await _httpClient.PutAsJsonAsync(BaseUrl, model, _options); } public virtual async Task Delete(string id) diff --git a/generators/entity-client/templates/blazor/src/Project.Client/Models/Model.cs.ejs b/generators/entity-client/templates/blazor/src/Project.Client/Models/Model.cs.ejs index 6f12d78ab..70a25684b 100644 --- a/generators/entity-client/templates/blazor/src/Project.Client/Models/Model.cs.ejs +++ b/generators/entity-client/templates/blazor/src/Project.Client/Models/Model.cs.ejs @@ -30,6 +30,7 @@ using <%= namespace %>.Crosscutting.Enums; <%_ } _%> using System; using System.Collections.Generic; +using System.ComponentModel.DataAnnotations; namespace <%= namespace %>.Client.Models { @@ -51,7 +52,7 @@ namespace <%= namespace %>.Client.Models [Required] <%_ } _%> <%_ if (fields[idx].fieldIsEnum) { _%> - public <%= fields[idx].fieldType %>? <%= fieldNamePascalized %> { get; set; } + public <%= fields[idx].fieldType %> <%= fieldNamePascalized %> { get; set; } <%_ } else { _%> public <%= fieldType %> <%= fieldNamePascalized %> { get; set; } <%_ } _%> diff --git a/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/Entity.razor.ejs b/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/Entity.razor.ejs index e266d95ad..7a7ba111c 100644 --- a/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/Entity.razor.ejs +++ b/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/Entity.razor.ejs @@ -50,7 +50,7 @@ _%> @if (<%= entityClassNamePluralized %>.Count == 0) {
- No <%= lowerCasedEntityClassPlural %> found + No <%= entityClassNamePluralized %> found
} else @@ -58,13 +58,13 @@ _%>
- + <%_ fields.forEach(field => { _%> <%_ }); _%> <%_ relationships.forEach(relation => { - if(relation.relationshipType === 'one-to-one') { _%> + if(relation.relationshipType === 'one-to-one' || relation.relationshipType === 'many-to-one' || ((relation.relationshipType === 'many-to-many' || relation.relationshipType === 'one-to-many') && relation.ownerSide === true)) { _%> <%_ } }); _%> @@ -80,14 +80,23 @@ _%> <%_ }); _%> <%_ relationships.forEach(relation => { - if(relation.relationshipType === 'one-to-one') { _%> + if(relation.relationshipType === 'one-to-one' || relation.relationshipType === 'many-to-one') { _%> + <%_ } else if ((relation.relationshipType === 'many-to-many' || relation.relationshipType === 'one-to-many') && relation.ownerSide === true ) { _%> + <%_ } }); _%> diff --git a/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/EntityDetail.razor.ejs b/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/EntityDetail.razor.ejs index d7c772938..8921e83ce 100644 --- a/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/EntityDetail.razor.ejs +++ b/generators/entity-client/templates/blazor/src/Project.Client/Pages/Entities/Entity/EntityDetail.razor.ejs @@ -28,19 +28,29 @@ _%> @<%= entityClassName %>.<%= field.fieldNamePascalized %> <%_ }); _%> - <%_ relationships.forEach(relation => { - if(relation.relationshipType === 'one-to-one') { _%> -
<%= relation.otherEntityNamePascalized %>
+ <%_ relationships.forEach(relation => { + if(relation.relationshipType === 'one-to-one' || relation.relationshipType === 'many-to-one' ) { _%> +
<%= relation.relationshipFieldNamePascalized %>
- @if (<%= entityClassName %>.<%= relation.otherEntityNamePascalized %> != null) + @if (<%= entityClassName %>.<%= relation.relationshipFieldNamePascalized %> != null) { }
- <%_ } - }); _%> + <%_ } else if ((relation.relationshipType === 'many-to-many' || relation.relationshipType === 'one-to-many') && relation.ownerSide === true ) { _%> +
<%= relation.relationshipFieldNamePascalized %>
+
+ @foreach (var <%= relation.otherEntityNameLowerCased %> in <%= entityClassName %>.<%= relation.relationshipFieldNamePascalizedPlural %>){ + + @<%= relation.otherEntityNameLowerCased %>.Id + @if (<%= relation.otherEntityNameLowerCased %> != <%= entityClassName %>.<%= relation.relationshipFieldNamePascalizedPlural %>.Last()) { , } + + } +
+ <%_ + }}); _%>
ID<%= field.fieldNameHumanized %><%= relation.relationshipNameHumanized %>@<%= lowerCasedEntityClass %>.<%= field.fieldNamePascalized %> - @if (<%= lowerCasedEntityClass %>.Region != null) + @if (<%= lowerCasedEntityClass %>.<%= relation.relationshipFieldNamePascalized %> != null) { } + + @foreach (var <%= relation.relationshipFieldNameLowerCased %> in <%= lowerCasedEntityClass %>.<%= relation.relationshipFieldNamePascalizedPlural %>){ + + @<%= relation.relationshipFieldNameLowerCased %>.Id + @if (<%= relation.relationshipFieldNameLowerCased %> != <%= lowerCasedEntityClass %>.<%= relation.relationshipFieldNamePascalizedPlural %>.Last()) { , } + + }