Fix startup when not using redis

This commit is contained in:
Kieran 2022-05-19 23:27:49 +01:00
parent 9112f77018
commit ef5b00b16b
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
6 changed files with 21 additions and 25 deletions

View File

@ -128,7 +128,6 @@ services.AddAuthorization((opt) =>
// void.cat services // void.cat services
// //
services.AddTransient<RazorPartialToStringRenderer>(); services.AddTransient<RazorPartialToStringRenderer>();
services.AddVoidMigrations();
// file storage // file storage
services.AddStorage(voidSettings); services.AddStorage(voidSettings);
@ -160,6 +159,9 @@ if (useRedis)
services.AddTransient<RedisStatsController>(); services.AddTransient<RedisStatsController>();
services.AddTransient<IStatsCollector>(svc => svc.GetRequiredService<RedisStatsController>()); services.AddTransient<IStatsCollector>(svc => svc.GetRequiredService<RedisStatsController>());
services.AddTransient<IStatsReporter>(svc => svc.GetRequiredService<RedisStatsController>()); services.AddTransient<IStatsReporter>(svc => svc.GetRequiredService<RedisStatsController>());
// redis specific migrations
services.AddTransient<IMigration, UserLookupKeyHashMigration>();
} }
else else
{ {

View File

@ -16,7 +16,7 @@ public class InMemoryCache : ICache
{ {
return ValueTask.FromResult(_cache.Get<T?>(key)); return ValueTask.FromResult(_cache.Get<T?>(key));
} }
public ValueTask Set<T>(string key, T value, TimeSpan? expire = null) public ValueTask Set<T>(string key, T value, TimeSpan? expire = null)
{ {
if (expire.HasValue) if (expire.HasValue)
@ -30,12 +30,12 @@ public class InMemoryCache : ICache
return ValueTask.CompletedTask; return ValueTask.CompletedTask;
} }
public ValueTask<string[]> GetList(string key) public ValueTask<string[]> GetList(string key)
{ {
return ValueTask.FromResult(_cache.Get<string[]>(key)); return ValueTask.FromResult(_cache.Get<string[]>(key) ?? Array.Empty<string>());
} }
public ValueTask AddToList(string key, string value) public ValueTask AddToList(string key, string value)
{ {
var list = new HashSet<string>(GetList(key).Result); var list = new HashSet<string>(GetList(key).Result);
@ -55,6 +55,7 @@ public class InMemoryCache : ICache
public ValueTask Delete(string key) public ValueTask Delete(string key)
{ {
_cache.Remove(key); _cache.Remove(key);
return ValueTask.CompletedTask;; return ValueTask.CompletedTask;
;
} }
} }

View File

@ -3,12 +3,4 @@
public interface IMigration public interface IMigration
{ {
ValueTask Migrate(); ValueTask Migrate();
}
public static class Migrations
{
public static void AddVoidMigrations(this IServiceCollection svc)
{
svc.AddTransient<IMigration, UserLookupKeyHashMigration>();
}
} }

View File

@ -13,7 +13,7 @@ public abstract class MetadataMigrator<TOld, TNew> : IMigration
_settings = settings; _settings = settings;
_logger = logger; _logger = logger;
} }
public async ValueTask Migrate() public async ValueTask Migrate()
{ {
var newMeta = Path.Combine(_settings.DataDirectory, OldPath); var newMeta = Path.Combine(_settings.DataDirectory, OldPath);
@ -21,7 +21,7 @@ public abstract class MetadataMigrator<TOld, TNew> : IMigration
{ {
Directory.CreateDirectory(newMeta); Directory.CreateDirectory(newMeta);
} }
foreach (var fe in Directory.EnumerateFiles(_settings.DataDirectory)) foreach (var fe in Directory.EnumerateFiles(_settings.DataDirectory))
{ {
var filename = Path.GetFileNameWithoutExtension(fe); var filename = Path.GetFileNameWithoutExtension(fe);
@ -35,13 +35,13 @@ public abstract class MetadataMigrator<TOld, TNew> : IMigration
{ {
var oldJson = await File.ReadAllTextAsync(fp); var oldJson = await File.ReadAllTextAsync(fp);
if (!ShouldMigrate(oldJson)) continue; if (!ShouldMigrate(oldJson)) continue;
var old = JsonConvert.DeserializeObject<TOld>(oldJson); var old = JsonConvert.DeserializeObject<TOld>(oldJson);
if(old == null) continue; if (old == null) continue;
var newObj = MigrateModel(old); var newObj = MigrateModel(old);
await File.WriteAllTextAsync(MapNewMeta(id), JsonConvert.SerializeObject(newObj)); await File.WriteAllTextAsync(MapNewMeta(id), JsonConvert.SerializeObject(newObj));
// delete old metadata // delete old metadata
File.Delete(fp); File.Delete(fp);
} }
@ -58,9 +58,10 @@ public abstract class MetadataMigrator<TOld, TNew> : IMigration
protected abstract bool ShouldMigrate(string json); protected abstract bool ShouldMigrate(string json);
protected abstract TNew MigrateModel(TOld old); protected abstract TNew MigrateModel(TOld old);
private string MapOldMeta(Guid id) => private string MapOldMeta(Guid id) =>
Path.ChangeExtension(Path.Join(_settings.DataDirectory, OldPath, id.ToString()), ".json"); Path.ChangeExtension(Path.Join(_settings.DataDirectory, OldPath, id.ToString()), ".json");
private string MapNewMeta(Guid id) => private string MapNewMeta(Guid id) =>
Path.ChangeExtension(Path.Join(_settings.DataDirectory, NewPath, id.ToString()), ".json"); Path.ChangeExtension(Path.Join(_settings.DataDirectory, NewPath, id.ToString()), ".json");
} }

View File

@ -12,7 +12,7 @@ public class UserLookupKeyHashMigration : IMigration
{ {
_database = database; _database = database;
} }
public async ValueTask Migrate() public async ValueTask Migrate()
{ {
var users = await _database.SetMembersAsync("users"); var users = await _database.SetMembersAsync("users");
@ -41,4 +41,4 @@ public class UserLookupKeyHashMigration : IMigration
public string Email { get; init; } public string Email { get; init; }
} }
} }

View File

@ -88,7 +88,7 @@ public class UserStore : IUserStore
//retain flags //retain flags
var isEmailVerified = oldUser.Flags.HasFlag(VoidUserFlags.EmailVerified); var isEmailVerified = oldUser.Flags.HasFlag(VoidUserFlags.EmailVerified);
// update only a few props // update only a few props
oldUser.Avatar = newUser.Avatar; oldUser.Avatar = newUser.Avatar;
oldUser.Flags = newUser.Flags | (isEmailVerified ? VoidUserFlags.EmailVerified : 0); oldUser.Flags = newUser.Flags | (isEmailVerified ? VoidUserFlags.EmailVerified : 0);