AyCode.Core/AyCode.Interfaces/README.md

47 lines
2.4 KiB
Markdown

# AyCode.Interfaces
@project {
type = "framework"
}
Domain interface contracts for the AyCode platform. Defines the shape of entities, DTOs, relationships, and service contracts. All interfaces are composable — small, single-responsibility interfaces are combined via inheritance to build up complex types.
## Folder Structure
| Folder | Purpose |
|---|---|
| `Addresses/` | Address entity, DTO, relation, and foreign key interfaces |
| `Entities/` | Base entity interfaces: `IEntity`, `IEntityGuid`, `IEntityInt`, soft-delete support |
| `EntityComment/` | `IEntityComment` — adds `Comment` property |
| `Enums/` | `IMessageTypes` — message type enum container |
| `Groups/` | `IGroupBase` — base group entity (Guid + timestamps) |
| `Locations/` | `ILocationBase` — read-only lat/lng/address |
| `Logins/` | Login service contracts: `Logout`, `Registration`, `ChangePassword`, `ForgotPassword` |
| `MediaInfo/` | Media metadata: thumbnail URL, user media ID |
| `Messages/` | Email message system: message, recipient, sender service interfaces |
| `Profiles/` | User profile: name, full name, media, address, DTOs |
| `ServiceProviders/` | Company/service provider entity and relationship interfaces |
| `StorageHandlers/` | `ISecureStorageHandler` — async secure key-value storage |
| `TimeStampInfo/` | `Created`/`Modified` timestamps, `ITimeStampDisableAutoSet` marker |
| `Users/` | User entity, base, token, email, password, company relations, DTOs |
## Root Interfaces
- **`IOwnerId.cs`** — `Guid OwnerId` property.
- **`IAcModelDtoBase.cs`** — Base DTO interface (`IEntityGuid`); generic version adds `CreateMainEntity()`.
- **`ICustomForeignKey.cs`** — Generic marker for custom foreign keys (int/Guid variants).
## Design Patterns
- **Composition over inheritance** — Small interfaces (`ITimeStampInfo`, `IAcEmailAddress`, `IPassword`) are mixed in as needed.
- **Generic relations** — `IAcXxxRelation<T>` pattern for navigation properties and collections.
- **Separate FK interfaces** — `IAcXxxForeignKey` for type-safe foreign key declarations.
- **DTO hierarchy** — `DtoBase` interfaces separate from full entity interfaces.
- **Soft delete** — Optional via `IAcSoftRemoveEntity` / `IAcSoftRemoveEntityGuid` / `IAcSoftRemoveEntityInt`.
## Dependencies
| Dependency | Purpose |
|---|---|
| `AyCode.Core` | Core library (`IId<T>`, `IForeignKey`, enums, error codes) |