Added standardized metadata blocks to the top of each project and repo documentation file. These blocks define project type, and for repos, include layer and dependencies, improving clarity and enabling better tooling support. |
||
|---|---|---|
| .. | ||
| Addresses | ||
| Groups | ||
| Locations | ||
| LogItems | ||
| Messages | ||
| Profiles | ||
| ServiceProviders | ||
| Users | ||
| AcLogItemWriterBase.cs | ||
| AcModelDtoExtension.cs | ||
| AyCode.Entities.csproj | ||
| PermissionContextMappingSubjectType.cs | ||
| README.md | ||
README.md
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 writerAcLogItemWriterBase<TLogItem>extendingAcLogWriterBase. Thread-safe via mutex. AbstractWriteLogItemCallback()for concrete implementations.AcModelDtoExtension.cs— Extension methods for entity-to-DTO conversion viaActivator.CreateInstance.
Key Design Patterns
- Abstract + Generic — All entities are
abstractwith 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.Interfacesinterface. - Timestamps — All entities implement
ITimeStampInfo(Created,Modified). - Guid PKs — Most entities use
Guid Idas primary key;AcUserTokenBaseusesint Id(auto-increment).
Dependencies
| Dependency | Purpose |
|---|---|
AyCode.Interfaces |
Interface contracts this project implements |
MessagePack.Annotations |
[MessagePackObject] on AcLogItemClient |