mirror of
https://github.com/Sea-Haven-Industries/shoc-backend.git
synced 2026-09-30 04:53:11 +00:00
52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
using Data.SeaHavenIndustries;
|
|
using SeaHaven.Services.DTOs;
|
|
|
|
namespace SeaHaven.Services.Helpers
|
|
{
|
|
public static class WorkOrderCommentProjection
|
|
{
|
|
public static WorkOrderCommentDto ToDto(
|
|
Comments comment,
|
|
IReadOnlyDictionary<string, string>? displayNames = null)
|
|
{
|
|
return new WorkOrderCommentDto
|
|
{
|
|
Id = comment.Id,
|
|
AuthorId = comment.UserId,
|
|
AuthorName = ResolveAuthorName(comment, displayNames),
|
|
Text = comment.Commenttext ?? "",
|
|
Time = (comment.CreatedDate ?? DateTime.UtcNow).ToUniversalTime().ToString("o"),
|
|
Documents = comment.Documents
|
|
};
|
|
}
|
|
|
|
public static List<WorkOrderCommentDto> ToDtos(
|
|
IEnumerable<Comments> comments,
|
|
IReadOnlyDictionary<string, string>? displayNames = null)
|
|
=> comments.Select(c => ToDto(c, displayNames)).ToList();
|
|
|
|
public static IEnumerable<string> CollectAuthorUserIds(IEnumerable<Comments> comments)
|
|
=> comments
|
|
.Where(c => !string.IsNullOrWhiteSpace(c.UserId))
|
|
.Select(c => c.UserId!)
|
|
.Distinct(StringComparer.Ordinal);
|
|
|
|
private static string? ResolveAuthorName(
|
|
Comments comment,
|
|
IReadOnlyDictionary<string, string>? displayNames)
|
|
{
|
|
if (!string.IsNullOrWhiteSpace(comment.UserId)
|
|
&& displayNames != null
|
|
&& displayNames.TryGetValue(comment.UserId, out var name)
|
|
&& !string.IsNullOrWhiteSpace(name))
|
|
{
|
|
return name;
|
|
}
|
|
|
|
if (!string.IsNullOrWhiteSpace(comment.Commenter))
|
|
return comment.Commenter.Trim();
|
|
|
|
return null;
|
|
}
|
|
}
|
|
}
|