Storing batch ID when saving any images as well stop storing base64 in database

This commit is contained in:
ashutosh.nehete 2025-07-02 10:01:10 +05:30
parent ba1e644fd8
commit b77a5b16cd
4 changed files with 57 additions and 19 deletions

View File

@ -90,29 +90,35 @@ namespace Marco.Pms.Model.Mapper
}; };
} }
public static Document ToDocumentFromForumAttachmentDto(this ForumAttachmentDto AttachmentDto, string objectKey, string thumbS3Key, DateTime uploadedAt, Guid tenantId) public static Document ToDocumentFromForumAttachmentDto(this ForumAttachmentDto AttachmentDto, string objectKey, string thumbS3Key, DateTime uploadedAt,
Guid tenantId, Guid batchId, Guid loggedInEmployeeId)
{ {
return new Document return new Document
{ {
BatchId = batchId,
UploadedById = loggedInEmployeeId,
FileName = AttachmentDto.FileName, FileName = AttachmentDto.FileName,
ContentType = AttachmentDto.ContentType, ContentType = AttachmentDto.ContentType,
S3Key = objectKey, S3Key = objectKey,
ThumbS3Key = thumbS3Key, ThumbS3Key = thumbS3Key,
Base64Data = AttachmentDto.Base64Data, //Base64Data = AttachmentDto.Base64Data,
FileSize = AttachmentDto.FileSize, FileSize = AttachmentDto.FileSize,
UploadedAt = uploadedAt, UploadedAt = uploadedAt,
TenantId = tenantId TenantId = tenantId
}; };
} }
public static Document ToDocumentFromUpdateAttachmentDto(this UpdateAttachmentDto AttachmentDto, string objectKey, string thumbS3Key, DateTime uploadedAt, Guid tenantId) public static Document ToDocumentFromUpdateAttachmentDto(this UpdateAttachmentDto AttachmentDto, string objectKey, string thumbS3Key, DateTime uploadedAt,
Guid tenantId, Guid batchId, Guid loggedInEmployeeId)
{ {
return new Document return new Document
{ {
BatchId = batchId,
UploadedById = loggedInEmployeeId,
FileName = AttachmentDto.FileName, FileName = AttachmentDto.FileName,
ContentType = AttachmentDto.ContentType, ContentType = AttachmentDto.ContentType,
S3Key = objectKey, S3Key = objectKey,
ThumbS3Key = thumbS3Key, ThumbS3Key = thumbS3Key,
Base64Data = AttachmentDto.Base64Data, //Base64Data = AttachmentDto.Base64Data,
FileSize = AttachmentDto.FileSize, FileSize = AttachmentDto.FileSize,
UploadedAt = uploadedAt, UploadedAt = uploadedAt,
TenantId = tenantId TenantId = tenantId

View File

@ -603,7 +603,8 @@ namespace MarcoBMS.Services.Controllers
} }
Guid tenantId = GetTenantId(); Guid tenantId = GetTenantId();
var currentEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var batchId = Guid.NewGuid();
using var transaction = await _context.Database.BeginTransactionAsync(); using var transaction = await _context.Database.BeginTransactionAsync();
try try
@ -704,10 +705,12 @@ namespace MarcoBMS.Services.Controllers
document = new Document document = new Document
{ {
BatchId = batchId,
UploadedById = loggedInEmployee.Id,
FileName = recordAttendanceDot.Image.FileName ?? "", FileName = recordAttendanceDot.Image.FileName ?? "",
ContentType = recordAttendanceDot.Image.ContentType, ContentType = recordAttendanceDot.Image.ContentType,
S3Key = objectKey, S3Key = objectKey,
Base64Data = recordAttendanceDot.Image.Base64Data, //Base64Data = recordAttendanceDot.Image.Base64Data,
FileSize = recordAttendanceDot.Image.FileSize, FileSize = recordAttendanceDot.Image.FileSize,
UploadedAt = recordAttendanceDot.Date, UploadedAt = recordAttendanceDot.Date,
TenantId = tenantId TenantId = tenantId
@ -728,7 +731,7 @@ namespace MarcoBMS.Services.Controllers
Longitude = recordAttendanceDot.Longitude, Longitude = recordAttendanceDot.Longitude,
DocumentId = document?.Id, DocumentId = document?.Id,
TenantId = tenantId, TenantId = tenantId,
UpdatedBy = recordAttendanceDot.EmployeeID, UpdatedBy = loggedInEmployee.Id,
UpdatedOn = recordAttendanceDot.Date UpdatedOn = recordAttendanceDot.Date
}; };
_context.AttendanceLogs.Add(attendanceLog); _context.AttendanceLogs.Add(attendanceLog);
@ -755,7 +758,7 @@ namespace MarcoBMS.Services.Controllers
var notification = new var notification = new
{ {
LoggedInUserId = currentEmployee.Id, LoggedInUserId = loggedInEmployee.Id,
Keyword = "Attendance", Keyword = "Attendance",
Activity = recordAttendanceDot.Id == Guid.Empty ? 1 : 0, Activity = recordAttendanceDot.Id == Guid.Empty ? 1 : 0,
ProjectId = attendance.ProjectID, ProjectId = attendance.ProjectID,

View File

@ -48,6 +48,8 @@ namespace Marco.Pms.Services.Controllers
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
Guid tenantId = _userHelper.GetTenantId(); Guid tenantId = _userHelper.GetTenantId();
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var batchId = Guid.NewGuid();
TicketForum ticketForum = createTicketDto.ToTicketForumFromCreateTicketDto(tenantId); TicketForum ticketForum = createTicketDto.ToTicketForumFromCreateTicketDto(tenantId);
_context.Tickets.Add(ticketForum); _context.Tickets.Add(ticketForum);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
@ -79,7 +81,7 @@ namespace Marco.Pms.Services.Controllers
string objectKey = $"tenant-{tenantId}/project-{createTicketDto.LinkedProjectId}/froum/{fileName}"; string objectKey = $"tenant-{tenantId}/project-{createTicketDto.LinkedProjectId}/froum/{fileName}";
await _s3Service.UploadFileAsync(base64, fileType, objectKey); await _s3Service.UploadFileAsync(base64, fileType, objectKey);
Document document = attachmentDto.ToDocumentFromForumAttachmentDto(objectKey, objectKey, createTicketDto.CreatedAt, tenantId); Document document = attachmentDto.ToDocumentFromForumAttachmentDto(objectKey, objectKey, createTicketDto.CreatedAt, tenantId, batchId, loggedInEmployee.Id);
_context.Documents.Add(document); _context.Documents.Add(document);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
@ -162,7 +164,15 @@ namespace Marco.Pms.Services.Controllers
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid data", errors, 400));
} }
Guid tenantId = _userHelper.GetTenantId(); Guid tenantId = _userHelper.GetTenantId();
var existingTicket = await _context.Tickets.Include(t => t.TicketTypeMaster).Include(t => t.TicketStatusMaster).Include(t => t.Priority).AsNoTracking().FirstOrDefaultAsync(t => t.Id == updateTicketDto.Id); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var batchId = Guid.NewGuid();
var existingTicket = await _context.Tickets
.Include(t => t.TicketTypeMaster)
.Include(t => t.TicketStatusMaster)
.Include(t => t.Priority)
.AsNoTracking()
.FirstOrDefaultAsync(t => t.Id == updateTicketDto.Id);
if (existingTicket != null) if (existingTicket != null)
{ {
TicketForum ticketForum = updateTicketDto.ToTicketForumFromUpdateTicketDto(existingTicket); TicketForum ticketForum = updateTicketDto.ToTicketForumFromUpdateTicketDto(existingTicket);
@ -202,7 +212,7 @@ namespace Marco.Pms.Services.Controllers
string objectKey = $"tenant-{tenantId}/project-{updateTicketDto.LinkedProjectId}/froum/{fileName}"; string objectKey = $"tenant-{tenantId}/project-{updateTicketDto.LinkedProjectId}/froum/{fileName}";
await _s3Service.UploadFileAsync(base64, fileType, objectKey); await _s3Service.UploadFileAsync(base64, fileType, objectKey);
Document document = attachmentDto.ToDocumentFromUpdateAttachmentDto(objectKey, objectKey, updateTicketDto.CreatedAt, tenantId); Document document = attachmentDto.ToDocumentFromUpdateAttachmentDto(objectKey, objectKey, updateTicketDto.CreatedAt, tenantId, batchId, loggedInEmployee.Id);
_context.Documents.Add(document); _context.Documents.Add(document);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
@ -344,6 +354,9 @@ namespace Marco.Pms.Services.Controllers
} }
Guid tenantId = _userHelper.GetTenantId(); Guid tenantId = _userHelper.GetTenantId();
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var batchId = Guid.NewGuid();
List<TicketAttachment> attachments = new List<TicketAttachment>(); List<TicketAttachment> attachments = new List<TicketAttachment>();
List<Document> documents = new List<Document>(); List<Document> documents = new List<Document>();
@ -381,7 +394,7 @@ namespace Marco.Pms.Services.Controllers
string objectKey = $"tenant-{tenantId}/project-{ticket.LinkedProjectId}/froum/{fileName}"; string objectKey = $"tenant-{tenantId}/project-{ticket.LinkedProjectId}/froum/{fileName}";
await _s3Service.UploadFileAsync(base64, fileType, objectKey); await _s3Service.UploadFileAsync(base64, fileType, objectKey);
Document document = attachmentDto.ToDocumentFromForumAttachmentDto(objectKey, objectKey, addCommentDto.SentAt, tenantId); Document document = attachmentDto.ToDocumentFromForumAttachmentDto(objectKey, objectKey, addCommentDto.SentAt, tenantId, batchId, loggedInEmployee.Id);
_context.Documents.Add(document); _context.Documents.Add(document);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
@ -429,6 +442,9 @@ namespace Marco.Pms.Services.Controllers
} }
Guid tenantId = _userHelper.GetTenantId(); Guid tenantId = _userHelper.GetTenantId();
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var batchId = Guid.NewGuid();
List<TicketAttachment> attachments = new List<TicketAttachment>(); List<TicketAttachment> attachments = new List<TicketAttachment>();
TicketForum? ticket = await _context.Tickets.FirstOrDefaultAsync(t => t.Id == updateCommentDto.TicketId); TicketForum? ticket = await _context.Tickets.FirstOrDefaultAsync(t => t.Id == updateCommentDto.TicketId);
@ -473,7 +489,7 @@ namespace Marco.Pms.Services.Controllers
string objectKey = $"tenant-{tenantId}/project-{ticket.LinkedProjectId}/froum/{fileName}"; string objectKey = $"tenant-{tenantId}/project-{ticket.LinkedProjectId}/froum/{fileName}";
await _s3Service.UploadFileAsync(base64, fileType, objectKey); await _s3Service.UploadFileAsync(base64, fileType, objectKey);
Document document = attachmentDto.ToDocumentFromUpdateAttachmentDto(objectKey, objectKey, existingComment.SentAt, tenantId); Document document = attachmentDto.ToDocumentFromUpdateAttachmentDto(objectKey, objectKey, existingComment.SentAt, tenantId, batchId, loggedInEmployee.Id);
_context.Documents.Add(document); _context.Documents.Add(document);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
@ -541,6 +557,9 @@ namespace Marco.Pms.Services.Controllers
} }
Guid tenantId = _userHelper.GetTenantId(); Guid tenantId = _userHelper.GetTenantId();
var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
var batchId = Guid.NewGuid();
List<TicketAttachmentVM> ticketAttachmentVMs = new List<TicketAttachmentVM>(); List<TicketAttachmentVM> ticketAttachmentVMs = new List<TicketAttachmentVM>();
List<Guid> ticketIds = forumAttachmentDtos.Select(f => f.TicketId.HasValue ? f.TicketId.Value : Guid.Empty).ToList(); List<Guid> ticketIds = forumAttachmentDtos.Select(f => f.TicketId.HasValue ? f.TicketId.Value : Guid.Empty).ToList();
@ -579,7 +598,7 @@ namespace Marco.Pms.Services.Controllers
string objectKey = $"tenant-{tenantId}/project-{ticket?.LinkedProjectId}/froum/{fileName}"; string objectKey = $"tenant-{tenantId}/project-{ticket?.LinkedProjectId}/froum/{fileName}";
await _s3Service.UploadFileAsync(base64, fileType, objectKey); await _s3Service.UploadFileAsync(base64, fileType, objectKey);
Document document = forumAttachmentDto.ToDocumentFromForumAttachmentDto(objectKey, objectKey, forumAttachmentDto.SentAt, tenantId); Document document = forumAttachmentDto.ToDocumentFromForumAttachmentDto(objectKey, objectKey, forumAttachmentDto.SentAt, tenantId, batchId, loggedInEmployee.Id);
_context.Documents.Add(document); _context.Documents.Add(document);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();

View File

@ -204,6 +204,7 @@ namespace MarcoBMS.Services.Controllers
var building = await _context.Buildings var building = await _context.Buildings
.FirstOrDefaultAsync(b => b.Id == buildingId); .FirstOrDefaultAsync(b => b.Id == buildingId);
var batchId = Guid.NewGuid();
foreach (var image in reportTask.Images) foreach (var image in reportTask.Images)
{ {
@ -225,10 +226,12 @@ namespace MarcoBMS.Services.Controllers
var document = new Document var document = new Document
{ {
BatchId = batchId,
UploadedById = loggedInEmployee.Id,
FileName = image.FileName ?? "", FileName = image.FileName ?? "",
ContentType = image.ContentType ?? "", ContentType = image.ContentType ?? "",
S3Key = objectKey, S3Key = objectKey,
Base64Data = image.Base64Data, //Base64Data = image.Base64Data,
FileSize = image.FileSize, FileSize = image.FileSize,
UploadedAt = DateTime.UtcNow, UploadedAt = DateTime.UtcNow,
TenantId = tenantId TenantId = tenantId
@ -265,7 +268,7 @@ namespace MarcoBMS.Services.Controllers
_logger.LogInfo("AddCommentForTask called for TaskAllocationId: {TaskId}", createComment.TaskAllocationId); _logger.LogInfo("AddCommentForTask called for TaskAllocationId: {TaskId}", createComment.TaskAllocationId);
var tenantId = GetTenantId(); var tenantId = GetTenantId();
var employee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
// Validate Task Allocation and associated WorkItem // Validate Task Allocation and associated WorkItem
var taskAllocation = await _context.TaskAllocations var taskAllocation = await _context.TaskAllocations
@ -287,13 +290,14 @@ namespace MarcoBMS.Services.Controllers
var building = await _context.Buildings.FirstOrDefaultAsync(b => b.Id == buildingId); var building = await _context.Buildings.FirstOrDefaultAsync(b => b.Id == buildingId);
// Save comment // Save comment
var comment = createComment.ToCommentFromCommentDto(tenantId, employee.Id); var comment = createComment.ToCommentFromCommentDto(tenantId, loggedInEmployee.Id);
_context.TaskComments.Add(comment); _context.TaskComments.Add(comment);
await _context.SaveChangesAsync(); await _context.SaveChangesAsync();
_logger.LogInfo("Comment saved with Id: {CommentId}", comment.Id); _logger.LogInfo("Comment saved with Id: {CommentId}", comment.Id);
// Process image uploads // Process image uploads
var images = createComment.Images; var images = createComment.Images;
var batchId = Guid.NewGuid();
if (images != null && images.Any()) if (images != null && images.Any())
{ {
@ -319,10 +323,12 @@ namespace MarcoBMS.Services.Controllers
var document = new Document var document = new Document
{ {
BatchId = batchId,
UploadedById = loggedInEmployee.Id,
FileName = image.FileName ?? string.Empty, FileName = image.FileName ?? string.Empty,
ContentType = image.ContentType ?? fileType, ContentType = image.ContentType ?? fileType,
S3Key = objectKey, S3Key = objectKey,
Base64Data = image.Base64Data, //Base64Data = image.Base64Data,
FileSize = image.FileSize, FileSize = image.FileSize,
UploadedAt = DateTime.UtcNow, UploadedAt = DateTime.UtcNow,
TenantId = tenantId TenantId = tenantId
@ -731,6 +737,8 @@ namespace MarcoBMS.Services.Controllers
var building = await _context.Buildings var building = await _context.Buildings
.FirstOrDefaultAsync(b => b.Id == buildingId); .FirstOrDefaultAsync(b => b.Id == buildingId);
var batchId = Guid.NewGuid();
foreach (var image in approveTask.Images) foreach (var image in approveTask.Images)
{ {
if (string.IsNullOrEmpty(image.Base64Data)) if (string.IsNullOrEmpty(image.Base64Data))
@ -749,10 +757,12 @@ namespace MarcoBMS.Services.Controllers
var document = new Document var document = new Document
{ {
BatchId = batchId,
UploadedById = loggedInEmployee.Id,
FileName = fileName, FileName = fileName,
ContentType = image.ContentType ?? string.Empty, ContentType = image.ContentType ?? string.Empty,
S3Key = objectKey, S3Key = objectKey,
Base64Data = image.Base64Data, //Base64Data = image.Base64Data,
FileSize = image.FileSize, FileSize = image.FileSize,
UploadedAt = DateTime.UtcNow, UploadedAt = DateTime.UtcNow,
TenantId = tenantId TenantId = tenantId