voidkitty/VoidCat/Services/Migrations/FileStoreV2.cs

49 lines
1.4 KiB
C#
Raw Normal View History

2023-08-24 09:51:07 +00:00
using VoidCat.Model;
namespace VoidCat.Services.Migrations;
public class FileStoreV2 : IMigration
{
private readonly VoidSettings _settings;
2023-11-02 16:23:31 +00:00
2023-08-24 09:51:07 +00:00
public FileStoreV2(VoidSettings settings)
{
_settings = settings;
}
2023-11-02 16:23:31 +00:00
2023-08-24 09:51:07 +00:00
public int Order => 2;
public ValueTask<IMigration.MigrationResult> Migrate(string[] args)
{
var baseDir = Path.Join(_settings.DataDirectory, "files-v1");
2023-11-02 16:23:31 +00:00
if (!Directory.Exists(baseDir))
{
return ValueTask.FromResult(IMigration.MigrationResult.Skipped);
}
2023-08-24 09:51:07 +00:00
foreach (var path in Directory.EnumerateFiles(baseDir))
{
if (!Guid.TryParse(Path.GetFileNameWithoutExtension(path), out var id))
{
continue;
}
var dest = MapPathV2(id);
var destDir = Path.GetDirectoryName(dest)!;
if (!Directory.Exists(destDir))
{
Directory.CreateDirectory(destDir);
}
2023-11-02 16:23:31 +00:00
2023-08-24 09:51:07 +00:00
File.Move(MapPathV1(id), dest);
}
return ValueTask.FromResult(IMigration.MigrationResult.Completed);
}
2023-11-02 16:23:31 +00:00
2023-08-24 09:51:07 +00:00
private string MapPathV1(Guid id) =>
Path.Join(_settings.DataDirectory, "files-v1", id.ToString());
2023-11-02 16:23:31 +00:00
2023-08-24 09:51:07 +00:00
private string MapPathV2(Guid id) =>
Path.Join(_settings.DataDirectory, "files-v2", id.ToString()[..2], id.ToString()[2..4], id.ToString());
}