Skip to content

Commit 6734468

Browse files
feat(*): add feature operation claims as seed data
1 parent 1664d0b commit 6734468

File tree

6 files changed

+76
-17
lines changed

6 files changed

+76
-17
lines changed

src/corePackages/Core.CodeGen/Code/CSharp/CSharpCodeInjector.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ public static async Task AddCodeLinesToMethodAsync(string filePath, string metho
8080
methodEndIndex,
8181
collection: codeLines
8282
.Select(line => new string(' ', minimumSpaceCountInMethod) + line)
83-
.Where(line => !fileContent.Contains(line))
8483
);
8584
await System.IO.File.WriteAllLinesAsync(filePath, contents: fileContent.ToArray());
8685
}
@@ -159,6 +158,8 @@ public static async Task AddCodeLinesToRegionAsync(string filePath, IEnumerable<
159158
if (!Regex.Match(fileLine, regionEndRegex).Success)
160159
continue;
161160

161+
int minimumSpaceCountInRegion = fileContent[indexToAdd].TakeWhile(char.IsWhiteSpace).Count();
162+
162163
string previousLine = fileContent[index: indexToAdd - 1];
163164
if (Regex.Match(previousLine, regionStartRegex).Success)
164165
{
@@ -167,12 +168,11 @@ public static async Task AddCodeLinesToRegionAsync(string filePath, IEnumerable<
167168
}
168169

169170
if (!string.IsNullOrEmpty(previousLine))
170-
fileContent.Insert(index: indexToAdd - 1, string.Empty);
171+
fileContent.Insert(index: indexToAdd, string.Empty);
171172

172-
int minimumSpaceCountInRegion = fileContent[indexToAdd].TakeWhile(char.IsWhiteSpace).Count();
173173

174174
fileContent.InsertRange(
175-
index: indexToAdd - 1,
175+
index: indexToAdd,
176176
collection: linesToAdd.Select(line => new string(' ', minimumSpaceCountInRegion) + line)
177177
);
178178
await System.IO.File.WriteAllLinesAsync(filePath, fileContent);

src/nArchGen/Application/Features/Generate/Commands/Crud/GenerateCrudCommand.cs

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ [EnumeratorCancellation] CancellationToken cancellationToken
5353
newFilePaths.AddRange(await generateApplicationCodes(request.ProjectPath, request.CrudTemplateData));
5454
response.LastOperationMessage = "Application layer codes have been generated.";
5555

56+
response.CurrentStatusMessage = "Adding operation claims as seed data...";
57+
yield return response;
58+
updatedFilePaths.Add(await injectOperationClaims(request.ProjectPath, request.CrudTemplateData));
59+
response.LastOperationMessage = "Operation claims have been added.";
60+
5661
response.CurrentStatusMessage = "Adding service registrations...";
5762
yield return response;
5863
updatedFilePaths.AddRange(await injectServiceRegistrations(request.ProjectPath, request.CrudTemplateData));
@@ -69,6 +74,59 @@ [EnumeratorCancellation] CancellationToken cancellationToken
6974
yield return response;
7075
}
7176

77+
private async Task<string> injectOperationClaims(string projectPath, CrudTemplateData crudTemplateData)
78+
{
79+
string operationClaimConfigurationFilePath = PlatformHelper.SecuredPathJoin(
80+
projectPath,
81+
"Persistence",
82+
"EntityConfigurations",
83+
"OperationClaimConfiguration.cs"
84+
);
85+
86+
if (!File.Exists(operationClaimConfigurationFilePath))
87+
return $"Not Found: {operationClaimConfigurationFilePath}";
88+
89+
string[] seedTemplateCodeLines = await File.ReadAllLinesAsync(
90+
PlatformHelper.SecuredPathJoin(
91+
DirectoryHelper.AssemblyDirectory,
92+
Templates.Paths.Crud,
93+
"Lines",
94+
"EntityFeatureOperationClaimSeeds.cs.sbn"
95+
)
96+
);
97+
98+
List<string> seedCodeLines = new() { string.Empty };
99+
foreach (string templateCodeLine in seedTemplateCodeLines)
100+
{
101+
string seedCodeLine = await _templateEngine.RenderAsync(templateCodeLine, crudTemplateData);
102+
seedCodeLines.Add(seedCodeLine);
103+
}
104+
seedCodeLines.Add(string.Empty);
105+
106+
await CSharpCodeInjector.AddCodeLinesToMethodAsync(
107+
operationClaimConfigurationFilePath,
108+
methodName: "getFeatureOperationClaims",
109+
codeLines: seedCodeLines.ToArray()
110+
);
111+
112+
string featureOperationClaimUsingTemplatePath = PlatformHelper.SecuredPathJoin(
113+
DirectoryHelper.AssemblyDirectory,
114+
Templates.Paths.Crud,
115+
"Lines",
116+
"EntityFeatureOperationClaimsNameSpaceUsing.cs.sbn"
117+
);
118+
string featureOperationClaimUsingTemplate = await File.ReadAllTextAsync(featureOperationClaimUsingTemplatePath);
119+
string featureOperationClaimUsingRendered = await _templateEngine.RenderAsync(
120+
featureOperationClaimUsingTemplate,
121+
crudTemplateData
122+
);
123+
await CSharpCodeInjector.AddUsingToFile(
124+
operationClaimConfigurationFilePath,
125+
usingLines: featureOperationClaimUsingRendered.Split(Environment.NewLine)
126+
);
127+
return operationClaimConfigurationFilePath;
128+
}
129+
72130
private async Task<string> injectEntityToContext(string projectPath, CrudTemplateData crudTemplateData)
73131
{
74132
string contextFilePath = PlatformHelper.SecuredPathJoin(
Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
#region {{ entity.name | string.pascalcase | string.plural }}
2-
3-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ entity.name | string.pascalcase | string.plural }}.Admin" });
4-
5-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ entity.name | string.pascalcase | string.plural }}.Read" });
6-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ entity.name | string.pascalcase | string.plural }}.Write" });
7-
8-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ entity.name | string.pascalcase | string.plural }}.Add" });
9-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ entity.name | string.pascalcase | string.plural }}.Update" });
10-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ entity.name | string.pascalcase | string.plural }}.Delete" });
11-
12-
#endregion
2+
featureOperationClaims.AddRange(
3+
[
4+
new() { Id = ++lastId, Name = {{ entity.name | string.pascalcase | string.plural }}OperationClaims.Admin },
5+
new() { Id = ++lastId, Name = {{ entity.name | string.pascalcase | string.plural }}OperationClaims.Read },
6+
new() { Id = ++lastId, Name = {{ entity.name | string.pascalcase | string.plural }}OperationClaims.Write },
7+
new() { Id = ++lastId, Name = {{ entity.name | string.pascalcase | string.plural }}OperationClaims.Create },
8+
new() { Id = ++lastId, Name = {{ entity.name | string.pascalcase | string.plural }}OperationClaims.Update },
9+
new() { Id = ++lastId, Name = {{ entity.name | string.pascalcase | string.plural }}OperationClaims.Delete },
10+
]
11+
);
12+
#endregion
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
using Application.Features.{{ entity.name | string.pascalcase | string.plural }}.Constants;
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ feature_name }}.{{ command_name }}" });
1+
featureOperationClaims.Add(new() { Id = ++lastId, Name = {{ feature_name }}OperationClaims.{{ command_name | string.pascalcase }} });
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
seeds.Add(new OperationClaim { Id = ++id, Name = "{{ feature_name }}.{{ query_name }}" });
1+
featureOperationClaims.Add(new() { Id = ++lastId, Name = {{ feature_name }}OperationClaims.{{ query_name | string.pascalcase }} });

0 commit comments

Comments
 (0)