3 Commits

4 changed files with 27 additions and 26 deletions
+19 -12
View File
@@ -6,6 +6,7 @@ This file is the authoritative source for hrynco-ef workflow, delivery, and role
- Command timeout: if a command runs longer than 10 minutes, report timeout and ask the user. - Command timeout: if a command runs longer than 10 minutes, report timeout and ask the user.
- Validate required services before task work: - Validate required services before task work:
- YouTrack authenticated access
- Gitea authenticated access and the `hrynco/hrynco-ef` repo - Gitea authenticated access and the `hrynco/hrynco-ef` repo
- TeamCity authenticated access - TeamCity authenticated access
- If any startup check fails, stop and ask the user. - If any startup check fails, stop and ask the user.
@@ -29,6 +30,7 @@ Print one startup report line per check:
Required report items: Required report items:
- Workflow rules loaded - Workflow rules loaded
- YouTrack auth + reachability
- Gitea auth + reachability - Gitea auth + reachability
- Gitea resource access (`hrynco/hrynco-ef`) - Gitea resource access (`hrynco/hrynco-ef`)
- TeamCity auth + reachability - TeamCity auth + reachability
@@ -45,7 +47,7 @@ Required report items:
- local `development` must match remote - local `development` must match remote
- if not, fix that first - if not, fix that first
- On task start: - On task start:
- create a Gitea issue in `hrynco/hrynco-ef` if one does not exist - set YouTrack state to `In Progress`
- create a feature branch from `development` - create a feature branch from `development`
- name the branch after the task - name the branch after the task
- Work only in the feature branch. - Work only in the feature branch.
@@ -54,12 +56,12 @@ Required report items:
### Issue lifecycle ### Issue lifecycle
1. Product analyst creates/refines the Gitea issue. 1. Product analyst creates/refines the YouTrack task.
2. Developer takes the issue and starts implementation. 2. Developer takes the task and starts implementation.
3. Developer finishes implementation and hands off to code review. 3. Developer finishes implementation and hands off to code review.
4. Code reviewer reviews and either passes or returns to developer. 4. Code reviewer reviews and either passes or returns to developer.
5. Repeat developer/reviewer cycles as needed. 5. Repeat developer/reviewer cycles as needed.
6. Maximum five review rounds total for the same unresolved issue state. 6. Maximum five review rounds total for the same unresolved task state.
7. After review round five, if still unresolved, return to product analysis. 7. After review round five, if still unresolved, return to product analysis.
8. Tester validates the implementation against acceptance criteria. 8. Tester validates the implementation against acceptance criteria.
9. Developer waits for user validation approval. 9. Developer waits for user validation approval.
@@ -67,7 +69,7 @@ Required report items:
### Task rules ### Task rules
- Create the Gitea issue before development starts. - Create the YouTrack task before development starts.
- Default assignee is AI unless the task flow requires another assignee. - Default assignee is AI unless the task flow requires another assignee.
- Define scope and acceptance criteria. - Define scope and acceptance criteria.
- Tasks must be independently deliverable and testable. - Tasks must be independently deliverable and testable.
@@ -87,17 +89,22 @@ After explicit user validation approval:
- push the feature branch - push the feature branch
- create PR from feature branch to `development` - create PR from feature branch to `development`
- merge that PR - merge that PR
- **do not merge to `main` unless a new NuGet package release is explicitly requested** - create PR from `development` to `main`
- when a release is requested: create PR from `development` to `main`, merge, wait for TC `HrynCo / HrynCo.EF / publish` to finish successfully - merge that PR
- close the Gitea issue - wait for TC `HrynCo / HrynCo.EF / publish` to finish successfully
- set the YouTrack task to `Done`
- calculate exact Spent Time from YouTrack timestamps only
- set the YouTrack Spent Time field
- switch back to `development` - switch back to `development`
- pull latest `development` - pull latest `development`
- ensure local `development` matches remote - ensure local `development` and `main` match their remotes
- leave the repository in a clean end state - leave the repository in a clean end state
### Spent Time ### Spent Time
- Do not track spent time — this repo uses Gitea, not YouTrack. - Do not estimate or infer Spent Time.
- Use exact YouTrack creation and Done timestamps only.
- If exact timestamps are unavailable, stop and ask the user.
### Command output ### Command output
@@ -108,9 +115,9 @@ After explicit user validation approval:
- Keep command output summaries concise. - Keep command output summaries concise.
- Do not dump raw command output unless needed. - Do not dump raw command output unless needed.
- Use direct links to Gitea issues and wiki pages in implementation notes when stable links exist. - Use direct links in YouTrack and implementation notes when stable links exist.
- Use emojis intentionally for scanning, not mechanically. - Use emojis intentionally for scanning, not mechanically.
- Commit messages must be Conventional Commit style, lowercase subject, short body. - Commit messages must be Conventional Commit style, lowercase subject, short body, and final line `Ref: IT-<number>`.
## 6. Audio ## 6. Audio
+3 -3
View File
@@ -6,8 +6,8 @@
<!-- HrynCo shared packages --> <!-- HrynCo shared packages -->
<PackageVersion Include="HrynCo.Common" Version="1.0.0" /> <PackageVersion Include="HrynCo.Common" Version="1.0.0" />
<!-- Entity Framework Core --> <!-- Entity Framework Core -->
<PackageVersion Include="Microsoft.EntityFrameworkCore" Version="10.0.7" /> <PackageVersion Include="Microsoft.EntityFrameworkCore" Version="9.0.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="10.0.7" /> <PackageVersion Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.5" />
<PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="10.0.7" /> <PackageVersion Include="Microsoft.EntityFrameworkCore.Relational" Version="9.0.5" />
</ItemGroup> </ItemGroup>
</Project> </Project>
+2 -11
View File
@@ -40,12 +40,7 @@ public abstract class BaseEfRepository<TDbContext, TEntity, TEntityId> :
{ {
foreach (TEntity entity in entities) foreach (TEntity entity in entities)
{ {
Add(entity, save: false); Add(entity, save);
}
if (save)
{
DbContext.SaveChanges();
} }
} }
@@ -89,11 +84,7 @@ public abstract class BaseEfRepository<TDbContext, TEntity, TEntityId> :
public async Task DeleteAsync(TEntityId id) public async Task DeleteAsync(TEntityId id)
{ {
TEntity? entity = GetById(id); Delete(id);
if (entity != null)
{
DoRemove(entity);
}
await DbContext.SaveChangesAsync(); await DbContext.SaveChangesAsync();
} }
+3
View File
@@ -202,3 +202,6 @@ services.AddScoped<IRepository<Product>, ProductRepository>();
services.AddScoped<IUnitOfWork, EfUnitOfWork<YourDbContext>>(); services.AddScoped<IUnitOfWork, EfUnitOfWork<YourDbContext>>();
``` ```
## Related
- [IT-642](https://yt.grynco.com.ua/issue/IT-642) — Extract `PagedResult` builder as reusable `IQueryable<T>` extension