41 lines
2.2 KiB
Markdown
41 lines
2.2 KiB
Markdown
# AyCode.Entities
|
|
|
|
@project {
|
|
type = "framework"
|
|
}
|
|
|
|
Abstract base entity implementations for the AyCode domain model. All entities are abstract and generic — concrete implementations live in application-specific projects. Implements the interfaces defined in `AyCode.Interfaces`.
|
|
|
|
## Folder Structure
|
|
|
|
| Folder | Purpose |
|
|
|---|---|
|
|
| `Addresses/` | `AcAddress` — address entity with lat/lng, validation flag |
|
|
| `Groups/` | `GroupBase` — base group entity with `IsPublic` flag |
|
|
| `Locations/` | `LocationBase` — read-only location (lat/lng/address) |
|
|
| `LogItems/` | `AcLogItemClient` — MessagePack-serializable log item DTO |
|
|
| `Messages/` | `AcEmailMessage<T>`, `AcEmailRecipient<T>` — email messaging system |
|
|
| `Profiles/` | `AcProfile<TAddress>` — user profile with name, media, address FK |
|
|
| `ServiceProviders/` | `AcCompany<...>` — company entity with owner, users, commission |
|
|
| `Users/` | `AcUser<...>`, `AcUserToCompany<...>`, `AcUserTokenBase` — user, junction table, auth tokens |
|
|
|
|
## Root Files
|
|
|
|
- **`PermissionContextMappingSubjectType.cs`** — Enum: `NotDefined`(0), `User`(5), `Group`(10).
|
|
- **`AcLogItemWriterBase.cs`** — Generic log writer `AcLogItemWriterBase<TLogItem>` extending `AcLogWriterBase`. Thread-safe via mutex. Abstract `WriteLogItemCallback()` for concrete implementations.
|
|
- **`AcModelDtoExtension.cs`** — Extension methods for entity-to-DTO conversion via `Activator.CreateInstance`.
|
|
|
|
## Key Design Patterns
|
|
|
|
- **Abstract + Generic** — All entities are `abstract` with generic type parameters for navigation properties (e.g., `AcCompany<TUser, TUserToCompany, TProfile, TAddress>`). This allows different applications to compose concrete types.
|
|
- **Interface implementation** — Each entity implements its corresponding `AyCode.Interfaces` interface.
|
|
- **Timestamps** — All entities implement `ITimeStampInfo` (`Created`, `Modified`).
|
|
- **Guid PKs** — Most entities use `Guid Id` as primary key; `AcUserTokenBase` uses `int Id` (auto-increment).
|
|
|
|
## Dependencies
|
|
|
|
| Dependency | Purpose |
|
|
|---|---|
|
|
| `AyCode.Interfaces` | Interface contracts this project implements |
|
|
| `MessagePack.Annotations` | `[MessagePackObject]` on `AcLogItemClient` |
|