Skip to content

Commit 4b56a72

Browse files
committed
feat: Add CI pipeline configuration and update documentation for clarity
1 parent 1d5d968 commit 4b56a72

14 files changed

Lines changed: 65 additions & 2 deletions

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,22 @@
11

2+
MIT License
3+
4+
Copyright (c)2026 Isaiah Clifford Opoku
5+
6+
Permission is hereby granted, free of charge, to any person obtaining a copy
7+
of this software and associated documentation files (the "Software"), to deal
8+
in the Software without restriction, including without limitation the rights
9+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
copies of the Software, and to permit persons to whom the Software is
11+
furnished to do so, subject to the following conditions:
12+
13+
The above copyright notice and this permission notice shall be included in all
14+
copies or substantial portions of the Software.
15+
16+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
SOFTWARE.

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ Every .NET project with EF Core ends up writing the same plumbing: soft delete f
3535
| **Entity Configuration Bases** | Fluent config base classes that auto-wire keys, indexes, and soft-delete defaults |
3636
| **Soft Delete** | Mark records as deleted with automatic global query filters; restore or hard-delete on demand |
3737
| **Audit Trail** | Auto-stamp `CreatedAt/By`, `UpdatedAt/By`; optional field-level `AuditLog` history |
38-
| **Multi-Tenancy** | Automatic tenant filtering so each tenant only sees their own data |
3938
| **Repository + Unit of Work** | Generic `IRepository<T>` / `IReadRepository<T>` backed by `IUnitOfWork` |
4039
| **Specification Pattern** | Composable query specs with `And()` / `Or()` combinators, projection, and multi-column ordering |
4140
| **Pagination** | Offset (`ToPagedAsync`) and keyset/cursor (`ToKeysetPagedAsync`) pagination with `PagedResult<T>` |
@@ -250,7 +249,6 @@ await context.TruncateAsync<AuditLog>();
250249
| [Base Entities](docs/base-entities.md) | Entity hierarchy, configuration base classes |
251250
| [Soft Delete](docs/soft-delete.md) | ISoftDeletable, lifecycle methods, restoring records |
252251
| [Audit Trail](docs/audit-trail.md) | IAuditable, IFullAuditable, field-level AuditLog |
253-
| [Multi-Tenancy](docs/multi-tenancy.md) | ITenantEntity, automatic filtering, tenant validation |
254252
| [Repository & Unit of Work](docs/repository-uow.md) | IRepository, IReadRepository, IUnitOfWork |
255253
| [Specification Pattern](docs/specifications.md) | Spec classes, And/Or combinators, projection specs |
256254
| [Pagination](docs/pagination.md) | Offset and keyset pagination, PagedResult |

docs/audit-trail.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,3 +168,7 @@ The audit interceptor marks `CreatedAt` and `CreatedBy` as `IsModified = false`
168168
## Combining with Soft Delete
169169

170170
When an entity implements both `IAuditable` and `ISoftDeletable`, a soft delete triggers a `Modified` state change — so `UpdatedAt` and `UpdatedBy` are stamped at the moment of deletion.
171+
172+
---
173+
174+
[← Soft Delete](soft-delete.md) | [Repository & Unit of Work →](repository-uow.md)

docs/base-entities.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,3 +181,7 @@ catch (ConcurrencyConflictException ex)
181181
// ex.EntityId — primary key of the conflicting row
182182
}
183183
```
184+
185+
---
186+
187+
[← Getting Started](getting-started.md) | [Soft Delete →](soft-delete.md)

docs/dbcontext-utilities.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,7 @@ await context.TruncateAsync<AuditLog>();
7373
| `ExecuteInTransactionAsync<T>(Func<Task<T>>)` | Same, returning a value |
7474
| `DetachAll()` | Clear the change tracker |
7575
| `TruncateAsync<T>()` | Truncate a table by entity type |
76+
77+
---
78+
79+
[← Query Helpers](query-helpers.md) | [Exceptions →](exceptions.md)

docs/dynamic-filters.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,3 +158,7 @@ var page = await context.Customers
158158
.ApplySorts(sorts)
159159
.ToPagedAsync(page: 1, pageSize: 20);
160160
```
161+
162+
---
163+
164+
[← Pagination](pagination.md) | [Query Helpers →](query-helpers.md)

docs/exceptions.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,3 +187,7 @@ catch (InvalidFilterException ex)
187187
return BadRequest(ex.Message);
188188
}
189189
```
190+
191+
---
192+
193+
**Previous:** [← DbContext Utilities](dbcontext-utilities.md)

docs/getting-started.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,3 +169,7 @@ Once configured, EfCoreKit handles the following via EF Core interceptors:
169169
- [Query Helpers](query-helpers.md) — WhereIf, OrderByDynamic, DbSet extensions
170170
- [DbContext Utilities](dbcontext-utilities.md) — Transactions, DetachAll, TruncateAsync
171171
- [Exceptions](exceptions.md) — All exception types, when they're thrown, what to catch
172+
173+
---
174+
175+
**Next:** [Base Entities →](base-entities.md)

docs/pagination.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,3 +135,7 @@ public sealed class KeysetPagedResult<T>
135135
| **Infinite scroll** | Possible | Ideal |
136136
| **Stable with concurrent inserts** | Can skip / duplicate rows | Always consistent |
137137
| **Requires ordered query** | Recommended | Required |
138+
139+
---
140+
141+
[← Specification Pattern](specifications.md) | [Dynamic Filters →](dynamic-filters.md)

0 commit comments

Comments
 (0)