From 1aec1eb3f0822e17793d43e040efdf127ea8e561 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 12 Feb 2021 22:10:56 +0800 Subject: feat: Add databse custom migration service. --- .../TimelinePostContentToDataMigration.cs | 69 ++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 BackEnd/Timeline/Services/Migration/TimelinePostContentToDataMigration.cs (limited to 'BackEnd/Timeline/Services/Migration/TimelinePostContentToDataMigration.cs') diff --git a/BackEnd/Timeline/Services/Migration/TimelinePostContentToDataMigration.cs b/BackEnd/Timeline/Services/Migration/TimelinePostContentToDataMigration.cs new file mode 100644 index 00000000..de2e2183 --- /dev/null +++ b/BackEnd/Timeline/Services/Migration/TimelinePostContentToDataMigration.cs @@ -0,0 +1,69 @@ +using System.Text; +using System.Threading.Tasks; +using Microsoft.EntityFrameworkCore; +using SixLabors.ImageSharp; +using Timeline.Entities; +using Timeline.Models; + +namespace Timeline.Services.Migration +{ + public class TimelinePostContentToDataMigration : ICustomMigration + { + private readonly IDataManager _dataManager; + + public TimelinePostContentToDataMigration(IDataManager dataManager) + { + _dataManager = dataManager; + } + + public string GetName() => "TimelinePostContentToData"; + + public async Task Execute(DatabaseContext database) + { +#pragma warning disable CS0618 + var postEntities = await database.TimelinePosts.ToListAsync(); + + 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), false); + 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(); +#pragma warning restore CS0618 + } + } +} -- cgit v1.2.3