rework model to have a client and server variant
This commit is contained in:
@@ -1,12 +0,0 @@
|
||||
using OwnChar.Model;
|
||||
|
||||
namespace OwnChar.Api.Managers;
|
||||
public interface ICharacterManager
|
||||
{
|
||||
Character? CreateCharacter(string? name);
|
||||
Character? CreateCharacter(string? name, Group? destination);
|
||||
bool DeleteCharacter(Character? character);
|
||||
IQueryable<Character>? GetCharacters(Group? group);
|
||||
IQueryable<Character>? GetCharacters(UserProfile? profile);
|
||||
UserProfile? GetOwner(Character? character);
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
using OwnChar.Model;
|
||||
|
||||
namespace OwnChar.Api.Managers;
|
||||
public interface IGroupsManager
|
||||
{
|
||||
IQueryable<Group>? GetGroups(UserProfile? profile);
|
||||
IQueryable<Group>? GetGroups();
|
||||
bool AddMember(UserProfile? profile, Group? group);
|
||||
Group? CreateGroup(string? name);
|
||||
bool DeleteGroup(Group? group);
|
||||
bool RemoveMember(UserProfile? profile, Group? group);
|
||||
IQueryable<UserProfile>? GetMembers(Group? group);
|
||||
UserProfile? GetOwner(Group? group);
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
using OwnChar.Model;
|
||||
using Pilz.Cryptography;
|
||||
|
||||
namespace OwnChar.Api.Managers;
|
||||
|
||||
public interface IUserManager
|
||||
{
|
||||
IQueryable<UserAccount>? GetUserAccounts();
|
||||
UserAccount? CreateUserAccount(string? username, SecureString? password);
|
||||
bool DeleteUserAccount(UserAccount? account);
|
||||
UserProfile? GetOwnUserProfile();
|
||||
}
|
||||
@@ -1,9 +0,0 @@
|
||||
using OwnChar.Model;
|
||||
|
||||
namespace OwnChar.Api.Responses;
|
||||
|
||||
public class LoginResponse
|
||||
{
|
||||
public UserAccount? UserAccount { get; set; }
|
||||
public string? Secret { get; set; }
|
||||
}
|
||||
@@ -1,7 +0,0 @@
|
||||
namespace OwnChar.Api.Updates;
|
||||
|
||||
public class GroupUpdate
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string? Name { get; set; }
|
||||
}
|
||||
10
OwnChar/Base/Data/MemberLevel.cs
Normal file
10
OwnChar/Base/Data/MemberLevel.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
namespace OwnChar.Base.Data;
|
||||
|
||||
public enum MemberLevel
|
||||
{
|
||||
None,
|
||||
Guest,
|
||||
Member,
|
||||
Admin,
|
||||
Owner,
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace OwnChar.Model;
|
||||
namespace OwnChar.Base.Data.Model;
|
||||
|
||||
public abstract class Character : OwnCharObject
|
||||
public abstract class CharacterBase : OwnCharObject
|
||||
{
|
||||
public virtual string? Name { get; set; }
|
||||
public virtual string? Fandom { get; set; }
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace OwnChar.Model;
|
||||
namespace OwnChar.Base.Data.Model;
|
||||
|
||||
public abstract class Group : OwnCharObject
|
||||
public abstract class GroupBase : OwnCharObject
|
||||
{
|
||||
public virtual string? Name { get; set; }
|
||||
public virtual string? Fandom { get; set; }
|
||||
8
OwnChar/Base/Data/Model/MemberEntryBase.cs
Normal file
8
OwnChar/Base/Data/Model/MemberEntryBase.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using OwnChar.Client.Data.Model;
|
||||
|
||||
namespace OwnChar.Base.Data.Model;
|
||||
|
||||
public abstract class MemberEntryBase : OwnCharObject
|
||||
{
|
||||
public virtual MemberLevel Level { get; set; }
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
namespace OwnChar.Model;
|
||||
namespace OwnChar.Base.Data.Model;
|
||||
|
||||
public abstract class Property : OwnCharObject
|
||||
public abstract class PropertyBase : OwnCharObject
|
||||
{
|
||||
public virtual string? Name { get; set; }
|
||||
public virtual object? Value { get; set; }
|
||||
6
OwnChar/Base/Data/Model/PropertyCategoryBase.cs
Normal file
6
OwnChar/Base/Data/Model/PropertyCategoryBase.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace OwnChar.Base.Data.Model;
|
||||
|
||||
public abstract class PropertyCategoryBase : OwnCharObject
|
||||
{
|
||||
public virtual string? Name { get; set; }
|
||||
}
|
||||
@@ -1,9 +1,8 @@
|
||||
namespace OwnChar.Model;
|
||||
namespace OwnChar.Base.Data.Model;
|
||||
|
||||
public abstract class UserAccount : OwnCharObject
|
||||
public abstract class UserAccountBase : OwnCharObject
|
||||
{
|
||||
public virtual string? Username { get; set; }
|
||||
public virtual string? Password { get; set; }
|
||||
public virtual string? Email { get; set; }
|
||||
public virtual UserType Type { get; set; }
|
||||
}
|
||||
6
OwnChar/Base/Data/Model/UserProfileBase.cs
Normal file
6
OwnChar/Base/Data/Model/UserProfileBase.cs
Normal file
@@ -0,0 +1,6 @@
|
||||
namespace OwnChar.Base.Data.Model;
|
||||
|
||||
public abstract class UserProfileBase : OwnCharObject
|
||||
{
|
||||
public virtual string? Name { get; set; }
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OwnChar.Model;
|
||||
namespace OwnChar.Base.Data;
|
||||
|
||||
public class OwnCharObject
|
||||
{
|
||||
8
OwnChar/Base/Data/Requests/GroupMemberAddRequest.cs
Normal file
8
OwnChar/Base/Data/Requests/GroupMemberAddRequest.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using OwnChar.Client.Data.Model;
|
||||
|
||||
namespace OwnChar.Base.Data.Requests;
|
||||
|
||||
public class GroupMemberAddRequest
|
||||
{
|
||||
public Dictionary<long, MemberLevel> Members { get; } = [];
|
||||
}
|
||||
8
OwnChar/Base/Data/Requests/GroupMemberRemoveRequest.cs
Normal file
8
OwnChar/Base/Data/Requests/GroupMemberRemoveRequest.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using OwnChar.Client.Data.Model;
|
||||
|
||||
namespace OwnChar.Base.Data.Requests;
|
||||
|
||||
public class GroupMemberRemoveRequest
|
||||
{
|
||||
public List<long> Members { get; } = [];
|
||||
}
|
||||
9
OwnChar/Base/Data/Requests/LoginRequest.cs
Normal file
9
OwnChar/Base/Data/Requests/LoginRequest.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using Pilz.Cryptography;
|
||||
|
||||
namespace OwnChar.Base.Data.Requests;
|
||||
|
||||
public class LoginRequest(string username, SecureString password)
|
||||
{
|
||||
public string Username { get; } = username;
|
||||
public SecureString Password { get; } = password;
|
||||
}
|
||||
5
OwnChar/Base/Data/Requests/LogoutRequest.cs
Normal file
5
OwnChar/Base/Data/Requests/LogoutRequest.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace OwnChar.Base.Data.Requests;
|
||||
|
||||
public class LogoutRequest
|
||||
{
|
||||
}
|
||||
8
OwnChar/Base/Data/Requests/UpdateRequest.cs
Normal file
8
OwnChar/Base/Data/Requests/UpdateRequest.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using OwnChar.Base.Data.Updates;
|
||||
|
||||
namespace OwnChar.Base.Data.Requests;
|
||||
|
||||
public class UpdateRequest(OwnCharObjectUpdate update)
|
||||
{
|
||||
public OwnCharObjectUpdate Update { get; } = update;
|
||||
}
|
||||
10
OwnChar/Base/Data/Responses/LoginResponse.cs
Normal file
10
OwnChar/Base/Data/Responses/LoginResponse.cs
Normal file
@@ -0,0 +1,10 @@
|
||||
using OwnChar.Client.Data.Model;
|
||||
|
||||
namespace OwnChar.Base.Data.Responses;
|
||||
|
||||
public class LoginResponse(UserAccount account, UserProfile profile, string secret)
|
||||
{
|
||||
public UserAccount Account { get; } = account;
|
||||
public UserProfile Profile { get; } = profile;
|
||||
public string? Secret { get; } = secret;
|
||||
}
|
||||
19
OwnChar/Base/Data/Updates/GroupUpdate.cs
Normal file
19
OwnChar/Base/Data/Updates/GroupUpdate.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
using OwnChar.Client.Data.Model;
|
||||
|
||||
namespace OwnChar.Base.Data.Updates;
|
||||
|
||||
public class GroupUpdate : OwnCharObjectUpdate
|
||||
{
|
||||
public string? Name { get; set; }
|
||||
public string? Fandom { get; set; }
|
||||
|
||||
public GroupUpdate() : base()
|
||||
{
|
||||
}
|
||||
|
||||
public GroupUpdate(Group group) : base(group)
|
||||
{
|
||||
Name = group.Name;
|
||||
Fandom = group.Fandom;
|
||||
}
|
||||
}
|
||||
15
OwnChar/Base/Data/Updates/OwnCharObjectUpdate.cs
Normal file
15
OwnChar/Base/Data/Updates/OwnCharObjectUpdate.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
namespace OwnChar.Base.Data.Updates;
|
||||
|
||||
public abstract class OwnCharObjectUpdate
|
||||
{
|
||||
public long Id { get; set; }
|
||||
|
||||
public OwnCharObjectUpdate()
|
||||
{
|
||||
}
|
||||
|
||||
public OwnCharObjectUpdate(OwnCharObject obj) : this()
|
||||
{
|
||||
Id = obj.Id;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OwnChar.Model;
|
||||
namespace OwnChar.Base.Data;
|
||||
|
||||
public enum UserType
|
||||
{
|
||||
5
OwnChar/Client/Data/Clients/CharactersApiClient.cs
Normal file
5
OwnChar/Client/Data/Clients/CharactersApiClient.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace OwnChar.Client.Data.Clients;
|
||||
|
||||
public class CharactersApiClient
|
||||
{
|
||||
}
|
||||
5
OwnChar/Client/Data/Clients/GroupsApiClient.cs
Normal file
5
OwnChar/Client/Data/Clients/GroupsApiClient.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace OwnChar.Client.Data.Clients;
|
||||
|
||||
public class GroupsApiClient
|
||||
{
|
||||
}
|
||||
14
OwnChar/Client/Data/Clients/LoginApiClient.cs
Normal file
14
OwnChar/Client/Data/Clients/LoginApiClient.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
namespace OwnChar.Client.Data.Clients;
|
||||
|
||||
public class LoginApiClient
|
||||
{
|
||||
public string Login(string username, string password)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public string Logout()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
5
OwnChar/Client/Data/Clients/UsersApiClient.cs
Normal file
5
OwnChar/Client/Data/Clients/UsersApiClient.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace OwnChar.Client.Data.Clients;
|
||||
|
||||
public class UsersApiClient
|
||||
{
|
||||
}
|
||||
13
OwnChar/Client/Data/Model/Character.cs
Normal file
13
OwnChar/Client/Data/Model/Character.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Client.Data.Model;
|
||||
|
||||
public class Character() : CharacterBase
|
||||
{
|
||||
internal Character(CharacterBase character) : this()
|
||||
{
|
||||
Id = character.Id;
|
||||
Name = character.Name;
|
||||
Fandom = character.Fandom;
|
||||
}
|
||||
}
|
||||
14
OwnChar/Client/Data/Model/Group.cs
Normal file
14
OwnChar/Client/Data/Model/Group.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Client.Data.Model;
|
||||
|
||||
public class Group() : GroupBase
|
||||
{
|
||||
internal Group(GroupBase group) : this()
|
||||
{
|
||||
Id = group.Id;
|
||||
Name = group.Name;
|
||||
IsInternal = group.IsInternal;
|
||||
Fandom = group.Fandom;
|
||||
}
|
||||
}
|
||||
13
OwnChar/Client/Data/Model/MemberEntry.cs
Normal file
13
OwnChar/Client/Data/Model/MemberEntry.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Client.Data.Model;
|
||||
|
||||
public class MemberEntry() : MemberEntryBase
|
||||
{
|
||||
internal MemberEntry(MemberEntryBase entry) : this()
|
||||
{
|
||||
Id = entry.Id;
|
||||
User = entry.User;
|
||||
Level = entry.Level;
|
||||
}
|
||||
}
|
||||
13
OwnChar/Client/Data/Model/Property.cs
Normal file
13
OwnChar/Client/Data/Model/Property.cs
Normal file
@@ -0,0 +1,13 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Client.Data.Model;
|
||||
|
||||
public class Property() : PropertyBase
|
||||
{
|
||||
internal Property(PropertyBase prop) : this()
|
||||
{
|
||||
Id = prop.Id;
|
||||
Name = prop.Name;
|
||||
Value = prop.Value;
|
||||
}
|
||||
}
|
||||
12
OwnChar/Client/Data/Model/PropertyCategory.cs
Normal file
12
OwnChar/Client/Data/Model/PropertyCategory.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Client.Data.Model;
|
||||
|
||||
public class PropertyCategory() : PropertyCategoryBase
|
||||
{
|
||||
internal PropertyCategory(PropertyCategoryBase propCat) : this()
|
||||
{
|
||||
Id = propCat.Id;
|
||||
Name = propCat.Name;
|
||||
}
|
||||
}
|
||||
14
OwnChar/Client/Data/Model/UserAccount.cs
Normal file
14
OwnChar/Client/Data/Model/UserAccount.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Client.Data.Model;
|
||||
|
||||
public class UserAccount() : UserAccountBase
|
||||
{
|
||||
internal UserAccount(UserAccountBase account) : this()
|
||||
{
|
||||
Id = account.Id;
|
||||
Username = account.Username;
|
||||
Email = account.Email;
|
||||
Type = account.Type;
|
||||
}
|
||||
}
|
||||
12
OwnChar/Client/Data/Model/UserProfile.cs
Normal file
12
OwnChar/Client/Data/Model/UserProfile.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Client.Data.Model;
|
||||
|
||||
public class UserProfile() : UserProfileBase
|
||||
{
|
||||
internal UserProfile(UserProfileBase profile) : this()
|
||||
{
|
||||
Id = profile.Id;
|
||||
Name = profile.Name;
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace OwnChar;
|
||||
namespace OwnChar.Client.Data;
|
||||
|
||||
public class OwnCharApiClient
|
||||
{
|
||||
@@ -1,12 +1,14 @@
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Client.Managers;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Model;
|
||||
using Pilz.Cryptography;
|
||||
|
||||
namespace OwnChar.Api.Managers;
|
||||
namespace OwnChar.Client;
|
||||
|
||||
public interface IOwnCharManager
|
||||
{
|
||||
IDataManager? DataManager { get; set; }
|
||||
UserAccount? CurrentUser { get; }
|
||||
UserAccountBase? CurrentUser { get; }
|
||||
bool IsLoggedIn { get; }
|
||||
|
||||
IUserManager Users { get; }
|
||||
@@ -15,4 +17,9 @@ public interface IOwnCharManager
|
||||
|
||||
bool Login(IDataManager? proxy, string? username, SecureString? password);
|
||||
bool Logout();
|
||||
|
||||
public static IOwnCharManager CreateDefault()
|
||||
{
|
||||
return new OwnCharManager();
|
||||
}
|
||||
}
|
||||
@@ -1,55 +1,53 @@
|
||||
using OwnChar.Api;
|
||||
using OwnChar.Api.Managers;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Model;
|
||||
|
||||
namespace OwnChar.Managers;
|
||||
namespace OwnChar.Client.Managers;
|
||||
|
||||
public class CharacterManager(OwnCharManager manager) : OwnCharManagerModule(manager), ICharacterManager
|
||||
internal class CharacterManager(OwnCharManager manager) : OwnCharManagerModule(manager), ICharacterManager
|
||||
{
|
||||
public IQueryable<Character>? GetCharacters(Group? group)
|
||||
public IQueryable<CharacterBase>? GetCharacters(GroupBase? group)
|
||||
{
|
||||
Manager.CheckLogin();
|
||||
|
||||
if (group != null)
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Character, DataManagerActionType.Get, Manager.CurrentUser, group).Result as IQueryable<Character>;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Character, DataManagerActionType.Get, Manager.CurrentUser, group).Result as IQueryable<CharacterBase>;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public IQueryable<Character>? GetCharacters(UserProfile? profile)
|
||||
public IQueryable<CharacterBase>? GetCharacters(UserProfileBase? profile)
|
||||
{
|
||||
Manager.CheckLogin();
|
||||
|
||||
if (profile != null)
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Character, DataManagerActionType.Get, Manager.CurrentUser, profile).Result as IQueryable<Character>;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Character, DataManagerActionType.Get, Manager.CurrentUser, profile).Result as IQueryable<CharacterBase>;
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public Character? CreateCharacter(string? name)
|
||||
public CharacterBase? CreateCharacter(string? name)
|
||||
{
|
||||
return CreateCharacter(name, null);
|
||||
}
|
||||
|
||||
public Character? CreateCharacter(string? name, Group? destination)
|
||||
public CharacterBase? CreateCharacter(string? name, GroupBase? destination)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(name, nameof(name));
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.PropertyCategory, DataManagerActionType.Set, Manager.CurrentUser, null, name, destination).Result as Character;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.PropertyCategory, DataManagerActionType.Set, Manager.CurrentUser, null, name, destination).Result as CharacterBase;
|
||||
}
|
||||
|
||||
public bool DeleteCharacter(Character? character)
|
||||
public bool DeleteCharacter(CharacterBase? character)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(character, nameof(character));
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Delete, DataManagerActionType.Default, Manager.CurrentUser, character).HasSuccess;
|
||||
}
|
||||
|
||||
public UserProfile? GetOwner(Character? character)
|
||||
public UserProfileBase? GetOwner(CharacterBase? character)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(character, nameof(character));
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Owner, DataManagerActionType.Get, Manager.CurrentUser, character).Result as UserProfile;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Owner, DataManagerActionType.Get, Manager.CurrentUser, character).Result as UserProfileBase;
|
||||
}
|
||||
}
|
||||
@@ -1,40 +1,38 @@
|
||||
using OwnChar.Api;
|
||||
using OwnChar.Api.Managers;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Model;
|
||||
|
||||
namespace OwnChar.Managers;
|
||||
namespace OwnChar.Client.Managers;
|
||||
|
||||
public class GroupsManager(OwnCharManager manager) : OwnCharManagerModule(manager), IGroupsManager
|
||||
internal class GroupsManager(OwnCharManager manager) : OwnCharManagerModule(manager), IGroupsManager
|
||||
{
|
||||
public UserProfile? GetOwner(Group? group)
|
||||
public UserProfileBase? GetOwner(GroupBase? group)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Owner, DataManagerActionType.Get, Manager.CurrentUser, group).Result as UserProfile;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Owner, DataManagerActionType.Get, Manager.CurrentUser, group).Result as UserProfileBase;
|
||||
}
|
||||
|
||||
public IQueryable<Group>? GetGroups(UserProfile? profile)
|
||||
public IQueryable<GroupBase>? GetGroups(UserProfileBase? profile)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(profile, nameof(profile));
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Get, Manager.CurrentUser, profile) as IQueryable<Group>;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Get, Manager.CurrentUser, profile) as IQueryable<GroupBase>;
|
||||
}
|
||||
|
||||
public IQueryable<Group>? GetGroups()
|
||||
public IQueryable<GroupBase>? GetGroups()
|
||||
{
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Get, Manager.CurrentUser, null) as IQueryable<Group>;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Get, Manager.CurrentUser, null) as IQueryable<GroupBase>;
|
||||
}
|
||||
|
||||
public IQueryable<UserProfile>? GetMembers(Group? group)
|
||||
public IQueryable<UserProfileBase>? GetMembers(GroupBase? group)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Get, Manager.CurrentUser, group).Result as IQueryable<UserProfile>;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Get, Manager.CurrentUser, group).Result as IQueryable<UserProfileBase>;
|
||||
}
|
||||
|
||||
public bool AddMember(UserProfile? profile, Group? group)
|
||||
public bool AddMember(UserProfileBase? profile, GroupBase? group)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(profile, nameof(profile));
|
||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||
@@ -42,7 +40,7 @@ public class GroupsManager(OwnCharManager manager) : OwnCharManagerModule(manage
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Set, Manager.CurrentUser, group, profile).HasSuccess;
|
||||
}
|
||||
|
||||
public bool RemoveMember(UserProfile? profile, Group? group)
|
||||
public bool RemoveMember(UserProfileBase? profile, GroupBase? group)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(profile, nameof(profile));
|
||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||
@@ -50,14 +48,14 @@ public class GroupsManager(OwnCharManager manager) : OwnCharManagerModule(manage
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Members, DataManagerActionType.Delete, Manager.CurrentUser, group, profile).HasSuccess;
|
||||
}
|
||||
|
||||
public Group? CreateGroup(string? name)
|
||||
public GroupBase? CreateGroup(string? name)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(name, nameof(name));
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Set, Manager.CurrentUser, null, name).Result as Group;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.Group, DataManagerActionType.Set, Manager.CurrentUser, null, name).Result as GroupBase;
|
||||
}
|
||||
|
||||
public bool DeleteGroup(Group? group)
|
||||
public bool DeleteGroup(GroupBase? group)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||
Manager.CheckLogin();
|
||||
12
OwnChar/Client/Managers/ICharacterManager.cs
Normal file
12
OwnChar/Client/Managers/ICharacterManager.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using OwnChar.Model;
|
||||
|
||||
namespace OwnChar.Client.Managers;
|
||||
public interface ICharacterManager
|
||||
{
|
||||
CharacterBase? CreateCharacter(string? name);
|
||||
CharacterBase? CreateCharacter(string? name, GroupBase? destination);
|
||||
bool DeleteCharacter(CharacterBase? character);
|
||||
IQueryable<CharacterBase>? GetCharacters(GroupBase? group);
|
||||
IQueryable<CharacterBase>? GetCharacters(UserProfileBase? profile);
|
||||
UserProfileBase? GetOwner(CharacterBase? character);
|
||||
}
|
||||
14
OwnChar/Client/Managers/IGroupsManager.cs
Normal file
14
OwnChar/Client/Managers/IGroupsManager.cs
Normal file
@@ -0,0 +1,14 @@
|
||||
using OwnChar.Model;
|
||||
|
||||
namespace OwnChar.Client.Managers;
|
||||
public interface IGroupsManager
|
||||
{
|
||||
IQueryable<GroupBase>? GetGroups(UserProfileBase? profile);
|
||||
IQueryable<GroupBase>? GetGroups();
|
||||
bool AddMember(UserProfileBase? profile, GroupBase? group);
|
||||
GroupBase? CreateGroup(string? name);
|
||||
bool DeleteGroup(GroupBase? group);
|
||||
bool RemoveMember(UserProfileBase? profile, GroupBase? group);
|
||||
IQueryable<UserProfileBase>? GetMembers(GroupBase? group);
|
||||
UserProfileBase? GetOwner(GroupBase? group);
|
||||
}
|
||||
12
OwnChar/Client/Managers/IUserManager.cs
Normal file
12
OwnChar/Client/Managers/IUserManager.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using OwnChar.Model;
|
||||
using Pilz.Cryptography;
|
||||
|
||||
namespace OwnChar.Client.Managers;
|
||||
|
||||
public interface IUserManager
|
||||
{
|
||||
IQueryable<UserAccountBase>? GetUserAccounts();
|
||||
UserAccountBase? CreateUserAccount(string? username, SecureString? password);
|
||||
bool DeleteUserAccount(UserAccountBase? account);
|
||||
UserProfileBase? GetOwnUserProfile();
|
||||
}
|
||||
@@ -1,35 +1,33 @@
|
||||
using OwnChar.Api;
|
||||
using OwnChar.Api.Managers;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Model;
|
||||
using Pilz.Cryptography;
|
||||
|
||||
namespace OwnChar.Managers;
|
||||
namespace OwnChar.Client.Managers;
|
||||
|
||||
public class UserManager(OwnCharManager manager) : OwnCharManagerModule(manager), IUserManager
|
||||
internal class UserManager(OwnCharManager manager) : OwnCharManagerModule(manager), IUserManager
|
||||
{
|
||||
public UserProfile? GetOwnUserProfile()
|
||||
public UserProfileBase? GetOwnUserProfile()
|
||||
{
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Profile, DataManagerActionType.Get, Manager.CurrentUser, Manager.CurrentUser).Result as UserProfile;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Association.Profile, DataManagerActionType.Get, Manager.CurrentUser, Manager.CurrentUser).Result as UserProfileBase;
|
||||
}
|
||||
|
||||
public IQueryable<UserAccount>? GetUserAccounts()
|
||||
public IQueryable<UserAccountBase>? GetUserAccounts()
|
||||
{
|
||||
Manager.CheckLogin();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.UserAccount, DataManagerActionType.Get, Manager.CurrentUser, null).Result as IQueryable<UserAccount>;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.UserAccount, DataManagerActionType.Get, Manager.CurrentUser, null).Result as IQueryable<UserAccountBase>;
|
||||
}
|
||||
|
||||
public UserAccount? CreateUserAccount(string? username, SecureString? password)
|
||||
public UserAccountBase? CreateUserAccount(string? username, SecureString? password)
|
||||
{
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(username, nameof(username));
|
||||
ArgumentException.ThrowIfNullOrWhiteSpace(password, nameof(password));
|
||||
Manager.CheckLogin();
|
||||
username = username.Trim().ToLower();
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.UserAccount, DataManagerActionType.Set, Manager.CurrentUser, null, username, OwnCharUtils.HashPassword(username, password)).Result as UserAccount;
|
||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Getter.UserAccount, DataManagerActionType.Set, Manager.CurrentUser, null, username, OwnCharUtils.HashPassword(username, password)).Result as UserAccountBase;
|
||||
}
|
||||
|
||||
public bool DeleteUserAccount(UserAccount? account)
|
||||
public bool DeleteUserAccount(UserAccountBase? account)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(account, nameof(account));
|
||||
Manager.CheckLogin();
|
||||
@@ -1,18 +1,18 @@
|
||||
using OwnChar.Api.Exceptions;
|
||||
using OwnChar.Api.Managers;
|
||||
using OwnChar.Client.Managers;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Manager.Modules;
|
||||
using OwnChar.Model;
|
||||
using Pilz.Cryptography;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
namespace OwnChar;
|
||||
namespace OwnChar.Client;
|
||||
|
||||
public class OwnCharManager : IOwnCharManager
|
||||
internal class OwnCharManager : IOwnCharManager
|
||||
{
|
||||
// User
|
||||
public bool IsLoggedIn => CurrentUser != null;
|
||||
public UserAccount? CurrentUser { get; private set; }
|
||||
public UserAccountBase? CurrentUser { get; private set; }
|
||||
|
||||
// Data Provider
|
||||
public IDataManager? DataManager { get; set; }
|
||||
@@ -1,6 +1,4 @@
|
||||
using OwnChar.Api.Managers;
|
||||
|
||||
namespace OwnChar.Api;
|
||||
namespace OwnChar.Client;
|
||||
|
||||
public abstract class OwnCharManagerModule(IOwnCharManager manager)
|
||||
{
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace OwnChar.Clients;
|
||||
|
||||
public class CharactersApiClient
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace OwnChar.Clients;
|
||||
|
||||
public class GroupsApiClient
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace OwnChar.Clients;
|
||||
|
||||
public class LoginApiClient
|
||||
{
|
||||
}
|
||||
@@ -1,5 +0,0 @@
|
||||
namespace OwnChar.Clients;
|
||||
|
||||
public class UsersApiClient
|
||||
{
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
namespace OwnChar.Model;
|
||||
|
||||
public abstract class PropertyCategory : OwnCharObject
|
||||
{
|
||||
public virtual string? Name { get; set; }
|
||||
}
|
||||
@@ -1,6 +0,0 @@
|
||||
namespace OwnChar.Model;
|
||||
|
||||
public abstract class UserProfile : OwnCharObject
|
||||
{
|
||||
public virtual string? Name { get; set; }
|
||||
}
|
||||
@@ -14,8 +14,4 @@
|
||||
<PackageReference Include="Pilz.Cryptography" Version="2.0.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Folder Include="Data\Model\" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Base.Data;
|
||||
using OwnChar.Data;
|
||||
using OwnChar.Model;
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
|
||||
@@ -17,7 +18,7 @@ public static class OwnCharExtensions
|
||||
return false;
|
||||
}
|
||||
|
||||
public static bool HasPermission(this UserAccount account, UserType permissions)
|
||||
public static bool HasPermission(this UserAccountBase account, UserType permissions)
|
||||
{
|
||||
return account.Type >= permissions;
|
||||
}
|
||||
|
||||
11
OwnChar/Server/Data/Model/CharacterDb.cs
Normal file
11
OwnChar/Server/Data/Model/CharacterDb.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
using OwnChar.Client.Data.Model;
|
||||
|
||||
namespace OwnChar.Server.Data.Model;
|
||||
|
||||
public class CharacterDb : CharacterBase
|
||||
{
|
||||
public UserProfileDb? Owner { get; set; }
|
||||
public List<PropertyCategoryDb> PropCats { get; } = [];
|
||||
public List<PropertyDb> Props { get; } = [];
|
||||
}
|
||||
16
OwnChar/Server/Data/Model/GroupDb.cs
Normal file
16
OwnChar/Server/Data/Model/GroupDb.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using OwnChar.Base.Data.Updates;
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Server.Data.Model;
|
||||
|
||||
public class GroupDb : GroupBase
|
||||
{
|
||||
public List<CharacterDb> Characters { get; } = [];
|
||||
public List<MemberEntryDb> Members { get; } = [];
|
||||
|
||||
public void Update(GroupUpdate update)
|
||||
{
|
||||
Name = update.Name;
|
||||
Fandom = update.Fandom;
|
||||
}
|
||||
}
|
||||
15
OwnChar/Server/Data/Model/MemberEntryDb.cs
Normal file
15
OwnChar/Server/Data/Model/MemberEntryDb.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
using OwnChar.Client.Data.Model;
|
||||
|
||||
namespace OwnChar.Server.Data.Model;
|
||||
|
||||
public class MemberEntryDb() : MemberEntryBase
|
||||
{
|
||||
public virtual UserProfile? User { get; set; }
|
||||
|
||||
internal MemberEntryDb(MemberEntryBase entry) : this()
|
||||
{
|
||||
Id = entry.Id;
|
||||
Level = entry.Level;
|
||||
}
|
||||
}
|
||||
7
OwnChar/Server/Data/Model/PropertyCategoryDb.cs
Normal file
7
OwnChar/Server/Data/Model/PropertyCategoryDb.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Server.Data.Model;
|
||||
|
||||
public class PropertyCategoryDb : PropertyCategoryBase
|
||||
{
|
||||
}
|
||||
7
OwnChar/Server/Data/Model/PropertyDb.cs
Normal file
7
OwnChar/Server/Data/Model/PropertyDb.cs
Normal file
@@ -0,0 +1,7 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Server.Data.Model;
|
||||
|
||||
public class PropertyDb : PropertyBase
|
||||
{
|
||||
}
|
||||
9
OwnChar/Server/Data/Model/UserAccountDb.cs
Normal file
9
OwnChar/Server/Data/Model/UserAccountDb.cs
Normal file
@@ -0,0 +1,9 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Server.Data.Model;
|
||||
|
||||
public class UserAccountDb : UserAccountBase
|
||||
{
|
||||
public virtual string? Password { get; set; }
|
||||
public UserProfileDb? Profile { get; set; }
|
||||
}
|
||||
8
OwnChar/Server/Data/Model/UserProfileDb.cs
Normal file
8
OwnChar/Server/Data/Model/UserProfileDb.cs
Normal file
@@ -0,0 +1,8 @@
|
||||
using OwnChar.Base.Data.Model;
|
||||
|
||||
namespace OwnChar.Server.Data.Model;
|
||||
|
||||
public class UserProfileDb : UserProfileBase
|
||||
{
|
||||
public List<CharacterDb> Characters { get; } = [];
|
||||
}
|
||||
Reference in New Issue
Block a user