diff --git a/Marco.Pms.Model/Dtos/Tenant/UpdateTenantDto.cs b/Marco.Pms.Model/Dtos/Tenant/UpdateTenantDto.cs index 7578ecb..0d15c03 100644 --- a/Marco.Pms.Model/Dtos/Tenant/UpdateTenantDto.cs +++ b/Marco.Pms.Model/Dtos/Tenant/UpdateTenantDto.cs @@ -10,10 +10,8 @@ public required string BillingAddress { get; set; } public string? TaxId { get; set; } public string? logoImage { get; set; } - public required string OrganizationName { get; set; } public string? OfficeNumber { get; set; } public required string ContactNumber { get; set; } - //public required DateTime OnBoardingDate { get; set; } public required string OrganizationSize { get; set; } public required Guid IndustryId { get; set; } public required string Reference { get; set; } diff --git a/Marco.Pms.Services/Controllers/TenantController.cs b/Marco.Pms.Services/Controllers/TenantController.cs index 64f6a17..983c4ca 100644 --- a/Marco.Pms.Services/Controllers/TenantController.cs +++ b/Marco.Pms.Services/Controllers/TenantController.cs @@ -609,9 +609,11 @@ namespace Marco.Pms.Services.Controllers // 2. Check permissions using a single service scope to avoid overhead bool hasManagePermission, hasModifyPermission; + UtilityMongoDBHelper _updateLogHelper; using (var scope = _serviceScopeFactory.CreateScope()) { var permissionService = scope.ServiceProvider.GetRequiredService(); + _updateLogHelper = scope.ServiceProvider.GetRequiredService(); var manageTask = permissionService.HasPermission(PermissionsMaster.ManageTenants, loggedInEmployee.Id); var modifyTask = permissionService.HasPermission(PermissionsMaster.ModifyTenant, loggedInEmployee.Id); @@ -635,6 +637,7 @@ namespace Marco.Pms.Services.Controllers var tenant = await context.Tenants .Include(t => t.Industry) .Include(t => t.TenantStatus) + .AsNoTracking() .FirstOrDefaultAsync(t => t.Id == id); if (tenant == null) @@ -645,6 +648,7 @@ namespace Marco.Pms.Services.Controllers _logger.LogInfo("Tenant {TenantId} fetched for update.", tenant.Id); + var tenantObject = _updateLogHelper.EntityToBsonDocument(tenant); // 5. Map update DTO properties to the tenant entity _mapper.Map(model, tenant); @@ -658,7 +662,7 @@ namespace Marco.Pms.Services.Controllers _logger.LogWarning("Root employee not found for tenant {TenantId}", id); return NotFound(ApiResponse.ErrorResponse("Root employee not found", "Root employee not found", 404)); } - + var employeeobject = _updateLogHelper.EntityToBsonDocument(rootEmployee); // 7. Update root employee details rootEmployee.FirstName = model.FirstName; rootEmployee.LastName = model.LastName; @@ -668,6 +672,7 @@ namespace Marco.Pms.Services.Controllers // 8. Save changes to DB try { + context.Tenants.Update(tenant); await context.SaveChangesAsync(); _logger.LogInfo("Tenant {TenantId} and root employee updated successfully.", tenant.Id); } @@ -677,6 +682,29 @@ namespace Marco.Pms.Services.Controllers return StatusCode(500, ApiResponse.ErrorResponse("Error updating tenant", "Unexpected error occurred while updating tenant.", 500)); } + var tenantTaks = Task.Run(async () => + { + await _updateLogHelper.PushToUpdateLogsAsync(new UpdateLogsObject + { + EntityId = tenant.Id.ToString(), + UpdatedById = loggedInEmployee.Id.ToString(), + OldObject = tenantObject, + UpdatedAt = DateTime.UtcNow + }, "TenantModificationLog"); + }); + var employeeTaks = Task.Run(async () => + { + await _updateLogHelper.PushToUpdateLogsAsync(new UpdateLogsObject + { + EntityId = rootEmployee.Id.ToString(), + UpdatedById = loggedInEmployee.Id.ToString(), + OldObject = employeeobject, + UpdatedAt = DateTime.UtcNow + }, "EmployeeModificationLog"); + }); + + await Task.WhenAll(tenantTaks, employeeTaks); + // 9. Map updated tenant to ViewModel for response var response = _mapper.Map(tenant); diff --git a/Marco.Pms.Services/MappingProfiles/MappingProfile.cs b/Marco.Pms.Services/MappingProfiles/MappingProfile.cs index 4a40536..aad81de 100644 --- a/Marco.Pms.Services/MappingProfiles/MappingProfile.cs +++ b/Marco.Pms.Services/MappingProfiles/MappingProfile.cs @@ -47,10 +47,6 @@ namespace Marco.Pms.Services.MappingProfiles .ForMember( dest => dest.ContactName, opt => opt.MapFrom(src => $"{src.FirstName} {src.LastName}") - ) - .ForMember( - dest => dest.Name, - opt => opt.MapFrom(src => src.OrganizationName) ); CreateMap() diff --git a/Marco.Pms.Services/appsettings.Development.json b/Marco.Pms.Services/appsettings.Development.json index d6ea6a3..e7fdcee 100644 --- a/Marco.Pms.Services/appsettings.Development.json +++ b/Marco.Pms.Services/appsettings.Development.json @@ -49,6 +49,6 @@ "MongoDB": { "SerilogDatabaseUrl": "mongodb://localhost:27017/DotNetLogs", "ConnectionString": "mongodb://localhost:27017/MarcoBMS_Caches?socketTimeoutMS=500&serverSelectionTimeoutMS=500&connectTimeoutMS=500", - "ModificationConnectionString": "mongodb://devuser:DevPass123@147.93.98.152:27017/MarcoBMSLocalDev?authSource=admin&socketTimeoutMS=500&serverSelectionTimeoutMS=500&connectTimeoutMS=500" + "ModificationConnectionString": "mongodb://devuser:DevPass123@147.93.98.152:27017/MarcoBMSLocalDev?authSource=admin&eplicaSet=rs01&directConnection=true" } }