completely rework IDataProvider
- make it more dynamic - prevent incremental method count increase
This commit is contained in:
@@ -6,6 +6,6 @@ public interface ICharacterManager
|
|||||||
Character? CreateCharacter(string? name);
|
Character? CreateCharacter(string? name);
|
||||||
Character? CreateCharacter(string? name, Group? destination);
|
Character? CreateCharacter(string? name, Group? destination);
|
||||||
bool DeleteCharacter(Character? character);
|
bool DeleteCharacter(Character? character);
|
||||||
IEnumerable<Character>? GetCharacters(Group? group);
|
IQueryable<Character>? GetCharacters(Group? group);
|
||||||
IEnumerable<Character>? GetCharacters(UserProfile? profile);
|
IQueryable<Character>? GetCharacters(UserProfile? profile);
|
||||||
}
|
}
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
using OwnChar.Data;
|
|
||||||
using OwnChar.Model;
|
|
||||||
|
|
||||||
namespace OwnChar.Api;
|
|
||||||
|
|
||||||
public interface IDataManager
|
|
||||||
{
|
|
||||||
public delegate void OnActionEventHandler(object sender, OnActionEventArgs e);
|
|
||||||
public delegate void OnCallbackEventHandler(object sender, OnCallbackEventArgs e);
|
|
||||||
|
|
||||||
event OnActionEventHandler? OnAction;
|
|
||||||
event OnCallbackEventHandler? OnCallback;
|
|
||||||
// Login
|
|
||||||
UserAccount? Login(string username, string password);
|
|
||||||
bool Logout(UserAccount? account);
|
|
||||||
|
|
||||||
// Action
|
|
||||||
DataManagerActionResult ExecuteAction(DataManagerAction action, DataManagerActionType actionType, UserAccount currentUser, object? obj, params object?[] parameters);
|
|
||||||
|
|
||||||
//// User management
|
|
||||||
//UserProfile? GetUserProfile(UserAccount account);
|
|
||||||
|
|
||||||
//// Group management
|
|
||||||
//UserProfile? GetOwner(UserAccount account, Group group);
|
|
||||||
//IEnumerable<UserProfile>? GetMembers(UserAccount account, Group group);
|
|
||||||
//bool AddMember(UserAccount account, Group group, UserProfile user);
|
|
||||||
//bool RemoveMember(UserAccount account, Group group, UserProfile user);
|
|
||||||
|
|
||||||
//// Character management
|
|
||||||
//UserProfile? GetOwner(UserAccount account, Character group);
|
|
||||||
//IEnumerable<Character>? GetCharacters(UserAccount account, Group group);
|
|
||||||
//IEnumerable<Character>? GetCharacters(UserAccount account, UserProfile profile);
|
|
||||||
}
|
|
||||||
@@ -1,38 +0,0 @@
|
|||||||
using OwnChar.Model;
|
|
||||||
|
|
||||||
namespace OwnChar.Api;
|
|
||||||
|
|
||||||
public interface IDataProvider
|
|
||||||
{
|
|
||||||
bool IsInitialized();
|
|
||||||
void SetInitialized();
|
|
||||||
bool SaveDatabase();
|
|
||||||
|
|
||||||
// Model
|
|
||||||
abstract T? Create<T>() where T : OwnCharObject;
|
|
||||||
abstract bool Save<T>(T obj) where T : OwnCharObject;
|
|
||||||
abstract bool Delete<T>(T obj) where T : OwnCharObject;
|
|
||||||
virtual IEnumerable<T>? Get<T>() where T : OwnCharObject => Get<T>(null);
|
|
||||||
abstract IEnumerable<T>? Get<T>(OwnCharObject? context) where T : OwnCharObject;
|
|
||||||
|
|
||||||
// Hierarchy
|
|
||||||
abstract bool SetParent(UserProfile profile, UserAccount parent);
|
|
||||||
abstract bool SetParent(Character character, Group parent);
|
|
||||||
abstract bool SetParent(Property property, Character character);
|
|
||||||
abstract bool SetOwner(Group group, UserProfile owner);
|
|
||||||
abstract bool SetOwner(Character group, UserProfile owner);
|
|
||||||
abstract UserProfile? GetOwner(Group group);
|
|
||||||
abstract UserProfile? GetOwner(Character character);
|
|
||||||
|
|
||||||
// Collections
|
|
||||||
abstract bool AddMember(Group group, UserProfile user);
|
|
||||||
abstract bool RemoveMember(Group group, UserProfile user);
|
|
||||||
|
|
||||||
// Gets
|
|
||||||
abstract UserAccount? GetUserAccount(string username, string password);
|
|
||||||
abstract UserProfile? GetUserProfile(string username);
|
|
||||||
abstract IEnumerable<UserAccount>? GetUserAccounts();
|
|
||||||
abstract IEnumerable<UserProfile>? GetMembers(Group group);
|
|
||||||
abstract IEnumerable<Character>? GetCharacters(Group group);
|
|
||||||
abstract IEnumerable<Character>? GetCharacters(UserProfile jprofile);
|
|
||||||
}
|
|
||||||
@@ -3,10 +3,12 @@
|
|||||||
namespace OwnChar.Api;
|
namespace OwnChar.Api;
|
||||||
public interface IGroupsManager
|
public interface IGroupsManager
|
||||||
{
|
{
|
||||||
|
IQueryable<Group>? GetGroups(UserProfile? profile);
|
||||||
|
IQueryable<Group>? GetGroups();
|
||||||
bool AddMember(UserProfile? profile, Group? group);
|
bool AddMember(UserProfile? profile, Group? group);
|
||||||
Group? CreateGroup(string? name);
|
Group? CreateGroup(string? name);
|
||||||
bool DeleteGroup(Group? group);
|
bool DeleteGroup(Group? group);
|
||||||
bool DeleteMember(UserProfile? profile, Group? group);
|
bool RemoveMember(UserProfile? profile, Group? group);
|
||||||
IEnumerable<UserProfile>? GetMembers(Group? group);
|
IQueryable<UserProfile>? GetMembers(Group? group);
|
||||||
UserProfile? GetOwner(Group? group);
|
UserProfile? GetOwner(Group? group);
|
||||||
}
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using OwnChar.Model;
|
using OwnChar.Data;
|
||||||
|
using OwnChar.Model;
|
||||||
using Pilz.Cryptography;
|
using Pilz.Cryptography;
|
||||||
|
|
||||||
namespace OwnChar.Api;
|
namespace OwnChar.Api;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ using Pilz.Cryptography;
|
|||||||
namespace OwnChar.Api;
|
namespace OwnChar.Api;
|
||||||
public interface IUserManager
|
public interface IUserManager
|
||||||
{
|
{
|
||||||
|
IQueryable<UserAccount>? GetUserAccounts();
|
||||||
UserAccount? CreateUserAccount(string? username, SecureString? password);
|
UserAccount? CreateUserAccount(string? username, SecureString? password);
|
||||||
bool DeleteUserAccount(UserAccount? account);
|
bool DeleteUserAccount(UserAccount? account);
|
||||||
UserProfile? GetOwnUserProfile();
|
UserProfile? GetOwnUserProfile();
|
||||||
|
|||||||
@@ -12,12 +12,14 @@ public static class DataManagerActions
|
|||||||
public static DataManagerAction UserAccount { get; } = new(Get, "useraccount");
|
public static DataManagerAction UserAccount { get; } = new(Get, "useraccount");
|
||||||
public static DataManagerAction Group { get; } = new(Get, "group");
|
public static DataManagerAction Group { get; } = new(Get, "group");
|
||||||
public static DataManagerAction Character { get; } = new(Get, "character");
|
public static DataManagerAction Character { get; } = new(Get, "character");
|
||||||
|
public static DataManagerAction Property { get; } = new(Get, "property");
|
||||||
|
public static DataManagerAction PropertyCategory { get; } = new(Get, "propertycategory");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Association
|
public static class Association
|
||||||
{
|
{
|
||||||
public static DataManagerAction Owner { get; } = new(Associate, "owner");
|
public static DataManagerAction Owner { get; } = new(Associate, "owner");
|
||||||
public static DataManagerAction Parent { get; } = new(Associate, "parent");
|
public static DataManagerAction Profile { get; } = new(Associate, "profile");
|
||||||
public static DataManagerAction Members { get; } = new(Associate, "members");
|
public static DataManagerAction Members { get; } = new(Associate, "members");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
7
OwnChar/Data/DataProviderSetAction.cs
Normal file
7
OwnChar/Data/DataProviderSetAction.cs
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
namespace OwnChar.Data;
|
||||||
|
|
||||||
|
public enum DataProviderSetAction
|
||||||
|
{
|
||||||
|
Set,
|
||||||
|
Remove,
|
||||||
|
}
|
||||||
12
OwnChar/Data/HierarchyProperties.cs
Normal file
12
OwnChar/Data/HierarchyProperties.cs
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
namespace OwnChar.Data;
|
||||||
|
|
||||||
|
public static class HierarchyProperties
|
||||||
|
{
|
||||||
|
public static string PropProps => "Props";
|
||||||
|
public static string PropPropCats => "PropCats";
|
||||||
|
public static string PropCharacters => "Characters";
|
||||||
|
public static string PropProfile => "Profile";
|
||||||
|
public static string PropOwner => "Owner";
|
||||||
|
public static string PropMembers => "Members";
|
||||||
|
public static string PropGroups => "Groups";
|
||||||
|
}
|
||||||
19
OwnChar/Data/IDataManager.cs
Normal file
19
OwnChar/Data/IDataManager.cs
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
using OwnChar.Model;
|
||||||
|
|
||||||
|
namespace OwnChar.Data;
|
||||||
|
|
||||||
|
public interface IDataManager
|
||||||
|
{
|
||||||
|
public delegate void OnActionEventHandler(object sender, OnActionEventArgs e);
|
||||||
|
public delegate void OnCallbackEventHandler(object sender, OnCallbackEventArgs e);
|
||||||
|
|
||||||
|
event OnActionEventHandler? OnAction;
|
||||||
|
event OnCallbackEventHandler? OnCallback;
|
||||||
|
|
||||||
|
// Login
|
||||||
|
UserAccount? Login(string username, string password);
|
||||||
|
bool Logout(UserAccount? account);
|
||||||
|
|
||||||
|
// Action
|
||||||
|
DataManagerActionResult ExecuteAction(DataManagerAction action, DataManagerActionType actionType, UserAccount currentUser, object? obj, params object?[] parameters);
|
||||||
|
}
|
||||||
26
OwnChar/Data/IDataProvider.cs
Normal file
26
OwnChar/Data/IDataProvider.cs
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
using OwnChar.Model;
|
||||||
|
|
||||||
|
namespace OwnChar.Data;
|
||||||
|
|
||||||
|
public interface IDataProvider
|
||||||
|
{
|
||||||
|
bool IsInitialized();
|
||||||
|
void SetInitialized();
|
||||||
|
bool SaveDatabase();
|
||||||
|
|
||||||
|
// Model
|
||||||
|
T? Create<T>() where T : OwnCharObject;
|
||||||
|
bool Save<T>(T obj) where T : OwnCharObject;
|
||||||
|
bool Delete<T>(T obj) where T : OwnCharObject;
|
||||||
|
IQueryable<T>? GetAll<T>() where T : OwnCharObject;
|
||||||
|
|
||||||
|
// Hierarchy
|
||||||
|
bool SetChild(OwnCharObject parent, OwnCharObject? child, string property, DataProviderSetAction action);
|
||||||
|
T? GetChild<T>(OwnCharObject parent, string property) where T : OwnCharObject;
|
||||||
|
IQueryable<T>? GetChilds<T>(OwnCharObject parent, string property) where T : OwnCharObject;
|
||||||
|
T? GetParent<T>(OwnCharObject child, string property) where T : OwnCharObject;
|
||||||
|
|
||||||
|
// Explicite getters
|
||||||
|
UserAccount? GetUserAccount(string username, string password);
|
||||||
|
UserProfile? GetUserProfile(string username);
|
||||||
|
}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
using OwnChar.Api;
|
using OwnChar.Manager.Modules;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
|
|
||||||
namespace OwnChar.Data.Managers;
|
namespace OwnChar.Data.Managers;
|
||||||
@@ -50,14 +50,21 @@ public class DefaultDataManager : IDataManager
|
|||||||
// Get
|
// Get
|
||||||
if (e.Is(DataManagerActionType.Get))
|
if (e.Is(DataManagerActionType.Get))
|
||||||
{
|
{
|
||||||
if (e.Is(UserType.User) && e.GetObject(out Group? group))
|
if (e.Is(UserType.User))
|
||||||
return e.SetResult(DataProvider.GetCharacters(group));
|
{
|
||||||
|
if (e.GetObject(out Group? group))
|
||||||
|
return e.SetResult(DataProvider.GetChilds<Character>(group, HierarchyProperties.PropCharacters));
|
||||||
|
if (e.GetObject(out UserProfile? profile))
|
||||||
|
return e.SetResult(DataProvider.GetChilds<Character>(profile, HierarchyProperties.PropCharacters));
|
||||||
|
}
|
||||||
|
if (e.Is(UserType.Admin))
|
||||||
|
return e.SetResult(DataProvider.GetAll<Character>());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
else if (e.Is(DataManagerActionType.Set))
|
else if (e.Is(DataManagerActionType.Set))
|
||||||
{
|
{
|
||||||
if (e.Object is Group group && e.GetParam(0, out string? name))
|
if (e.GetObject(out Group? group) && e.GetParam(0, out string? name))
|
||||||
return e.SetResult(CreateCharacter(e.CurrentUser, name, group));
|
return e.SetResult(CreateCharacter(e.CurrentUser, name, group));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -68,8 +75,13 @@ public class DefaultDataManager : IDataManager
|
|||||||
// Get
|
// Get
|
||||||
if (e.Is(DataManagerActionType.Get))
|
if (e.Is(DataManagerActionType.Get))
|
||||||
{
|
{
|
||||||
if (e.Object is UserProfile profile)
|
if (e.Is(UserType.User))
|
||||||
return e.SetResult(DataProvider.GetGroups(profile));
|
{
|
||||||
|
if (e.GetObject(out UserProfile? profile))
|
||||||
|
return e.SetResult(DataProvider.GetChilds<Group>(profile, HierarchyProperties.PropGroups));
|
||||||
|
}
|
||||||
|
if (e.Is(UserType.Admin))
|
||||||
|
return e.SetResult(DataProvider.GetAll<Group>());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
@@ -87,7 +99,7 @@ public class DefaultDataManager : IDataManager
|
|||||||
if (e.Is(DataManagerActionType.Get))
|
if (e.Is(DataManagerActionType.Get))
|
||||||
{
|
{
|
||||||
if (e.Is(UserType.Admin))
|
if (e.Is(UserType.Admin))
|
||||||
return e.SetResult(DataProvider.GetUserAccounts());
|
return e.SetResult(DataProvider.GetAll<UserAccount>());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
@@ -96,12 +108,44 @@ public class DefaultDataManager : IDataManager
|
|||||||
if (e.GetParam(0, out string? username) && e.GetParam(1, out string? password))
|
if (e.GetParam(0, out string? username) && e.GetParam(1, out string? password))
|
||||||
return e.SetResult(CreateUserAccount(username, password));
|
return e.SetResult(CreateUserAccount(username, password));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Property
|
||||||
|
else if (e.Is(DataManagerActions.Getter.Property))
|
||||||
|
{
|
||||||
|
// Get
|
||||||
|
if (e.Is(DataManagerActionType.Get))
|
||||||
|
{
|
||||||
|
if (e.Is(UserType.User) && e.GetObject(out Character? character))
|
||||||
|
return e.SetResult(DataProvider.GetChilds<Property>(character, HierarchyProperties.PropPropCats));
|
||||||
|
}
|
||||||
|
|
||||||
// Create
|
// Create
|
||||||
//else if (e.ActionType == DataManagerActionType.Set(
|
if (e.Is(DataManagerActionType.Set))
|
||||||
// return e.SetResult(DataProvider.GetUserAccounts());
|
{
|
||||||
|
if (e.Is(UserType.User) && e.GetObject(out Character? character))
|
||||||
|
return e.SetResult(CreateProperty(e.CurrentUser, character));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//// PropertyCategory
|
||||||
|
//else if (e.Is(DataManagerActions.Getter.PropertyCategory))
|
||||||
|
//{
|
||||||
|
// // Get
|
||||||
|
// if (e.Is(DataManagerActionType.Get))
|
||||||
|
// {
|
||||||
|
// if (e.Is(UserType.User) && e.GetObject(out Character? character))
|
||||||
|
// return e.SetResult(DataProvider.GetChilds<Property>(character, HierarchyProperties.PropPropCats));
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // Create
|
||||||
|
// if (e.Is(DataManagerActionType.Set))
|
||||||
|
// {
|
||||||
|
// if (e.Is(UserType.User) && e.GetObject(out Character? character))
|
||||||
|
// return e.SetResult(CreateProperty(character));
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,6 +176,13 @@ public class DefaultDataManager : IDataManager
|
|||||||
if (e.Object is UserAccount userAccount)
|
if (e.Object is UserAccount userAccount)
|
||||||
return DeleteUserAccount(userAccount);
|
return DeleteUserAccount(userAccount);
|
||||||
|
|
||||||
|
// Property
|
||||||
|
if (e.Object is Property property)
|
||||||
|
{
|
||||||
|
if (e.GetParam(0, out Character? paramChar))
|
||||||
|
return DeleteProperty(e.CurrentUser, paramChar, property);
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,31 +191,45 @@ public class DefaultDataManager : IDataManager
|
|||||||
if (!e.Is(DataManagerActions.Associate))
|
if (!e.Is(DataManagerActions.Associate))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (e.Is(DataManagerActions.Association.Owner))
|
if (e.Is(DataManagerActions.Association.Profile))
|
||||||
{
|
{
|
||||||
if (e.Object is Group group)
|
if (e.GetObject(out UserAccount? account))
|
||||||
{
|
{
|
||||||
switch (e.ActionType)
|
if (e.Is(DataManagerActionType.Get))
|
||||||
{
|
{
|
||||||
case DataManagerActionType.Get:
|
if (e.Is(UserType.Admin) || (e.Is(UserType.User) && e.CurrentUser == account))
|
||||||
return e.SetResultT(DataProvider.GetOwner(group));
|
return e.SetResult(DataProvider.GetChild<UserProfile>(account, HierarchyProperties.PropProfile));
|
||||||
case DataManagerActionType.Set:
|
}
|
||||||
if (e.GetParam(0, out UserProfile? profile))
|
}
|
||||||
return DataProvider.SetOwner(group, profile);
|
}
|
||||||
break;
|
|
||||||
|
else if (e.Is(DataManagerActions.Association.Owner))
|
||||||
|
{
|
||||||
|
if (e.GetObject(out Group? group))
|
||||||
|
{
|
||||||
|
if (e.Is(DataManagerActionType.Get))
|
||||||
|
{
|
||||||
|
if (e.Is(UserType.User))
|
||||||
|
return e.SetResultT(DataProvider.GetChild<UserProfile>(group, HierarchyProperties.PropOwner));
|
||||||
|
}
|
||||||
|
else if (e.Is(DataManagerActionType.Set))
|
||||||
|
{
|
||||||
|
if (e.Is(UserType.User) && e.GetParam(0, out UserProfile? profile))
|
||||||
|
return DataProvider.SetChild(group, profile, HierarchyProperties.PropOwner, DataProviderSetAction.Set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (e.Object is Character character)
|
if (e.GetObject(out Character? character))
|
||||||
{
|
{
|
||||||
switch (e.ActionType)
|
if (e.Is(DataManagerActionType.Get))
|
||||||
{
|
{
|
||||||
case DataManagerActionType.Get:
|
if (e.Is(UserType.User))
|
||||||
return e.SetResultT(DataProvider.GetOwner(character));
|
return e.SetResultT(DataProvider.GetChild<UserProfile>(character, HierarchyProperties.PropOwner));
|
||||||
case DataManagerActionType.Set:
|
}
|
||||||
if (e.GetParam(0, out UserProfile? profile))
|
else if (e.Is(DataManagerActionType.Set))
|
||||||
return DataProvider.SetOwner(character, profile);
|
{
|
||||||
break;
|
if (e.Is(UserType.User) && e.GetParam(0, out UserProfile? profile))
|
||||||
|
return DataProvider.SetChild(character, profile, HierarchyProperties.PropOwner, DataProviderSetAction.Set);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -176,21 +241,21 @@ public class DefaultDataManager : IDataManager
|
|||||||
{
|
{
|
||||||
if (!account.HasPermission(UserType.Guest))
|
if (!account.HasPermission(UserType.Guest))
|
||||||
return null;
|
return null;
|
||||||
return DataProvider.GetMembers(group);
|
return DataProvider.GetChilds<UserProfile>(group, HierarchyProperties.PropMembers);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserProfile? GetOwner(UserAccount account, Group group)
|
public UserProfile? GetOwner(UserAccount account, Group group)
|
||||||
{
|
{
|
||||||
if (!account.HasPermission(UserType.Guest))
|
if (!account.HasPermission(UserType.Guest))
|
||||||
return null;
|
return null;
|
||||||
return DataProvider.GetOwner(group);
|
return DataProvider.GetChild<UserProfile>(group, HierarchyProperties.PropOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserProfile? GetOwner(UserAccount account, Character character)
|
public UserProfile? GetOwner(UserAccount account, Character character)
|
||||||
{
|
{
|
||||||
if (!account.HasPermission(UserType.Guest))
|
if (!account.HasPermission(UserType.Guest))
|
||||||
return null;
|
return null;
|
||||||
return DataProvider.GetOwner(character);
|
return DataProvider.GetChild<UserProfile>(character, HierarchyProperties.PropOwner);
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserProfile? GetUserProfile(UserAccount account)
|
public UserProfile? GetUserProfile(UserAccount account)
|
||||||
@@ -224,6 +289,28 @@ public class DefaultDataManager : IDataManager
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual Property? CreateProperty(UserAccount account, Character character)
|
||||||
|
{
|
||||||
|
ArgumentNullException.ThrowIfNull(character, nameof(character));
|
||||||
|
|
||||||
|
if (!account.HasPermission(UserType.User))
|
||||||
|
return null;
|
||||||
|
|
||||||
|
var prop = DataProvider.Create<Property>();
|
||||||
|
ArgumentNullException.ThrowIfNull(prop, nameof(prop));
|
||||||
|
|
||||||
|
DataProvider.SetChild(character, prop, HierarchyProperties.PropProps, DataProviderSetAction.Set);
|
||||||
|
|
||||||
|
return prop;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual bool DeleteProperty(UserAccount account, Character character, Property property)
|
||||||
|
{
|
||||||
|
if (GetUserProfile(account) is not UserProfile profile || DataProvider.GetChild<UserProfile>(character, HierarchyProperties.PropOwner) is not UserProfile owner || !account.HasPermission(profile == owner ? UserType.User : UserType.Admin))
|
||||||
|
return false;
|
||||||
|
return DataProvider.Delete(property);
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual UserAccount? CreateUserAccount(string username, string password)
|
protected virtual UserAccount? CreateUserAccount(string username, string password)
|
||||||
{
|
{
|
||||||
var account = DataProvider.Create<UserAccount>();
|
var account = DataProvider.Create<UserAccount>();
|
||||||
@@ -238,10 +325,10 @@ public class DefaultDataManager : IDataManager
|
|||||||
account.Password = password;
|
account.Password = password;
|
||||||
|
|
||||||
profile.Name = username;
|
profile.Name = username;
|
||||||
DataProvider.SetParent(profile, account);
|
DataProvider.SetChild(account, profile, HierarchyProperties.PropProfile, DataProviderSetAction.Set);
|
||||||
|
|
||||||
group.IsInternal = true;
|
group.IsInternal = true;
|
||||||
DataProvider.SetOwner(group, profile);
|
DataProvider.SetChild(group, profile, HierarchyProperties.PropOwner, DataProviderSetAction.Set);
|
||||||
|
|
||||||
DataProvider.Save(account);
|
DataProvider.Save(account);
|
||||||
DataProvider.Save(profile);
|
DataProvider.Save(profile);
|
||||||
@@ -258,34 +345,6 @@ public class DefaultDataManager : IDataManager
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<Character>? GetCharacters(UserAccount account, Group group)
|
|
||||||
{
|
|
||||||
if (!account.HasPermission(UserType.Guest))
|
|
||||||
return null;
|
|
||||||
return DataProvider.GetCharacters(group);
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<Character>? GetCharacters(UserAccount account, UserProfile profile)
|
|
||||||
{
|
|
||||||
if (!account.HasPermission(UserType.Guest))
|
|
||||||
return null;
|
|
||||||
return DataProvider.GetCharacters(profile);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool AddMember(UserAccount account, Group group, UserProfile user)
|
|
||||||
{
|
|
||||||
if (GetUserProfile(account) is not UserProfile profile || DataProvider.GetOwner(group) is not UserProfile owner || !account.HasPermission(profile == owner ? UserType.User : UserType.Admin))
|
|
||||||
return false;
|
|
||||||
return DataProvider.AddMember(group, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool RemoveMember(UserAccount account, Group group, UserProfile user)
|
|
||||||
{
|
|
||||||
if (GetUserProfile(account) is not UserProfile profile || DataProvider.GetOwner(group) is not UserProfile owner || !account.HasPermission(profile == owner ? UserType.User : UserType.Admin))
|
|
||||||
return false;
|
|
||||||
return DataProvider.RemoveMember(group, user);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected virtual Group? CreateGroup(UserAccount account, string name)
|
protected virtual Group? CreateGroup(UserAccount account, string name)
|
||||||
{
|
{
|
||||||
if (!account.HasPermission(UserType.User) || GetUserProfile(account) is not UserProfile profile || DataProvider.Create<Group>() is not Group group)
|
if (!account.HasPermission(UserType.User) || GetUserProfile(account) is not UserProfile profile || DataProvider.Create<Group>() is not Group group)
|
||||||
@@ -295,14 +354,14 @@ public class DefaultDataManager : IDataManager
|
|||||||
|
|
||||||
DataProvider.Save(group);
|
DataProvider.Save(group);
|
||||||
|
|
||||||
DataProvider.SetOwner(group, profile);
|
DataProvider.SetChild(group, profile, HierarchyProperties.PropOwner, DataProviderSetAction.Set);
|
||||||
|
|
||||||
return group;
|
return group;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool DeleteGroup(UserAccount account, Group group)
|
protected virtual bool DeleteGroup(UserAccount account, Group group)
|
||||||
{
|
{
|
||||||
if (GetUserProfile(account) is not UserProfile profile || DataProvider.GetOwner(group) is not UserProfile owner || !account.HasPermission(profile == owner ? UserType.User : UserType.Admin))
|
if (GetUserProfile(account) is not UserProfile profile || DataProvider.GetChild<UserProfile>(group, HierarchyProperties.PropOwner) is not UserProfile owner || !account.HasPermission(profile == owner ? UserType.User : UserType.Admin))
|
||||||
return false;
|
return false;
|
||||||
return DataProvider.Delete(group);
|
return DataProvider.Delete(group);
|
||||||
}
|
}
|
||||||
@@ -316,21 +375,18 @@ public class DefaultDataManager : IDataManager
|
|||||||
|
|
||||||
DataProvider.Save(character);
|
DataProvider.Save(character);
|
||||||
|
|
||||||
DataProvider.SetOwner(character, profile);
|
DataProvider.SetChild(character, profile, HierarchyProperties.PropOwner, DataProviderSetAction.Set);
|
||||||
|
|
||||||
if (group != null)
|
if (group != null)
|
||||||
DataProvider.SetParent(character, group);
|
DataProvider.SetChild(group, character, HierarchyProperties.PropCharacters, DataProviderSetAction.Set);
|
||||||
|
|
||||||
return character;
|
return character;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected virtual bool DeleteCharacter(UserAccount account, Character character)
|
protected virtual bool DeleteCharacter(UserAccount account, Character character)
|
||||||
{
|
{
|
||||||
if (GetUserProfile(account) is not UserProfile profile || DataProvider.GetOwner(character) is not UserProfile owner || !account.HasPermission(profile == owner ? UserType.User : UserType.Admin))
|
if (GetUserProfile(account) is not UserProfile profile || DataProvider.GetChild<UserProfile>(character, HierarchyProperties.PropOwner) is not UserProfile owner || !account.HasPermission(profile == owner ? UserType.User : UserType.Admin))
|
||||||
return false;
|
return false;
|
||||||
|
return DataProvider.Delete(character);
|
||||||
DataProvider.Delete(character);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,15 @@
|
|||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using OwnChar.Api;
|
|
||||||
using OwnChar.Data.Providers.JsonFile.Model;
|
using OwnChar.Data.Providers.JsonFile.Model;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
namespace OwnChar.Data.Providers.JsonFile;
|
namespace OwnChar.Data.Providers.JsonFile;
|
||||||
|
|
||||||
public class JsonFileDataProvider : IDataProvider
|
public class JsonFileDataProvider : IDataProvider
|
||||||
{
|
{
|
||||||
|
protected readonly Random random = new();
|
||||||
|
|
||||||
public JsonFile JsonFile { get; protected set; }
|
public JsonFile JsonFile { get; protected set; }
|
||||||
public string JsonFilePath { get; protected set; }
|
public string JsonFilePath { get; protected set; }
|
||||||
|
|
||||||
@@ -33,6 +35,11 @@ public class JsonFileDataProvider : IDataProvider
|
|||||||
File.WriteAllText(JsonFilePath, JsonConvert.SerializeObject(JsonFile, CreateJsonSerializerSettings()));
|
File.WriteAllText(JsonFilePath, JsonConvert.SerializeObject(JsonFile, CreateJsonSerializerSettings()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected int GenerateNewObjectId()
|
||||||
|
{
|
||||||
|
return random.Next();
|
||||||
|
}
|
||||||
|
|
||||||
protected virtual JsonSerializerSettings CreateJsonSerializerSettings()
|
protected virtual JsonSerializerSettings CreateJsonSerializerSettings()
|
||||||
{
|
{
|
||||||
return new JsonSerializerSettings
|
return new JsonSerializerSettings
|
||||||
@@ -54,6 +61,12 @@ public class JsonFileDataProvider : IDataProvider
|
|||||||
JsonFile.IsInitialized = true;
|
JsonFile.IsInitialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool SaveDatabase()
|
||||||
|
{
|
||||||
|
SaveFile();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
public T? Create<T>() where T : OwnCharObject
|
public T? Create<T>() where T : OwnCharObject
|
||||||
{
|
{
|
||||||
var t = typeof(T);
|
var t = typeof(T);
|
||||||
@@ -74,7 +87,13 @@ public class JsonFileDataProvider : IDataProvider
|
|||||||
else
|
else
|
||||||
obj = null;
|
obj = null;
|
||||||
|
|
||||||
return obj as T;
|
if (obj is T objT)
|
||||||
|
{
|
||||||
|
objT.Id = GenerateNewObjectId();
|
||||||
|
return objT;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Save<T>(T obj) where T : OwnCharObject
|
public bool Save<T>(T obj) where T : OwnCharObject
|
||||||
@@ -140,89 +159,261 @@ public class JsonFileDataProvider : IDataProvider
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<T>? Get<T>(OwnCharObject? context) where T : OwnCharObject
|
public IQueryable<T>? GetAll<T>(OwnCharObject? context) where T : OwnCharObject
|
||||||
{
|
{
|
||||||
var t = typeof(T);
|
var t = typeof(T);
|
||||||
|
|
||||||
static IEnumerable<T>? asList(IList list) => list as IEnumerable<T>;
|
static IQueryable<T>? asList(IEnumerable list) => list as IQueryable<T>;
|
||||||
|
|
||||||
if (t == typeof(Property))
|
if (t == typeof(Character))
|
||||||
{
|
return asList(JsonFile.Characters);
|
||||||
// ...
|
|
||||||
}
|
|
||||||
else if (t == typeof(PropertyCategory))
|
|
||||||
{
|
|
||||||
// ...
|
|
||||||
}
|
|
||||||
else if (t == typeof(Character))
|
|
||||||
{
|
|
||||||
if (context is JsonGroup group)
|
|
||||||
return (IEnumerable<T>)group.Characters;
|
|
||||||
if (context is UserProfile profile)
|
|
||||||
return (IEnumerable<T>)JsonFile.Characters.Where(n => n.Owner == profile);
|
|
||||||
return (IEnumerable<T>)JsonFile.Characters;
|
|
||||||
}
|
|
||||||
else if (t == typeof(Group))
|
else if (t == typeof(Group))
|
||||||
{
|
return asList(JsonFile.Groups);
|
||||||
if (context is UserProfile profile)
|
|
||||||
return (IEnumerable<T>)JsonFile.Groups.Where(g => g.Owner == profile);
|
|
||||||
return (IEnumerable<T>)JsonFile.Groups;
|
|
||||||
}
|
|
||||||
else if (t == typeof(UserAccount))
|
else if (t == typeof(UserAccount))
|
||||||
return (IEnumerable<T>)JsonFile.UserAccounts;
|
return asList(JsonFile.UserAccounts);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetParent(UserProfile profile, UserAccount parent)
|
public bool SetChild(OwnCharObject parent, OwnCharObject? child, string property, DataProviderSetAction action)
|
||||||
{
|
{
|
||||||
if (parent is JsonUserAccount jaccount && profile is JsonUserProfile jprofile)
|
// UserAccount
|
||||||
|
if (parent is JsonUserAccount parentAccount)
|
||||||
{
|
{
|
||||||
jaccount.Profile = jprofile;
|
// User profil
|
||||||
return true;
|
if (property == HierarchyProperties.PropProfile)
|
||||||
|
{
|
||||||
|
// Remove
|
||||||
|
if (child is null || action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentAccount.Profile = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set
|
||||||
|
else if (child is JsonUserProfile childProfile)
|
||||||
|
{
|
||||||
|
parentAccount.Profile = childProfile;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Group
|
||||||
|
if (parent is JsonGroup parentGroup)
|
||||||
|
{
|
||||||
|
// Characters
|
||||||
|
if (property == HierarchyProperties.PropCharacters)
|
||||||
|
{
|
||||||
|
// Clear
|
||||||
|
if (child is null && action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentGroup.Characters.Clear();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add/Remove
|
||||||
|
else if (child is JsonCharacter childCharacter)
|
||||||
|
{
|
||||||
|
// Remove
|
||||||
|
if (action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentGroup.Characters.Remove(childCharacter);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!parentGroup.Characters.Contains(childCharacter))
|
||||||
|
parentGroup.Characters.Add(childCharacter);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Members
|
||||||
|
// ...
|
||||||
|
|
||||||
|
// Owner
|
||||||
|
if (property == HierarchyProperties.PropOwner)
|
||||||
|
{
|
||||||
|
// Remove
|
||||||
|
if (child is null || action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentGroup.Owner = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set
|
||||||
|
else if (child is JsonUserProfile childProfile)
|
||||||
|
{
|
||||||
|
parentGroup.Owner = childProfile;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Character
|
||||||
|
if (parent is JsonCharacter parentCharacter)
|
||||||
|
{
|
||||||
|
// Properties
|
||||||
|
if (property == HierarchyProperties.PropProps)
|
||||||
|
{
|
||||||
|
// Clear
|
||||||
|
if (child is null && action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentCharacter.Properties.Clear();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add/Remove
|
||||||
|
else if (child is JsonProp childProperty)
|
||||||
|
{
|
||||||
|
// Remove
|
||||||
|
if (action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentCharacter.Properties.Remove(childProperty);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!parentCharacter.Properties.Contains(childProperty))
|
||||||
|
parentCharacter.Properties.Add(childProperty);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Property categories
|
||||||
|
else if (property == HierarchyProperties.PropPropCats)
|
||||||
|
{
|
||||||
|
// Clear
|
||||||
|
if (child is null && action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentCharacter.PropertyCategories.Clear();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add/Remove
|
||||||
|
else if (child is JsonPropCat childPropertyCategory)
|
||||||
|
{
|
||||||
|
// Remove
|
||||||
|
if (action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentCharacter.PropertyCategories.Remove(childPropertyCategory);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!parentCharacter.PropertyCategories.Contains(childPropertyCategory))
|
||||||
|
parentCharacter.PropertyCategories.Add(childPropertyCategory);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Owner
|
||||||
|
else if (property == HierarchyProperties.PropOwner)
|
||||||
|
{
|
||||||
|
// Remove
|
||||||
|
if (child is null || action == DataProviderSetAction.Remove)
|
||||||
|
{
|
||||||
|
parentCharacter.Owner = null;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set
|
||||||
|
else if (child is JsonUserProfile childProfile)
|
||||||
|
{
|
||||||
|
parentCharacter.Owner = childProfile;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetParent(Character character, Group parent)
|
public T? GetParent<T>(OwnCharObject child, string property) where T : OwnCharObject
|
||||||
{
|
{
|
||||||
if (character is JsonCharacter jcharacter && parent is JsonGroup jgroup)
|
throw new NotImplementedException("Not yet implemented as not needed.");
|
||||||
{
|
|
||||||
if (!jgroup.Characters.Contains(jcharacter))
|
|
||||||
jgroup.Characters.Add(jcharacter);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetParent(Property property, Character character)
|
public T? GetChild<T>(OwnCharObject parent, string property) where T : OwnCharObject
|
||||||
{
|
{
|
||||||
if (property is JsonProp jprop && character is JsonCharacter jcharacter)
|
// UserAccount
|
||||||
|
if (parent is JsonUserAccount parentAccount)
|
||||||
{
|
{
|
||||||
if (!jcharacter.Properties.Contains(jprop))
|
// User profile
|
||||||
jcharacter.Properties.Add(jprop);
|
if (property == HierarchyProperties.PropProfile)
|
||||||
return true;
|
return parentAccount.Profile as T;
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
// Group
|
||||||
|
else if (parent is JsonGroup parentGroup)
|
||||||
|
{
|
||||||
|
// Owner
|
||||||
|
if (property == HierarchyProperties.PropCharacters)
|
||||||
|
return parentGroup.Owner as T;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Character
|
||||||
|
else if (parent is JsonCharacter parentCharacter)
|
||||||
|
{
|
||||||
|
// Owner
|
||||||
|
if (property == HierarchyProperties.PropOwner)
|
||||||
|
return parentCharacter.Owner as T;
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool SetOwner(Group group, UserProfile owner)
|
public IQueryable<T>? GetChilds<T>(OwnCharObject parent, string property) where T : OwnCharObject
|
||||||
{
|
{
|
||||||
if (group is JsonGroup jgroup && owner is JsonUserProfile jprofile)
|
static IQueryable<T>? asList(IEnumerable list) => list as IQueryable<T>;
|
||||||
{
|
|
||||||
jgroup.Owner = jprofile;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool SetOwner(Character character, UserProfile owner)
|
// Group
|
||||||
{
|
if (parent is JsonGroup parentGroup)
|
||||||
if (character is JsonCharacter jcharacter && owner is JsonUserProfile jprofile)
|
|
||||||
{
|
{
|
||||||
jcharacter.Owner = jprofile;
|
// Characters
|
||||||
return true;
|
if (property == HierarchyProperties.PropCharacters)
|
||||||
|
return asList(parentGroup.Characters);
|
||||||
|
|
||||||
|
// Members
|
||||||
|
if (property == HierarchyProperties.PropMembers)
|
||||||
|
return asList(parentGroup.Members);
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
|
// Character
|
||||||
|
else if (parent is JsonCharacter parentCharacter)
|
||||||
|
{
|
||||||
|
// Properties
|
||||||
|
if (property == HierarchyProperties.PropProps)
|
||||||
|
return asList(parentCharacter.Properties);
|
||||||
|
|
||||||
|
// Property categories
|
||||||
|
if (property == HierarchyProperties.PropPropCats)
|
||||||
|
return asList(parentCharacter.PropertyCategories);
|
||||||
|
}
|
||||||
|
|
||||||
|
// UserProfile
|
||||||
|
else if (parent is JsonUserProfile parentUserProfile)
|
||||||
|
{
|
||||||
|
// Characters
|
||||||
|
if (property == HierarchyProperties.PropCharacters)
|
||||||
|
return asList(JsonFile.Characters.Where(c => c.Owner == parentUserProfile));
|
||||||
|
|
||||||
|
// Groups
|
||||||
|
if (property == HierarchyProperties.PropGroups)
|
||||||
|
return asList(JsonFile.Groups.Where(g => g.Owner == parentUserProfile));
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserAccount? GetUserAccount(string username, string password)
|
public UserAccount? GetUserAccount(string username, string password)
|
||||||
@@ -236,66 +427,4 @@ public class JsonFileDataProvider : IDataProvider
|
|||||||
{
|
{
|
||||||
return JsonFile.UserAccounts.FirstOrDefault(n => n.Username == username)?.Profile;
|
return JsonFile.UserAccounts.FirstOrDefault(n => n.Username == username)?.Profile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<UserProfile>? GetMembers(Group group)
|
|
||||||
{
|
|
||||||
if (group is JsonGroup jgroup)
|
|
||||||
return jgroup.Members;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UserProfile? GetOwner(Group group)
|
|
||||||
{
|
|
||||||
if (group is JsonGroup jgroup)
|
|
||||||
return jgroup.Owner;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public UserProfile? GetOwner(Character character)
|
|
||||||
{
|
|
||||||
if (character is JsonCharacter jcharacter)
|
|
||||||
return jcharacter.Owner;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<Character>? GetCharacters(Group group)
|
|
||||||
{
|
|
||||||
if (group is JsonGroup jgroup)
|
|
||||||
return jgroup.Characters;
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public IEnumerable<Character>? GetCharacters(UserProfile profile)
|
|
||||||
{
|
|
||||||
if (profile is UserProfile jprofile)
|
|
||||||
return JsonFile.Characters.Where(n => n.Owner == profile);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool AddMember(Group group, UserProfile user)
|
|
||||||
{
|
|
||||||
if (group is JsonGroup jgroup && user is JsonUserProfile jprofile)
|
|
||||||
{
|
|
||||||
if (!jgroup.Members.Contains(jprofile))
|
|
||||||
jgroup.Members.Add(jprofile);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool RemoveMember(Group group, UserProfile user)
|
|
||||||
{
|
|
||||||
if (group is JsonGroup jgroup && user is JsonUserProfile jprofile)
|
|
||||||
{
|
|
||||||
jgroup.Members.Remove(jprofile);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool SaveDatabase()
|
|
||||||
{
|
|
||||||
SaveFile();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,27 @@
|
|||||||
using OwnChar.Api;
|
using OwnChar.Api;
|
||||||
|
using OwnChar.Data;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
|
|
||||||
namespace OwnChar.Manager.Modules;
|
namespace OwnChar.Manager.Modules;
|
||||||
|
|
||||||
public class CharacterManager(OwnCharManager manager) : OwnCharManagerModule(manager), ICharacterManager
|
public class CharacterManager(OwnCharManager manager) : OwnCharManagerModule(manager), ICharacterManager
|
||||||
{
|
{
|
||||||
public IEnumerable<Character>? GetCharacters(Group? group)
|
public IQueryable<Character>? GetCharacters(Group? group)
|
||||||
{
|
{
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
|
|
||||||
if (group != null)
|
if (group != null)
|
||||||
return Manager.DataManager?.GetCharacters(Manager.CurrentUser!, group);
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Character, DataManagerActionType.Get, Manager.CurrentUser, group).Result as IQueryable<Character>;
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<Character>? GetCharacters(UserProfile? profile)
|
public IQueryable<Character>? GetCharacters(UserProfile? profile)
|
||||||
{
|
{
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
|
|
||||||
if (profile != null)
|
if (profile != null)
|
||||||
return Manager.DataManager?.GetCharacters(Manager.CurrentUser!, profile);
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Character, DataManagerActionType.Get, Manager.CurrentUser, profile).Result as IQueryable<Character>;
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -33,18 +34,14 @@ public class CharacterManager(OwnCharManager manager) : OwnCharManagerModule(man
|
|||||||
public Character? CreateCharacter(string? name, Group? destination)
|
public Character? CreateCharacter(string? name, Group? destination)
|
||||||
{
|
{
|
||||||
ArgumentException.ThrowIfNullOrWhiteSpace(name, nameof(name));
|
ArgumentException.ThrowIfNullOrWhiteSpace(name, nameof(name));
|
||||||
|
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.PropertyCategory, DataManagerActionType.Set, Manager.CurrentUser, null, name, destination).Result as Character;
|
||||||
return Manager.DataManager?.CreateCharacter(Manager.CurrentUser!, name, destination);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DeleteCharacter(Character? character)
|
public bool DeleteCharacter(Character? character)
|
||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(character, nameof(character));
|
ArgumentNullException.ThrowIfNull(character, nameof(character));
|
||||||
|
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Delete, DataManagerActionType.Default, Manager.CurrentUser, character).HasSuccess;
|
||||||
return Manager.DataManager?.DeleteCharacter(Manager.CurrentUser!, character) ?? false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,14 +10,27 @@ public class GroupsManager(OwnCharManager manager) : OwnCharManagerModule(manage
|
|||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Get, Manager.CurrentUser, group).HasSuccess;
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Owner, DataManagerActionType.Get, Manager.CurrentUser, group).Result as UserProfile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<UserProfile>? GetMembers(Group? group)
|
public IQueryable<Group>? GetGroups(UserProfile? profile)
|
||||||
|
{
|
||||||
|
ArgumentNullException.ThrowIfNull(profile, nameof(profile));
|
||||||
|
Manager.CheckLogin();
|
||||||
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Get, Manager.CurrentUser, profile) as IQueryable<Group>;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<Group>? GetGroups()
|
||||||
|
{
|
||||||
|
Manager.CheckLogin();
|
||||||
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Get, Manager.CurrentUser, null) as IQueryable<Group>;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<UserProfile>? GetMembers(Group? group)
|
||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Get, Manager.CurrentUser, group).HasSuccess;
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Get, Manager.CurrentUser, group).Result as IQueryable<UserProfile>;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool AddMember(UserProfile? profile, Group? group)
|
public bool AddMember(UserProfile? profile, Group? group)
|
||||||
@@ -28,7 +41,7 @@ public class GroupsManager(OwnCharManager manager) : OwnCharManagerModule(manage
|
|||||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Set, Manager.CurrentUser, group, profile).HasSuccess;
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Set, Manager.CurrentUser, group, profile).HasSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DeleteMember(UserProfile? profile, Group? group)
|
public bool RemoveMember(UserProfile? profile, Group? group)
|
||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(profile, nameof(profile));
|
ArgumentNullException.ThrowIfNull(profile, nameof(profile));
|
||||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using OwnChar.Api;
|
using OwnChar.Api;
|
||||||
|
using OwnChar.Data;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
using Pilz.Cryptography;
|
using Pilz.Cryptography;
|
||||||
|
|
||||||
@@ -9,20 +10,28 @@ public class UserManager(OwnCharManager manager) : OwnCharManagerModule(manager)
|
|||||||
public UserProfile? GetOwnUserProfile()
|
public UserProfile? GetOwnUserProfile()
|
||||||
{
|
{
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
return Manager.DataManager!.GetUserProfile(Manager.CurrentUser!);
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Profile, DataManagerActionType.Get, Manager.CurrentUser, Manager.CurrentUser).Result as UserProfile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IQueryable<UserAccount>? GetUserAccounts()
|
||||||
|
{
|
||||||
|
Manager.CheckLogin();
|
||||||
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.UserAccount, DataManagerActionType.Get, Manager.CurrentUser, null).Result as IQueryable<UserAccount>;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserAccount? CreateUserAccount(string? username, SecureString? password)
|
public UserAccount? CreateUserAccount(string? username, SecureString? password)
|
||||||
{
|
{
|
||||||
ArgumentException.ThrowIfNullOrWhiteSpace(username, nameof(username));
|
ArgumentException.ThrowIfNullOrWhiteSpace(username, nameof(username));
|
||||||
ArgumentException.ThrowIfNullOrWhiteSpace(password, nameof(password));
|
ArgumentException.ThrowIfNullOrWhiteSpace(password, nameof(password));
|
||||||
|
Manager.CheckLogin();
|
||||||
username = username.Trim().ToLower();
|
username = username.Trim().ToLower();
|
||||||
return Manager.DataManager?.CreateUserAccount(username, Utils.HashPassword(username, password));
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.UserAccount, DataManagerActionType.Set, Manager.CurrentUser, null, username, Utils.HashPassword(username, password)).Result as UserAccount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool DeleteUserAccount(UserAccount? account)
|
public bool DeleteUserAccount(UserAccount? account)
|
||||||
{
|
{
|
||||||
ArgumentNullException.ThrowIfNull(account, nameof(account));
|
ArgumentNullException.ThrowIfNull(account, nameof(account));
|
||||||
return Manager.DataManager?.DeleteUserAccount(account) ?? false;
|
Manager.CheckLogin();
|
||||||
|
return Manager.DataManager.ExecuteAction(DataManagerActions.Delete, DataManagerActionType.Default, Manager.CurrentUser, account).HasSuccess;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
using OwnChar.Api;
|
using OwnChar.Api;
|
||||||
using OwnChar.Api.Exceptions;
|
using OwnChar.Api.Exceptions;
|
||||||
|
using OwnChar.Data;
|
||||||
using OwnChar.Manager.Modules;
|
using OwnChar.Manager.Modules;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
using Pilz.Cryptography;
|
using Pilz.Cryptography;
|
||||||
|
|||||||
Reference in New Issue
Block a user