1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
using AutoMapper;
using Microsoft.AspNetCore.Mvc;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using Timeline.Controllers;
using Timeline.Entities;
using Timeline.Models.Http;
using Timeline.Services;
namespace Timeline.Models.Mapper
{
public static class TimelineMapper
{
public static HttpTimeline MapToHttp(this TimelineEntity entity, IUrlHelper urlHelper)
{
var timelineName = entity.Name is null ? "@" + entity.Owner.Username : entity.Name;
return new HttpTimeline(
uniqueId: entity.UniqueId,
title: string.IsNullOrEmpty(entity.Title) ? timelineName : entity.Title,
name: timelineName,
nameLastModifed: entity.NameLastModified,
description: entity.Description ?? "",
owner: entity.Owner.MapToHttp(urlHelper),
visibility: entity.Visibility,
members: entity.Members.Select(m => m.User.MapToHttp(urlHelper)).ToList(),
createTime: entity.CreateTime,
lastModified: entity.LastModified,
links: new HttpTimelineLinks(
self: urlHelper.ActionLink(nameof(TimelineController.TimelineGet), nameof(TimelineController)[0..^nameof(Controller).Length], new { timeline = timelineName }),
posts: urlHelper.ActionLink(nameof(TimelineController.PostListGet), nameof(TimelineController)[0..^nameof(Controller).Length], new { timeline = timelineName })
)
);
}
public static List<HttpTimeline> MapToHttp(this List<TimelineEntity> entites, IUrlHelper urlHelper)
{
return entites.Select(e => e.MapToHttp(urlHelper)).ToList();
}
public static HttpTimelinePost MapToHttp(this TimelinePostEntity entity, string timelineName, IUrlHelper urlHelper)
{
HttpTimelinePostContent? content = null;
if (entity.Content != null)
{
content = entity.ContentType switch
{
TimelinePostContentTypes.Text => new HttpTimelinePostContent
(
type: TimelinePostContentTypes.Text,
text: entity.Content,
url: null,
eTag: null
),
TimelinePostContentTypes.Image => new HttpTimelinePostContent
(
type: TimelinePostContentTypes.Image,
text: null,
url: urlHelper.ActionLink(nameof(TimelineController.PostDataGet), nameof(TimelineController)[0..^nameof(Controller).Length], new { timeline = timelineName, post = entity.LocalId }),
eTag: $"\"{entity.Content}\""
),
_ => throw new DatabaseCorruptedException(string.Format(CultureInfo.InvariantCulture, "Unknown timeline post type {0}.", entity.ContentType))
};
}
return new HttpTimelinePost(
id: entity.LocalId,
content: content,
deleted: content is null,
time: entity.Time,
author: entity.Author?.MapToHttp(urlHelper),
lastUpdated: entity.LastUpdated
);
}
public static List<HttpTimelinePost> MapToHttp(this List<TimelinePostEntity> entities, string timelineName, IUrlHelper urlHelper)
{
return entities.Select(e => e.MapToHttp(timelineName, urlHelper)).ToList();
}
}
}
|