Added functionality to stop recreating tas of same name

This commit is contained in:
ashutosh.nehete 2025-05-17 13:31:35 +05:30
parent 871493bf61
commit e76c203614

View File

@ -36,7 +36,7 @@ namespace Marco.Pms.Services.Helpers
List<ContactBucketMapping>? contactBuckets = await _context.ContactBucketMappings.Where(cb => bucketIds.Contains(cb.BucketId)).ToListAsync();
List<Guid> contactIds = contactBuckets.Select(cb => cb.ContactId).ToList();
var contacts = await _context.Contacts.Where(c => contactIds.Contains(c.Id) && c.TenantId == tenantId && c.IsActive).ToListAsync();
var contacts = await _context.Contacts.Include(c => c.ContactCategory).Where(c => contactIds.Contains(c.Id) && c.TenantId == tenantId && c.IsActive).ToListAsync();
var phoneNo = await _context.ContactsPhones.Where(p => contactIds.Contains(p.ContactId)).ToListAsync();
@ -118,7 +118,6 @@ namespace Marco.Pms.Services.Helpers
return ApiResponse<object>.SuccessResponse(list, System.String.Format("{0} contacts fetched successfully", list.Count), 200);
}
public async Task<ApiResponse<object>> GetContactsListByBucketId(Guid id)
{
Guid tenantId = _userHelper.GetTenantId();
@ -233,6 +232,7 @@ namespace Marco.Pms.Services.Helpers
_logger.LogInfo("Contact with ID {ContactId} created by Employee with ID {LoggedInEmployeeId}", contact.Id, LoggedInEmployee.Id);
var tags = await _context.ContactTagMasters.Where(t => t.TenantId == tenantId).ToListAsync();
var tagNames = tags.Select(t => t.Name.ToLower()).ToList();
var buckets = await _context.Buckets.Where(b => b.TenantId == tenantId).Select(b => b.Id).ToListAsync();
var projects = await _context.Projects.Where(p => p.TenantId == tenantId).Select(p => p.Id).ToListAsync();
@ -301,14 +301,14 @@ namespace Marco.Pms.Services.Helpers
{
foreach (var tag in createContact.Tags)
{
if (tag.Id != null && tags.Where(t => t.Id == tag.Id) != null)
if (tagNames.Contains(tag.Name.ToLower()))
{
ContactTagMapping tagMapping = new ContactTagMapping
ContactTagMaster existingTag = tags.Find(t => t.Name == tag.Name) ?? new ContactTagMaster();
_context.ContactTagMappings.Add(new ContactTagMapping
{
ContactTagtId = tag.Id != null ? tag.Id.Value : Guid.Empty,
ContactId = contact.Id
};
contactTagMappings.Add(tagMapping);
ContactId = contact.Id,
ContactTagtId = tag.Id ?? existingTag.Id
});
}
else if (tag.Id == null || tags.Where(t => t.Name == tag.Name) == null)
{
@ -373,7 +373,6 @@ 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>> UpdateContact(Guid id, UpdateContactDto updateContact)
{
Guid tenantId = _userHelper.GetTenantId();
@ -407,10 +406,12 @@ namespace Marco.Pms.Services.Helpers
List<ContactTagMapping> contactTags = await _context.ContactTagMappings.AsNoTracking().Where(m => m.ContactId == contact.Id).ToListAsync();
var tagIds = contactTags.Select(t => t.ContactTagtId).Distinct().ToList();
List<ContactProjectMapping> contactProjects = await _context.ContactProjectMappings.AsNoTracking().Where(m => m.ContactId == contact.Id).ToListAsync();
var projectIds = contactProjects.Select(t => t.ProjectId).Distinct().ToList();
List<ContactTagMaster> tags = await _context.ContactTagMasters.Where(t => tagIds.Contains(t.Id)).ToListAsync();
var tagNames = tags.Select(t => t.Name.ToLower()).ToList();
if (updateContact.ContactPhones != null)
{
@ -530,12 +531,13 @@ namespace Marco.Pms.Services.Helpers
var updatedTagIds = updateContact.Tags.Select(t => t.Id).Distinct().ToList();
foreach (var tag in updateContact.Tags)
{
if (tag.Id != null && !tagIds.Contains(tag.Id.Value))
if (tagNames.Contains(tag.Name.ToLower()))
{
ContactTagMaster existingTag = tags.Find(t => t.Name == tag.Name) ?? new ContactTagMaster();
_context.ContactTagMappings.Add(new ContactTagMapping
{
ContactId = contact.Id,
ContactTagtId = tag.Id.Value
ContactTagtId = tag.Id ?? existingTag.Id
});
}
else if (tag.Id == null || tag.Id == Guid.Empty)
@ -574,19 +576,7 @@ namespace Marco.Pms.Services.Helpers
UpdateAt = DateTime.UtcNow
});
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateException dbEx)
{
return ApiResponse<object>.ErrorResponse("User Send empty Payload", new
{
message = dbEx.Message,
innerexcption = dbEx.InnerException.Message
}, 400);
}
contact = await _context.Contacts.Include(c => c.ContactCategory).FirstOrDefaultAsync(c => c.Id == id && c.IsActive && c.TenantId == tenantId) ?? new Contact();
phones = await _context.ContactsPhones.AsNoTracking().Where(p => p.ContactId == contact.Id).ToListAsync();