Libation 4.0 prep: account management complete

This commit is contained in:
Robert McRackan 2020-08-25 14:21:14 -04:00
parent 4b31207f91
commit 6979ab4450
7 changed files with 198 additions and 136 deletions

View file

@ -51,37 +51,17 @@ namespace InternalUtilities
public IReadOnlyList<Account> Accounts => _accounts_json.AsReadOnly();
#endregion
#region de/serialize
public static AccountsSettings FromJson(string json)
=> JsonConvert.DeserializeObject<AccountsSettings>(json, Identity.GetJsonSerializerSettings());
public string ToJson(Formatting formatting = Formatting.Indented)
=> JsonConvert.SerializeObject(this, formatting, Identity.GetJsonSerializerSettings());
public void Add(Account account)
{
_add(account);
update_no_validate();
}
public void _add(Account account)
{
validate(account);
_accounts_backing.Add(account);
account.Updated += update;
}
#endregion
// more common naming convention alias for internal collection
public IReadOnlyList<Account> GetAll() => Accounts;
public Account GetAccount(string accountId, string locale)
{
if (locale is null)
return null;
return Accounts.SingleOrDefault(a => a.AccountId == accountId && a.IdentityTokens.Locale.Name == locale);
}
public Account Upsert(string accountId, string locale)
{
var acct = GetAccount(accountId, locale);
@ -97,13 +77,26 @@ namespace InternalUtilities
return account;
}
public bool Delete(Account account)
public void Add(Account account)
{
if (!_accounts_backing.Contains(account))
return false;
_add(account);
update_no_validate();
}
account.Updated -= update;
return _accounts_backing.Remove(account);
public void _add(Account account)
{
validate(account);
_accounts_backing.Add(account);
account.Updated += update;
}
public Account GetAccount(string accountId, string locale)
{
if (locale is null)
return null;
return Accounts.SingleOrDefault(a => a.AccountId == accountId && a.IdentityTokens.Locale.Name == locale);
}
public bool Delete(string accountId, string locale)
@ -114,6 +107,15 @@ namespace InternalUtilities
return Delete(acct);
}
public bool Delete(Account account)
{
if (!_accounts_backing.Contains(account))
return false;
account.Updated -= update;
return _accounts_backing.Remove(account);
}
private void validate(Account account)
{
ArgumentValidator.EnsureNotNull(account, nameof(account));

View file

@ -26,8 +26,8 @@ namespace InternalUtilities
public static Account TEST_GetFirstAccount()
=> GetPersistentAccountsSettings().GetAll().FirstOrDefault();
public static AccountsSettings GetPersistentAccountsSettings()
=> new AccountsSettingsPersister(AccountsSettingsFile).AccountsSettings;
public static AccountsSettings GetPersistentAccountsSettings() => GetAccountsSettingsPersister().AccountsSettings;
public static AccountsSettingsPersister GetAccountsSettingsPersister() => new AccountsSettingsPersister(AccountsSettingsFile);
public static string GetIdentityTokensJsonPath(this Account account)
=> GetIdentityTokensJsonPath(account.AccountId, account.Locale?.Name);