60 lines
3.5 KiB
Markdown
60 lines
3.5 KiB
Markdown
# Nop.Plugin.Misc.AIPlugin (FruitBank nopCommerce Plugin)
|
|
|
|
@project {
|
|
type = "nopcommerce-plugin"
|
|
own-dep-projects = [
|
|
"Mango.Nop.Core, Mango.Nop.Services (in NopCommerce.Common/4.70/Libraries)"
|
|
]
|
|
}
|
|
|
|
> For Mango.Nop library docs see `NopCommerce.Common/4.70/Libraries/README.md`
|
|
> For FruitBankHybridApp domain rules see the FruitBankHybridApp solution's `.github/copilot-instructions.md`
|
|
> For core measurement system rules and common domain traps, see: `../../../../FruitBankHybridApp/FruitBank.Common/docs/GLOSSARY.md`
|
|
|
|
Server-side nopCommerce plugin for FruitBank, a fruit and vegetable wholesaler. Manages supplier inbound delivery (receiving), warehouse weighing (net/gross/pallet/tare weights), outbound order measurement, inventory stocktaking, AI services, and Billingo invoicing. Runs inside nopCommerce 4.80.9 (**net9.0**).
|
|
|
|
Project file: `Nop.Plugin.Misc.FruitBankPlugin.csproj`
|
|
|
|
## Documentation
|
|
|
|
| Document | Topic |
|
|
|---|---|
|
|
| `docs/SCHEMA.md` | Authoritative domain model in TOON format — all entities, DTOs, enums, relationships |
|
|
| `docs/DOMAIN_MODEL.md` | Behavioral docs: weight formula, MeasuringStatus lifecycle, GenericAttribute keys, entity hierarchy overview |
|
|
| `docs/MEASUREMENT.md` | Three measurement workflows (inbound shipping, outbound order, stocktaking), MeasuringStatus lifecycle, pricing, checkout filter |
|
|
| `docs/AI_SERVICES.md` | OpenAI, Cerebras, Replicate providers, FruitBankSettings, file storage, PDF conversion, audio transcription |
|
|
| `docs/DATA_LAYER.md` | FruitBankDbContext, StockTakingDbContext, DbTable repositories, entity mapping, FruitBankEventConsumer |
|
|
| `docs/SIGNALR_ENDPOINTS.md` | SignalR endpoints, FruitBankDataController, InnVoice/Billingo integration, FruitBankAttributeService |
|
|
|
|
## Folder Structure
|
|
|
|
| Folder | Purpose |
|
|
|---|---|
|
|
| `Areas/Admin/Controllers/` | Admin MVC controllers — order, product, shipping, SignalR endpoints, file management |
|
|
| `Areas/Admin/Components/` | Admin ViewComponents — DevExtreme grids |
|
|
| `Areas/Admin/Models/` | Admin view models |
|
|
| `Areas/Admin/Views/` | Admin Razor views |
|
|
| `Components/` | Public-side ViewComponents |
|
|
| `Controllers/` | Public-side controllers — `FruitBankDataController`, `CheckoutController` |
|
|
| `Domains/DataLayer/` | DbContexts, DbTable repositories, interfaces |
|
|
| `Domains/EventConsumers/` | nopCommerce entity event handlers |
|
|
| `Factories/` | Model factories (order, product, shipping) |
|
|
| `Filters/` | `PendingMeasurementCheckoutFilter` |
|
|
| `Infrastructure/` | `PluginNopStartup` (DI), `RouteProvider`, `ViewLocationExpander` |
|
|
| `Mapping/` | EF Core entity mapping, `PluginBuilder` |
|
|
| `Migrations/` | FluentMigrator database schema |
|
|
| `Models/` | Shared models — AI chat, MgBase extensions, order/product models |
|
|
| `Services/` | Business logic — AI, measurement, file storage, invoicing, locking |
|
|
|
|
## Dependencies
|
|
|
|
- `Mango.Nop.Core`, `Mango.Nop.Services` (ProjectReferences via `../../Libraries/`)
|
|
- `Nop.Services`, `Nop.Web` (nopCommerce ProjectReferences)
|
|
- AyCode.Core solution assemblies (DLL HintPaths in .csproj)
|
|
- DevExpress ASP.NET Core 25.1.3, DevExtreme 25.1.3
|
|
- SignalR, EF Core 9.0, PdfPig, PDFtoImage
|
|
|
|
## Initialization & Quirks
|
|
|
|
- **AcBinary Source Generator Registration**: NopCommerce plugins are loaded dynamically via `AssemblyLoadContext`, which prevents the .NET runtime from executing `[ModuleInitializer]` attributes. To ensure the high-performance binary serializers are registered (instead of falling back to slow reflection), `PluginNopStartup.ConfigureServices` must call `Mango.Nop.Core.AcBinaryForcedInit.ForceRegister()`.
|