# AyCode.Models

@project {
  type = "framework"
}

Shared DTOs (Data Transfer Objects) and view models for the AyCode platform. Bridges entities and interfaces into client/server-transferable models.

## Folder Structure

| Folder | Purpose |
|---|---|
| `Enums/` | Message-related enums (content types, message types) |
| `Messages/` | Email message model (currently inactive) |
| `Users/` | User DTOs: minimal, standard, detail variants + password DTOs |

## Root Files

- **`AcModelDtoBase.cs`** — Abstract base DTO with `Guid Id`. Generic version `AcModelDtoBase<TMainEntity>` adds `CreateMainEntity()` for DTO-to-entity instantiation via reflection.

## Key Files

### Enums/
- **`MessageContentType.cs`** — Enum: Text, Image, Video, Audio, File, Location, Contact, Sticker, Gif, VoiceNote, System.
- **`MessageTypesEnum.cs`** — Enum: email(1), sms(2), push(3), chat(4).

### Users/
- **`AcUserModelDtoMinBase.cs`** — Minimal user DTO with `UserDto` and `ProfileDto`. `CopyUserDtoValuesToUser()` for reverse mapping.
- **`AcUserModelDtoBase.cs`** — Extends min base with `ServiceProviders` and `UserToServiceProviders` lists.
- **`AcUserModelDtoDetailBase.cs`** — Full detail DTO: populates email, phone, address, timestamps. Bidirectional mapping via `CopyUserDtoValuesToUser()`.
- **`AcPasswordDtoBase.cs`** — Base with `NewPassword` property.
- **`AcChangePasswordDto.cs`** — Extends password base with `UserId` + `OldPassword`.
- **`AcForgotPasswordDto.cs`** — Extends password base with `Email`.

## Dependencies

| Dependency | Purpose |
|---|---|
| `AyCode.Core` | Core types |
| `AyCode.Entities` | Entity base classes for DTO-entity mapping |
| `AyCode.Interfaces` | Interface contracts implemented by DTOs |
