diff --git a/docs/UseCase003-CreateNatureCheck/UC003-DCD.md b/docs/UseCase003-CreateNatureCheck/UC003-DCD.md new file mode 100644 index 0000000..a347d7a --- /dev/null +++ b/docs/UseCase003-CreateNatureCheck/UC003-DCD.md @@ -0,0 +1,116 @@ +```mermaid +classDiagram + %% Services / ViewModels + class CreateNatureCheckService { + +IFarmRepository _farmRepository + +IPersonRepository _personRepository + +INatureCheckCaseRepository _natureCheckCaseRepository + +ICreateNatureCheckRepository _createNatureCheckRepository + +IEmailService _emailService + +Task CreateNatureCheckAsync(CreateNatureCheck request, CancellationToken ct) + +Task> GetFarmsAsync() + +Task> GetPersonsAsync() + +Task> GetNatureChecksAsync() + } + + class ConsultantCreateNatureCheckViewModel { + +ICreateNatureCheck _createNatureCheckService + +ObservableCollection Farms + +ObservableCollection Persons + +ObservableCollection NatureChecks + +RelayCommand RefreshCommand + +RelayCommand CreateNatureCheckCommand + +Task LoadAsync() + +Task CreateNatureCheckAsync() + } + + %% DTO / Entities + class CreateNatureCheck { + +Guid NatureCheckId + +Guid FarmId + +Guid PersonId + +string FarmName + +int FarmCVR + +string FarmAddress + +string ConsultantFirstName + +string ConsultantLastName + +DateTimeOffset DateTime + } + + class NatureCheckCase { + +Guid Id + +Guid FarmId + +Guid ConsultantId + +NatureCheckCaseStatus Status + +DateTimeOffset CreatedAt + +DateTimeOffset? AssignedAt + +string? Priority + +string? Notes + +Farm Farm + +Person Consultant + } + + class Farm { + +Guid Id + +string Name + +string CVR + +Guid AddressId + +Address Address + } + + class Person { + +Guid Id + +string FirstName + +string LastName + +string Email + +Guid RoleId + +Guid AddressId + +Address Address + } + + class Address { + +Guid Id + +string Street + +string PostalCode + +string City + +string Country + } + + %% Repositories / DB + class ICreateNatureCheckRepository { + <> + +Task CreateNatureCheckAsync(CreateNatureCheck request, CancellationToken ct) + } + + class INatureCheckCaseRepository { + <> + +Task> GetAllAsync(...) + +Task> GetAssignedCasesForConsultantAsync(Guid consultantId,...) + +Task FarmHasActiveCaseAsync(Guid farmId,...) + } + + class uspCreateNatureCheck { + <> + +@NatureCheckId OUTPUT, @FarmId, @PersonId, @FarmName, @FarmCVR, @FarmAddress, @ConsultantFirstName, @ConsultantLastName, @DateTime + note left: Inserts into dbo.NatureCheck (Id, Date, FarmId, PersonId, FarmName, FarmCVR, FarmAddress, ConsultantFirstName, ConsultantLastName) + } + + %% Relations / dependencies + CreateNatureCheckService --> IFarmRepository : uses + CreateNatureCheckService --> IPersonRepository : uses + CreateNatureCheckService --> INatureCheckCaseRepository : uses + CreateNatureCheckService --> ICreateNatureCheckRepository : calls + CreateNatureCheckService --> IEmailService : sends email + + ConsultantCreateNatureCheckViewModel --> CreateNatureCheckService : uses + ConsultantCreateNatureCheckViewModel --> Farm : displays + ConsultantCreateNatureCheckViewModel --> Person : displays + ConsultantCreateNatureCheckViewModel --> NatureCheckCase : displays + + ICreateNatureCheckRepository ..> uspCreateNatureCheck : executes + uspCreateNatureCheck ..> NatureCheckCase : inserts row into dbo.NatureCheck + + NatureCheckCase --> Farm : references + NatureCheckCase --> Person : references + Farm --> Address : has + Person --> Address : has \ No newline at end of file