diff --git a/MareSynchronosAPI/Dto/CharaData/AccessTypeDto.cs b/MareSynchronosAPI/Dto/CharaData/AccessTypeDto.cs new file mode 100644 index 0000000..9c53eaa --- /dev/null +++ b/MareSynchronosAPI/Dto/CharaData/AccessTypeDto.cs @@ -0,0 +1,9 @@ +namespace MareSynchronos.API.Dto.CharaData; + +public enum AccessTypeDto +{ + Individuals, + ClosePairs, + AllPairs, + Public +} diff --git a/MareSynchronosAPI/Dto/CharaData/CharaDataDownloadDto.cs b/MareSynchronosAPI/Dto/CharaData/CharaDataDownloadDto.cs new file mode 100644 index 0000000..5d450b8 --- /dev/null +++ b/MareSynchronosAPI/Dto/CharaData/CharaDataDownloadDto.cs @@ -0,0 +1,14 @@ +using MareSynchronos.API.Data; +using MessagePack; + +namespace MareSynchronos.API.Dto.CharaData; + +[MessagePackObject(keyAsPropertyName: true)] +public record CharaDataDownloadDto(string Id, UserData Uploader) : CharaDataDto(Id, Uploader) +{ + public string GlamourerData { get; init; } = string.Empty; + public string CustomizeData { get; init; } = string.Empty; + public string ManipulationData { get; set; } = string.Empty; + public List FileGamePaths { get; init; } = []; + public List FileSwaps { get; init; } = []; +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/CharaData/CharaDataDto.cs b/MareSynchronosAPI/Dto/CharaData/CharaDataDto.cs new file mode 100644 index 0000000..dbf4a26 --- /dev/null +++ b/MareSynchronosAPI/Dto/CharaData/CharaDataDto.cs @@ -0,0 +1,9 @@ +using MareSynchronos.API.Data; + +namespace MareSynchronos.API.Dto.CharaData; + +public record CharaDataDto(string Id, UserData Uploader) +{ + public string Description { get; init; } = string.Empty; + public DateTime UpdatedDate { get; init; } +} diff --git a/MareSynchronosAPI/Dto/CharaData/CharaDataFullDto.cs b/MareSynchronosAPI/Dto/CharaData/CharaDataFullDto.cs new file mode 100644 index 0000000..c87244c --- /dev/null +++ b/MareSynchronosAPI/Dto/CharaData/CharaDataFullDto.cs @@ -0,0 +1,61 @@ +using MareSynchronos.API.Data; +using MessagePack; + +namespace MareSynchronos.API.Dto.CharaData; + +[MessagePackObject(keyAsPropertyName: true)] +public record CharaDataFullDto(string Id, UserData Uploader) : CharaDataDto(Id, Uploader) +{ + public DateTime CreatedDate { get; init; } + public DateTime ExpiryDate { get; set; } + public string GlamourerData { get; set; } = string.Empty; + public string CustomizeData { get; set; } = string.Empty; + public string ManipulationData { get; set; } = string.Empty; + public int DownloadCount { get; set; } = 0; + public List AllowedUsers { get; set; } = []; + public List FileGamePaths { get; set; } = []; + public List FileSwaps { get; set; } = []; + public List OriginalFiles { get; set; } = []; + public AccessTypeDto AccessType { get; set; } + public ShareTypeDto ShareType { get; set; } + public List PoseData { get; set; } = []; +} + +[MessagePackObject(keyAsPropertyName: true)] +public record GamePathEntry(string HashOrFileSwap, string GamePath); + +[MessagePackObject(keyAsPropertyName: true)] +public record PoseEntry(long? Id) +{ + public string? Description { get; set; } = string.Empty; + public string? PoseData { get; set; } = string.Empty; + public WorldData? WorldData { get; set; } +} + +[MessagePackObject] +public record struct WorldData +{ + [Key(0)] public LocationInfo LocationInfo { get; set; } + [Key(1)] public float PositionX { get; set; } + [Key(2)] public float PositionY { get; set; } + [Key(3)] public float PositionZ { get; set; } + [Key(4)] public float RotationX { get; set; } + [Key(5)] public float RotationY { get; set; } + [Key(6)] public float RotationZ { get; set; } + [Key(7)] public float RotationW { get; set; } + [Key(8)] public float ScaleX { get; set; } + [Key(9)] public float ScaleY { get; set; } + [Key(10)] public float ScaleZ { get; set; } +} + +[MessagePackObject] +public record struct LocationInfo +{ + [Key(0)] public uint ServerId { get; set; } + [Key(1)] public uint MapId { get; set; } + [Key(2)] public uint TerritoryId { get; set; } + [Key(3)] public uint DivisionId { get; set; } + [Key(4)] public uint WardId { get; set; } + [Key(5)] public uint HouseId { get; set; } + [Key(6)] public uint RoomId { get; set; } +} \ No newline at end of file diff --git a/MareSynchronosAPI/Dto/CharaData/CharaDataMetaInfoDto.cs b/MareSynchronosAPI/Dto/CharaData/CharaDataMetaInfoDto.cs new file mode 100644 index 0000000..7afb6b2 --- /dev/null +++ b/MareSynchronosAPI/Dto/CharaData/CharaDataMetaInfoDto.cs @@ -0,0 +1,11 @@ +using MareSynchronos.API.Data; +using MessagePack; + +namespace MareSynchronos.API.Dto.CharaData; + +[MessagePackObject(keyAsPropertyName: true)] +public record CharaDataMetaInfoDto(string Id, UserData Uploader) : CharaDataDto(Id, Uploader) +{ + public bool CanBeDownloaded { get; init; } + public List PoseData { get; set; } = []; +} diff --git a/MareSynchronosAPI/Dto/CharaData/CharaDataUpdateDto.cs b/MareSynchronosAPI/Dto/CharaData/CharaDataUpdateDto.cs new file mode 100644 index 0000000..7ecf237 --- /dev/null +++ b/MareSynchronosAPI/Dto/CharaData/CharaDataUpdateDto.cs @@ -0,0 +1,19 @@ +using MessagePack; + +namespace MareSynchronos.API.Dto.CharaData; + +[MessagePackObject(keyAsPropertyName: true)] +public record CharaDataUpdateDto(string Id) +{ + public string? Description { get; set; } + public DateTime? ExpiryDate { get; set; } + public string? GlamourerData { get; set; } + public string? CustomizeData { get; set; } + public string? ManipulationData { get; set; } + public List? AllowedUsers { get; set; } + public List? FileGamePaths { get; set; } + public List? FileSwaps { get; set; } + public AccessTypeDto? AccessType { get; set; } + public ShareTypeDto? ShareType { get; set; } + public List? Poses { get; set; } +} diff --git a/MareSynchronosAPI/Dto/CharaData/ShareTypeDto.cs b/MareSynchronosAPI/Dto/CharaData/ShareTypeDto.cs new file mode 100644 index 0000000..ed55f94 --- /dev/null +++ b/MareSynchronosAPI/Dto/CharaData/ShareTypeDto.cs @@ -0,0 +1,7 @@ +namespace MareSynchronos.API.Dto.CharaData; + +public enum ShareTypeDto +{ + Private, + Shared +} diff --git a/MareSynchronosAPI/Dto/ConnectionDto.cs b/MareSynchronosAPI/Dto/ConnectionDto.cs index ad19b99..04c818e 100644 --- a/MareSynchronosAPI/Dto/ConnectionDto.cs +++ b/MareSynchronosAPI/Dto/ConnectionDto.cs @@ -21,4 +21,5 @@ public record ServerInfo public int MaxGroupsCreatedByUser { get; set; } public int MaxGroupsJoinedByUser { get; set; } public Uri FileServerAddress { get; set; } = new Uri("http://nonemptyuri"); + public int MaxCharaData { get; set; } } \ No newline at end of file diff --git a/MareSynchronosAPI/SignalR/IMareHub.cs b/MareSynchronosAPI/SignalR/IMareHub.cs index d27df07..47fd699 100644 --- a/MareSynchronosAPI/SignalR/IMareHub.cs +++ b/MareSynchronosAPI/SignalR/IMareHub.cs @@ -1,6 +1,7 @@ using MareSynchronos.API.Data; using MareSynchronos.API.Data.Enum; using MareSynchronos.API.Dto; +using MareSynchronos.API.Dto.CharaData; using MareSynchronos.API.Dto.Chat; using MareSynchronos.API.Dto.Group; using MareSynchronos.API.Dto.User; @@ -118,4 +119,12 @@ public interface IMareHub Task UserSetPairPermissions(UserPermissionsDto userPermissions); Task UserSetProfile(UserProfileDto userDescription); + + Task CharaDataCreate(); + Task CharaDataUpdate(CharaDataUpdateDto updateDto); + Task CharaDataDelete(string id); + Task CharaDataGetMetainfo(string id); + Task CharaDataDownload(string id); + Task> CharaDataGetOwn(); + Task> CharaDataGetShared(); }