2.2 KiB
2.2 KiB
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 |