110 lines
3.2 KiB
Markdown
110 lines
3.2 KiB
Markdown
# Customer Entity Fix - Duplicate Notes Field Resolved
|
|
|
|
## Issue Found
|
|
The `Customer` entity had a duplicate `Notes` field:
|
|
1. **Collection property**: `ICollection<CustomerNote> Notes` - for related CustomerNote entities
|
|
2. **String property**: `string? Notes` - for general notes text
|
|
|
|
This would have caused a compilation error and database schema issues.
|
|
|
|
## Fix Applied
|
|
|
|
### Changed in Customer Entity (`src/PowderCoating.Core/Entities/Customer.cs`)
|
|
|
|
**Before:**
|
|
```csharp
|
|
public virtual ICollection<CustomerNote> Notes { get; set; } = new List<CustomerNote>();
|
|
public string? Notes { get; set; }
|
|
```
|
|
|
|
**After:**
|
|
```csharp
|
|
public virtual ICollection<CustomerNote> CustomerNotes { get; set; } = new List<CustomerNote>();
|
|
public string? GeneralNotes { get; set; }
|
|
```
|
|
|
|
### Changes Summary:
|
|
1. **Collection renamed**: `Notes` → `CustomerNotes` (more descriptive)
|
|
2. **String property renamed**: `Notes` → `GeneralNotes` (avoids conflict)
|
|
|
|
### Updated DTOs
|
|
|
|
All Customer DTOs have been updated to use `GeneralNotes`:
|
|
- `CustomerDto.GeneralNotes`
|
|
- `CreateCustomerDto.GeneralNotes`
|
|
- `UpdateCustomerDto.GeneralNotes` (inherited)
|
|
|
|
### Database Impact
|
|
|
|
When you create your first migration, the database will have:
|
|
- **Customers.GeneralNotes** column (string) - for quick notes about the customer
|
|
- **CustomerNotes** table (separate) - for detailed, timestamped notes with relationships
|
|
|
|
### Usage Pattern
|
|
|
|
#### General Notes (Simple text field):
|
|
```csharp
|
|
var customer = new Customer
|
|
{
|
|
CompanyName = "ABC Corp",
|
|
GeneralNotes = "Preferred customer, always pays on time"
|
|
};
|
|
```
|
|
|
|
#### Customer Notes (Detailed note entries):
|
|
```csharp
|
|
var note = new CustomerNote
|
|
{
|
|
CustomerId = customer.Id,
|
|
Note = "Called to discuss new project requirements",
|
|
IsImportant = true
|
|
};
|
|
customer.CustomerNotes.Add(note);
|
|
```
|
|
|
|
### When to Use Each:
|
|
|
|
**GeneralNotes (string):**
|
|
- Quick reference information
|
|
- General reminders
|
|
- Brief customer preferences
|
|
- Single-line notes
|
|
|
|
**CustomerNotes (collection):**
|
|
- Detailed interaction history
|
|
- Time-stamped communication logs
|
|
- Multiple notes over time
|
|
- Important flags and tracking
|
|
|
|
## No Action Required
|
|
|
|
This fix is already applied in the updated project files. When you:
|
|
1. Run `dotnet ef migrations add InitialCreate`
|
|
2. The migration will create the correct schema with `GeneralNotes` column
|
|
|
|
## Benefits of This Fix
|
|
|
|
✅ **No naming conflicts** - Clear distinction between the two properties
|
|
✅ **Better semantics** - `CustomerNotes` clearly indicates a collection
|
|
✅ **Clearer intent** - `GeneralNotes` indicates simple text vs. complex notes
|
|
✅ **Follows conventions** - Collection names are typically plural nouns
|
|
✅ **Database ready** - Will generate proper schema without conflicts
|
|
|
|
## Files Modified
|
|
|
|
1. `/src/PowderCoating.Core/Entities/Customer.cs`
|
|
2. `/src/PowderCoating.Application/DTOs/Customer/CustomerDtos.cs`
|
|
|
|
## Next Steps
|
|
|
|
When you first run the application and create migrations, you'll see:
|
|
```bash
|
|
dotnet ef migrations add InitialCreate --project src/PowderCoating.Infrastructure --startup-project src/PowderCoating.Web
|
|
```
|
|
|
|
The migration will correctly create:
|
|
- `Customers` table with `GeneralNotes` column
|
|
- `CustomerNotes` table with foreign key to `Customers`
|
|
|
|
Everything is now consistent and ready to build!
|