mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 09:33:13 +00:00
91 lines
3 KiB
C#
91 lines
3 KiB
C#
using Data.SeaHavenIndustries;
|
|
using Data.SeaHavenIndustries.Enums;
|
|
using SeaHaven.Services.DTOs;
|
|
|
|
namespace SeaHaven.Services.Helpers
|
|
{
|
|
public static class WorkOrderMediaProjection
|
|
{
|
|
public static List<WorkOrderMediaFileDto> ProjectAll(
|
|
WorkOrder workOrder,
|
|
IEnumerable<WorkOrderAttachments> attachments)
|
|
{
|
|
var media = new List<WorkOrderMediaFileDto>();
|
|
var attachmentId = -1;
|
|
|
|
if (!string.IsNullOrWhiteSpace(workOrder.BeforPhotoAttachment))
|
|
{
|
|
media.Add(new WorkOrderMediaFileDto
|
|
{
|
|
Id = attachmentId--,
|
|
Category = WorkOrderMediaCategory.Before,
|
|
Url = workOrder.BeforPhotoAttachment,
|
|
FileName = ExtractFileName(workOrder.BeforPhotoAttachment),
|
|
IsLegacy = true
|
|
});
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(workOrder.AfterPhotoAttachment))
|
|
{
|
|
media.Add(new WorkOrderMediaFileDto
|
|
{
|
|
Id = attachmentId--,
|
|
Category = WorkOrderMediaCategory.After,
|
|
Url = workOrder.AfterPhotoAttachment,
|
|
FileName = ExtractFileName(workOrder.AfterPhotoAttachment),
|
|
IsLegacy = true
|
|
});
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(workOrder.SignOffAttachment))
|
|
{
|
|
media.Add(new WorkOrderMediaFileDto
|
|
{
|
|
Id = attachmentId--,
|
|
Category = WorkOrderMediaCategory.Completion,
|
|
Url = workOrder.SignOffAttachment,
|
|
FileName = ExtractFileName(workOrder.SignOffAttachment),
|
|
IsLegacy = true
|
|
});
|
|
}
|
|
|
|
foreach (var attachment in attachments.Where(a => a.IsDeleted != true))
|
|
{
|
|
if (string.IsNullOrWhiteSpace(attachment.Attachments))
|
|
continue;
|
|
|
|
media.Add(new WorkOrderMediaFileDto
|
|
{
|
|
Id = attachment.Id,
|
|
Category = attachment.Category ?? WorkOrderMediaCategory.Extra,
|
|
Url = attachment.Attachments,
|
|
FileName = ExtractFileName(attachment.Attachments),
|
|
UploadedAt = attachment.CreatedDate?.ToUniversalTime().ToString("o"),
|
|
IsLegacy = false
|
|
});
|
|
}
|
|
|
|
return media;
|
|
}
|
|
|
|
private static string? ExtractFileName(string url)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(url))
|
|
return null;
|
|
|
|
var lastSlash = url.LastIndexOf('/');
|
|
var segment = lastSlash >= 0 && lastSlash < url.Length - 1
|
|
? url[(lastSlash + 1)..]
|
|
: url;
|
|
|
|
try
|
|
{
|
|
return Uri.UnescapeDataString(segment);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
return segment;
|
|
}
|
|
}
|
|
}
|
|
}
|