AyCode.Core/AyCode.Entities/README.md

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