Feature_Directory #90

Merged
vikas.nale merged 501 commits from Feature_Directory into main 2025-06-10 14:44:36 +00:00
3 changed files with 101 additions and 11 deletions
Showing only changes of commit ae51422079 - Show all commits

View File

@ -139,9 +139,9 @@ namespace Marco.Pms.Services.Controllers
}
[HttpDelete("{id}")]
public async Task<IActionResult> DeleteContact(Guid id)
public async Task<IActionResult> DeleteContact(Guid id, [FromQuery] bool? active)
{
var response = await _directoryHelper.DeleteContact(id);
var response = await _directoryHelper.DeleteContact(id, active ?? false);
if (response.StatusCode == 200)
{
return Ok(response);
@ -214,9 +214,9 @@ namespace Marco.Pms.Services.Controllers
}
[HttpDelete("note/{id}")]
public async Task<IActionResult> DeleteContactNote(Guid id)
public async Task<IActionResult> DeleteContactNote(Guid id, [FromQuery] bool? active)
{
var response = await _directoryHelper.DeleteContactNote(id);
var response = await _directoryHelper.DeleteContactNote(id, active ?? false);
return Ok(response);
}
@ -315,5 +315,27 @@ namespace Marco.Pms.Services.Controllers
return BadRequest(response);
}
}
[HttpDelete("bucket/{id}")]
public async Task<IActionResult> DeleteBucket(Guid id)
{
var response = await _directoryHelper.DeleteBucket(id);
if (response.StatusCode == 200)
{
return Ok(response);
}
else if (response.StatusCode == 404)
{
return NotFound(response);
}
else if (response.StatusCode == 401)
{
return Unauthorized(response);
}
else
{
return BadRequest(response);
}
}
}
}

View File

@ -862,7 +862,7 @@ namespace Marco.Pms.Services.Helpers
_logger.LogInfo("Employee {EmployeeId} fetched list of organizations in a tenant {TenantId}", LoggedInEmployee.Id, tenantId);
return ApiResponse<object>.SuccessResponse(organizationList, $"{organizationList.Count} records of organization names fetched from contacts", 200);
}
public async Task<ApiResponse<object>> DeleteContact(Guid id)
public async Task<ApiResponse<object>> DeleteContact(Guid id, bool active)
{
Guid tenantId = _userHelper.GetTenantId();
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
@ -874,7 +874,7 @@ namespace Marco.Pms.Services.Helpers
_logger.LogWarning("Employee with ID {LoggedInEmployeeId} tries to delete contact with ID {ContactId} is not found in database", LoggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("Contact not found", "Contact not found", 404);
}
contact.IsActive = false;
contact.IsActive = active;
_context.DirectoryUpdateLogs.Add(new DirectoryUpdateLog
{
@ -900,7 +900,15 @@ namespace Marco.Pms.Services.Helpers
Contact? contact = await _context.Contacts.FirstOrDefaultAsync(c => c.Id == id && c.IsActive && c.TenantId == tenantId);
if (contact != null)
{
List<ContactNote>? notes = await _context.ContactNotes.Where(n => n.ContactId == contact.Id && n.IsActive == active).ToListAsync();
List<ContactNote> notes = new List<ContactNote>();
if (active)
{
notes = await _context.ContactNotes.Where(n => n.ContactId == contact.Id && n.IsActive && n.TenantId == tenantId).ToListAsync();
}
else
{
notes = await _context.ContactNotes.Where(n => n.ContactId == contact.Id && n.TenantId == tenantId).ToListAsync();
}
List<ContactNoteVM>? noteVMs = new List<ContactNoteVM>();
foreach (var note in notes)
{
@ -973,7 +981,7 @@ namespace Marco.Pms.Services.Helpers
_logger.LogWarning("Employee with ID {LoggedInEmployeeId} sended empty payload", LoggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("User Send empty Payload", "User Send empty Payload", 400);
}
public async Task<ApiResponse<object>> DeleteContactNote(Guid id)
public async Task<ApiResponse<object>> DeleteContactNote(Guid id, bool active)
{
Guid tenentId = _userHelper.GetTenantId();
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
@ -981,7 +989,7 @@ namespace Marco.Pms.Services.Helpers
ContactNote? note = await _context.ContactNotes.FirstOrDefaultAsync(n => n.Id == id && n.TenantId == tenentId);
if (note != null)
{
note.IsActive = false;
note.IsActive = active;
_context.DirectoryUpdateLogs.Add(new DirectoryUpdateLog
{
RefereanceId = id,
@ -1248,6 +1256,66 @@ namespace Marco.Pms.Services.Helpers
_logger.LogWarning("Employee with ID {LoggedInEmployeeId} sended empty payload", LoggedInEmployee.Id);
return ApiResponse<object>.ErrorResponse("User Send empty Payload", "User Send empty Payload", 400);
}
public async Task<ApiResponse<object>> DeleteBucket(Guid id)
{
Guid tenentId = _userHelper.GetTenantId();
var LoggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
Bucket? bucket = await _context.Buckets.FirstOrDefaultAsync(n => n.Id == id && n.TenantId == tenentId);
if (bucket != null)
{
List<EmployeeBucketMapping>? employeeBuckets = await _context.EmployeeBucketMappings.Where(eb => eb.BucketId == id).ToListAsync();
List<ContactBucketMapping>? contactBuckets = await _context.ContactBucketMappings.Where(eb => eb.BucketId == id).ToListAsync();
if (contactBuckets.Any())
{
_logger.LogInfo("Employee {EmployeeId} attempted to deleted bucket {BucketId},but bucket have contacts in it.", LoggedInEmployee.Id, id);
return ApiResponse<object>.ErrorResponse("This bucket can not be deleted", "This bucket can not be deleted", 400);
}
var assignedRoleIds = await _context.EmployeeRoleMappings.Where(r => r.EmployeeId == LoggedInEmployee.Id).Select(r => r.RoleId).ToListAsync();
var permissionIds = await _context.RolePermissionMappings.Where(rp => assignedRoleIds.Contains(rp.ApplicationRoleId)).Select(rp => rp.FeaturePermissionId).Distinct().ToListAsync();
var bucketIds = employeeBuckets.Where(eb => eb.EmployeeId == LoggedInEmployee.Id).Select(eb => eb.BucketId).ToList();
Bucket? accessableBucket = null;
if (permissionIds.Contains(directoryAdmin))
{
accessableBucket = bucket;
}
else if (permissionIds.Contains(directoryManager) && bucketIds.Contains(id))
{
accessableBucket = bucket;
}
else if (permissionIds.Contains(directoryUser))
{
if (bucket.CreatedByID == LoggedInEmployee.Id)
{
accessableBucket = bucket;
}
}
if (accessableBucket == null)
{
_logger.LogError("Employee {EmployeeId} attempted to access bucket {BucketId} without the necessary permissions.", LoggedInEmployee.Id, bucket.Id);
return ApiResponse<object>.ErrorResponse("You don't have permission to access this bucket", "You don't have permission to access this bucket", 401);
}
_context.EmployeeBucketMappings.RemoveRange(employeeBuckets);
_context.Buckets.Remove(bucket);
_context.DirectoryUpdateLogs.Add(new DirectoryUpdateLog
{
RefereanceId = id,
UpdatedById = LoggedInEmployee.Id,
UpdateAt = DateTime.UtcNow
});
await _context.SaveChangesAsync();
_logger.LogInfo("Employee {EmployeeId} deleted bucket {BucketId} and related entries", LoggedInEmployee.Id, id);
return ApiResponse<object>.SuccessResponse(new { }, "Note deleted successfully", 200);
}
_logger.LogWarning("Employee {EmployeeId} tries to delete bucket {BucketId} but not found in database", LoggedInEmployee.Id, id);
return ApiResponse<object>.SuccessResponse(new { }, "Bucket deleted successfully", 200);
}
private bool Compare(string sentence, string search)
{
sentence = sentence.Trim().ToLower();