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? Name { get; set; }
|
||||||
public virtual string? Fandom { 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? Name { get; set; }
|
||||||
public virtual string? Fandom { 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 string? Name { get; set; }
|
||||||
public virtual object? Value { 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? Username { get; set; }
|
||||||
public virtual string? Password { get; set; }
|
|
||||||
public virtual string? Email { get; set; }
|
public virtual string? Email { get; set; }
|
||||||
public virtual UserType Type { 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
|
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
|
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
|
public class OwnCharApiClient
|
||||||
{
|
{
|
||||||
@@ -1,12 +1,14 @@
|
|||||||
using OwnChar.Data;
|
using OwnChar.Client.Managers;
|
||||||
|
using OwnChar.Data;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
using Pilz.Cryptography;
|
using Pilz.Cryptography;
|
||||||
|
|
||||||
namespace OwnChar.Api.Managers;
|
namespace OwnChar.Client;
|
||||||
|
|
||||||
public interface IOwnCharManager
|
public interface IOwnCharManager
|
||||||
{
|
{
|
||||||
IDataManager? DataManager { get; set; }
|
IDataManager? DataManager { get; set; }
|
||||||
UserAccount? CurrentUser { get; }
|
UserAccountBase? CurrentUser { get; }
|
||||||
bool IsLoggedIn { get; }
|
bool IsLoggedIn { get; }
|
||||||
|
|
||||||
IUserManager Users { get; }
|
IUserManager Users { get; }
|
||||||
@@ -15,4 +17,9 @@ public interface IOwnCharManager
|
|||||||
|
|
||||||
bool Login(IDataManager? proxy, string? username, SecureString? password);
|
bool Login(IDataManager? proxy, string? username, SecureString? password);
|
||||||
bool Logout();
|
bool Logout();
|
||||||
|
|
||||||
|
public static IOwnCharManager CreateDefault()
|
||||||
|
{
|
||||||
|
return new OwnCharManager();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,55 +1,53 @@
|
|||||||
using OwnChar.Api;
|
using OwnChar.Data;
|
||||||
using OwnChar.Api.Managers;
|
|
||||||
using OwnChar.Data;
|
|
||||||
using OwnChar.Model;
|
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();
|
Manager.CheckLogin();
|
||||||
|
|
||||||
if (group != null)
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IQueryable<Character>? GetCharacters(UserProfile? profile)
|
public IQueryable<CharacterBase>? GetCharacters(UserProfileBase? profile)
|
||||||
{
|
{
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
|
|
||||||
if (profile != null)
|
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;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Character? CreateCharacter(string? name)
|
public CharacterBase? CreateCharacter(string? name)
|
||||||
{
|
{
|
||||||
return CreateCharacter(name, null);
|
return CreateCharacter(name, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Character? CreateCharacter(string? name, Group? destination)
|
public CharacterBase? CreateCharacter(string? name, GroupBase? 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.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));
|
ArgumentNullException.ThrowIfNull(character, nameof(character));
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
return Manager.DataManager.ExecuteAction(DataManagerActions.Delete, DataManagerActionType.Default, Manager.CurrentUser, character).HasSuccess;
|
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));
|
ArgumentNullException.ThrowIfNull(character, nameof(character));
|
||||||
Manager.CheckLogin();
|
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.Data;
|
||||||
using OwnChar.Api.Managers;
|
|
||||||
using OwnChar.Data;
|
|
||||||
using OwnChar.Model;
|
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));
|
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||||
Manager.CheckLogin();
|
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));
|
ArgumentNullException.ThrowIfNull(profile, nameof(profile));
|
||||||
Manager.CheckLogin();
|
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();
|
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));
|
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||||
Manager.CheckLogin();
|
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(profile, nameof(profile));
|
||||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
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;
|
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(profile, nameof(profile));
|
||||||
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
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;
|
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));
|
ArgumentException.ThrowIfNullOrWhiteSpace(name, nameof(name));
|
||||||
Manager.CheckLogin();
|
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));
|
ArgumentNullException.ThrowIfNull(group, nameof(group));
|
||||||
Manager.CheckLogin();
|
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.Data;
|
||||||
using OwnChar.Api.Managers;
|
|
||||||
using OwnChar.Data;
|
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
using Pilz.Cryptography;
|
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();
|
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();
|
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(username, nameof(username));
|
||||||
ArgumentException.ThrowIfNullOrWhiteSpace(password, nameof(password));
|
ArgumentException.ThrowIfNullOrWhiteSpace(password, nameof(password));
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
username = username.Trim().ToLower();
|
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));
|
ArgumentNullException.ThrowIfNull(account, nameof(account));
|
||||||
Manager.CheckLogin();
|
Manager.CheckLogin();
|
||||||
@@ -1,18 +1,18 @@
|
|||||||
using OwnChar.Api.Exceptions;
|
using OwnChar.Api.Exceptions;
|
||||||
using OwnChar.Api.Managers;
|
using OwnChar.Client.Managers;
|
||||||
using OwnChar.Data;
|
using OwnChar.Data;
|
||||||
using OwnChar.Manager.Modules;
|
using OwnChar.Manager.Modules;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
using Pilz.Cryptography;
|
using Pilz.Cryptography;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
namespace OwnChar;
|
namespace OwnChar.Client;
|
||||||
|
|
||||||
public class OwnCharManager : IOwnCharManager
|
internal class OwnCharManager : IOwnCharManager
|
||||||
{
|
{
|
||||||
// User
|
// User
|
||||||
public bool IsLoggedIn => CurrentUser != null;
|
public bool IsLoggedIn => CurrentUser != null;
|
||||||
public UserAccount? CurrentUser { get; private set; }
|
public UserAccountBase? CurrentUser { get; private set; }
|
||||||
|
|
||||||
// Data Provider
|
// Data Provider
|
||||||
public IDataManager? DataManager { get; set; }
|
public IDataManager? DataManager { get; set; }
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
using OwnChar.Api.Managers;
|
namespace OwnChar.Client;
|
||||||
|
|
||||||
namespace OwnChar.Api;
|
|
||||||
|
|
||||||
public abstract class OwnCharManagerModule(IOwnCharManager manager)
|
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" />
|
<PackageReference Include="Pilz.Cryptography" Version="2.0.1" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<Folder Include="Data\Model\" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
using OwnChar.Data;
|
using OwnChar.Base.Data;
|
||||||
|
using OwnChar.Data;
|
||||||
using OwnChar.Model;
|
using OwnChar.Model;
|
||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@ public static class OwnCharExtensions
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool HasPermission(this UserAccount account, UserType permissions)
|
public static bool HasPermission(this UserAccountBase account, UserType permissions)
|
||||||
{
|
{
|
||||||
return account.Type >= 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