From 6e067a28d8527726a2a17045bef0f0e3d3430ed5 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 23 Apr 2021 17:28:18 +0800 Subject: refactor: Refactor a lot. --- .../TimelinePostContentToDataMigration.cs | 70 ++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 BackEnd/Timeline/Services/DatabaseManagement/TimelinePostContentToDataMigration.cs (limited to 'BackEnd/Timeline/Services/DatabaseManagement/TimelinePostContentToDataMigration.cs') diff --git a/BackEnd/Timeline/Services/DatabaseManagement/TimelinePostContentToDataMigration.cs b/BackEnd/Timeline/Services/DatabaseManagement/TimelinePostContentToDataMigration.cs new file mode 100644 index 00000000..605223f3 --- /dev/null +++ b/BackEnd/Timeline/Services/DatabaseManagement/TimelinePostContentToDataMigration.cs @@ -0,0 +1,70 @@ +using Microsoft.EntityFrameworkCore; +using SixLabors.ImageSharp; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using Timeline.Entities; +using Timeline.Models; + +namespace Timeline.Services.DatabaseManagement +{ + public class TimelinePostContentToDataMigration : IDatabaseCustomMigration + { + private readonly IDataManager _dataManager; + + public TimelinePostContentToDataMigration(IDataManager dataManager) + { + _dataManager = dataManager; + } + + public string GetName() => "TimelinePostContentToData"; + + public async Task ExecuteAsync(DatabaseContext database, CancellationToken cancellationToken) + { +#pragma warning disable CS0618 + var postEntities = await database.TimelinePosts.ToListAsync(cancellationToken); + + foreach (var postEntity in postEntities) + { + if (postEntity.Content is null) + { + postEntity.Deleted = true; + } + else + { + if (postEntity.ContentType == "text") + { + var tag = await _dataManager.RetainEntry(Encoding.UTF8.GetBytes(postEntity.Content)); + database.TimelinePostData.Add(new TimelinePostDataEntity + { + DataTag = tag, + Kind = MimeTypes.TextPlain, + Index = 0, + PostId = postEntity.Id, + LastUpdated = postEntity.LastUpdated + }); + } + else + { + var data = await _dataManager.GetEntryAndCheck(postEntity.Content, "Old image content does not have corresponding data with the tag."); + var format = Image.DetectFormat(data); + database.TimelinePostData.Add(new TimelinePostDataEntity + { + DataTag = postEntity.Content, + Kind = format.DefaultMimeType, + Index = 0, + PostId = postEntity.Id, + LastUpdated = postEntity.LastUpdated + }); + } + } + postEntity.Content = null; + postEntity.ContentType = null; + postEntity.ExtraContent = null; + } + + await database.SaveChangesAsync(cancellationToken); +#pragma warning restore CS0618 + } + } +} -- cgit v1.2.3