# AyCode.Entities 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`, `AcEmailRecipient` — email messaging system | | `Profiles/` | `AcProfile` — 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` 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`). 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` | --- > **LLM Maintenance:** If you modify code in this folder, update this README to reflect the changes. If you notice the README content does not match the current code, automatically update the README to match the code.