# FruitBank.Common

@project {
  type = "product"
  own-dep-projects = [
    "AyCode.Core, AyCode.Entities, AyCode.Interfaces, AyCode.Models, AyCode.Services, AyCode.Utils (in AyCode.Core repo)",
    "Mango.Nop.Core (in Mango.Nop Libraries repo)"
  ]
}

Shared domain library for the FruitBank nopCommerce plugin. Contains entities, DTOs, interfaces, measurement helpers, SignalR tags, and constants for fruit & vegetable wholesale operations.

## Folder Structure

| Folder | Purpose |
|---|---|
| [`Databases/`](Databases/README.md) | Local in-memory database abstraction for offline/cached data |
| [`Dtos/`](Dtos/README.md) | Binary-serializable DTOs for Order, OrderItem, Product, StockQuantityHistory |
| [`Entities/`](Entities/README.md) | Domain entities: Shipping, Partner, measurement pallets, inventory |
| [`Enums/`](Enums/README.md) | MeasuringStatus and DocumentType enums |
| [`Helpers/`](Helpers/README.md) | Measurement aggregation utilities |
| [`Interfaces/`](Interfaces/README.md) | SignalR endpoint contracts, measurement traits, entity interfaces |
| [`Loggers/`](Loggers/README.md) | SignalR client log writer |
| [`Models/`](Models/README.md) | Authentication state, measurement view models |
| [`Services/`](Services/README.md) | Measurement service base, credential persistence |
| [`SignalRs/`](SignalRs/README.md) | SignalR method tags (numeric constants) |

## Key Files (Root)

- **`FruitBankConstClient.cs`** — Global constants: BaseUrl, SignalR hubs, database table names, email templates, system settings.
- **`DocumentType.cs`** — Enum: ShippingDocument, OrderConfirmation, Invoice.

## Key Domain Concepts

- **Shipping = INBOUND** (supplier → warehouse), **Order = OUTBOUND** (warehouse → customer)
- **"Pallet" = measurement record**, always created even for non-measurable products
- **NetWeight = GrossWeight − PalletWeight − (TrayQuantity × TareWeight)**
- See `docs/GLOSSARY.md` for full terminology
