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