@atlashub/smartstack-cli 3.23.0 → 3.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/mcp-entry.mjs +56 -15
- package/dist/mcp-entry.mjs.map +1 -1
- package/package.json +1 -1
- package/templates/mcp-scaffolding/component.tsx.hbs +21 -1
- package/templates/skills/apex/references/smartstack-api.md +31 -5
- package/templates/skills/apex/references/smartstack-frontend.md +1081 -0
- package/templates/skills/apex/references/smartstack-layers.md +81 -5
- package/templates/skills/apex/steps/step-01-analyze.md +27 -3
- package/templates/skills/apex/steps/step-02-plan.md +5 -1
- package/templates/skills/apex/steps/step-03-execute.md +43 -3
- package/templates/skills/apex/steps/step-04-validate.md +159 -0
- package/templates/skills/apex/steps/step-05-examine.md +7 -0
- package/templates/skills/apex/steps/step-07-tests.md +19 -0
- package/templates/skills/business-analyse/_shared.md +6 -6
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +1 -1
- package/templates/skills/business-analyse/questionnaire/07-ui.md +3 -3
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +1 -1
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +3 -3
- package/templates/skills/business-analyse/references/handoff-file-templates.md +13 -5
- package/templates/skills/business-analyse/references/spec-auto-inference.md +14 -14
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +2 -2
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +1 -1
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +2 -2
- package/templates/skills/business-analyse/steps/step-03b-ui.md +2 -1
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +15 -4
- package/templates/skills/business-analyse/templates/tpl-frd.md +2 -2
- package/templates/skills/business-analyse/templates-frd.md +2 -2
- package/templates/skills/ralph-loop/references/category-rules.md +45 -7
- package/templates/skills/ralph-loop/references/compact-loop.md +2 -2
- package/templates/skills/ralph-loop/references/core-seed-data.md +10 -0
- package/templates/skills/ralph-loop/steps/step-02-execute.md +110 -1
- package/templates/skills/validate-feature/steps/step-05-db-validation.md +86 -1
package/package.json
CHANGED
|
@@ -174,7 +174,27 @@ export const {{name}}: React.FC<{{name}}Props> = ({
|
|
|
174
174
|
|
|
175
175
|
{/* Form */}
|
|
176
176
|
<form onSubmit={handleSubmit} className="p-6 space-y-6">
|
|
177
|
-
{/*
|
|
177
|
+
{/*
|
|
178
|
+
TODO: Add form fields based on entity properties.
|
|
179
|
+
IMPORTANT — Field type mapping:
|
|
180
|
+
- string properties → <input type="text" />
|
|
181
|
+
- bool properties → <input type="checkbox" />
|
|
182
|
+
- number properties → <input type="number" />
|
|
183
|
+
- DateTime properties → <input type="date" />
|
|
184
|
+
- Guid FK properties (e.g., EmployeeId, DepartmentId) → <EntityLookup /> (NEVER plain text input!)
|
|
185
|
+
|
|
186
|
+
For FK fields, use EntityLookup from @/components/ui/EntityLookup:
|
|
187
|
+
<EntityLookup
|
|
188
|
+
apiEndpoint="/api/{related-entity-route}"
|
|
189
|
+
value={data.relatedEntityId}
|
|
190
|
+
onChange={(id) => handleChange('relatedEntityId', id)}
|
|
191
|
+
label="Related Entity"
|
|
192
|
+
mapOption={(item) => ({ id: item.id, label: item.name, sublabel: item.code })}
|
|
193
|
+
required
|
|
194
|
+
/>
|
|
195
|
+
|
|
196
|
+
See smartstack-frontend.md section 6 for the full EntityLookup pattern.
|
|
197
|
+
*/}
|
|
178
198
|
<div className="text-[var(--text-secondary)] text-center py-8">
|
|
179
199
|
Add your form fields here
|
|
180
200
|
</div>
|
|
@@ -228,13 +228,33 @@ public class {Name}Service : I{Name}Service
|
|
|
228
228
|
_logger = logger;
|
|
229
229
|
}
|
|
230
230
|
|
|
231
|
-
public async Task<
|
|
231
|
+
public async Task<PaginatedResult<{Name}ResponseDto>> GetAllAsync(
|
|
232
|
+
string? search = null,
|
|
233
|
+
int page = 1,
|
|
234
|
+
int pageSize = 20,
|
|
235
|
+
CancellationToken ct = default)
|
|
232
236
|
{
|
|
233
|
-
|
|
237
|
+
var query = _db.{Name}s
|
|
234
238
|
.Where(x => x.TenantId == _currentUser.TenantId) // MANDATORY tenant filter
|
|
235
|
-
.AsNoTracking()
|
|
239
|
+
.AsNoTracking();
|
|
240
|
+
|
|
241
|
+
// Search filter — enables EntityLookup on frontend
|
|
242
|
+
if (!string.IsNullOrWhiteSpace(search))
|
|
243
|
+
{
|
|
244
|
+
query = query.Where(x =>
|
|
245
|
+
x.Name.Contains(search) ||
|
|
246
|
+
x.Code.Contains(search));
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
var totalCount = await query.CountAsync(ct);
|
|
250
|
+
var items = await query
|
|
251
|
+
.OrderBy(x => x.Name)
|
|
252
|
+
.Skip((page - 1) * pageSize)
|
|
253
|
+
.Take(pageSize)
|
|
236
254
|
.Select(x => new {Name}ResponseDto(x.Id, x.Code, x.Name, x.CreatedAt))
|
|
237
255
|
.ToListAsync(ct);
|
|
256
|
+
|
|
257
|
+
return new PaginatedResult<{Name}ResponseDto>(items, totalCount, page, pageSize);
|
|
238
258
|
}
|
|
239
259
|
|
|
240
260
|
public async Task<{Name}ResponseDto?> GetByIdAsync(Guid id, CancellationToken ct)
|
|
@@ -313,8 +333,12 @@ public class {Name}Controller : ControllerBase
|
|
|
313
333
|
|
|
314
334
|
[HttpGet]
|
|
315
335
|
[RequirePermission(Permissions.{Module}.Read)]
|
|
316
|
-
public async Task<ActionResult<
|
|
317
|
-
|
|
336
|
+
public async Task<ActionResult<PaginatedResult<{Name}ResponseDto>>> GetAll(
|
|
337
|
+
[FromQuery] string? search = null,
|
|
338
|
+
[FromQuery] int page = 1,
|
|
339
|
+
[FromQuery] int pageSize = 20,
|
|
340
|
+
CancellationToken ct = default)
|
|
341
|
+
=> Ok(await _service.GetAllAsync(search, page, pageSize, ct));
|
|
318
342
|
|
|
319
343
|
[HttpGet("{id:guid}")]
|
|
320
344
|
[RequirePermission(Permissions.{Module}.Read)]
|
|
@@ -479,3 +503,5 @@ services.AddValidatorsFromAssemblyContaining<Create{Name}DtoValidator>();
|
|
|
479
503
|
| Route `"humanresources"` in seed data | Must be full path `"/business/human-resources"` |
|
|
480
504
|
| Route without leading `/` | All routes must start with `/` |
|
|
481
505
|
| `Permission.Create()` | Does NOT exist — use `CreateForModule()`, `CreateForSection()`, etc. |
|
|
506
|
+
| `GetAllAsync()` without search param | ALL GetAll endpoints MUST support `?search=` for EntityLookup |
|
|
507
|
+
| FK field as plain text input | Frontend MUST use `EntityLookup` component for Guid FK fields |
|