diff --git a/.editorconfig b/.editorconfig index 9cd745e..d344159 100644 --- a/.editorconfig +++ b/.editorconfig @@ -453,8 +453,8 @@ csharp_style_expression_bodied_properties = when_on_single_line:warning csharp_style_implicit_object_creation_when_type_is_apparent = false # 変数宣言をインライン化する csharp_style_inlined_variable_declaration = true:warning -# 名前空間宣言をブロックスコープにする -csharp_style_namespace_declarations = block_scoped:silent +# 名前空間宣言をファイルスコープにする +csharp_style_namespace_declarations = file_scoped:warning # パターンローカル変数を使用する csharp_style_pattern_local_over_anonymous_function = true:warning # nullチェックを伴うas演算子よりもパターンマッチングを使用する diff --git a/SharpChatwork.Test/src/UnitTest1.cs b/SharpChatwork.Test/src/UnitTest1.cs index eb9f734..ee7cf5d 100644 --- a/SharpChatwork.Test/src/UnitTest1.cs +++ b/SharpChatwork.Test/src/UnitTest1.cs @@ -1,12 +1,11 @@ using SharpChatwork.Query; -namespace SharpChatwork.Test +namespace SharpChatwork.Test; + +public class UnitTest1 { - public class UnitTest1 + [Fact] + public void Test1() { - [Fact] - public void Test1() - { - } } } diff --git a/SharpChatwork/src/Attribute/EnumAliasAttribute.cs b/SharpChatwork/src/Attribute/EnumAliasAttribute.cs index b4b3287..ff7a83e 100644 --- a/SharpChatwork/src/Attribute/EnumAliasAttribute.cs +++ b/SharpChatwork/src/Attribute/EnumAliasAttribute.cs @@ -1,33 +1,32 @@ using System; using System.Linq; -namespace SharpChatwork +namespace SharpChatwork; + +[AttributeUsage(AttributeTargets.Field)] +internal sealed class EnumAliasAttribute : Attribute { - [AttributeUsage(AttributeTargets.Field)] - internal sealed class EnumAliasAttribute : Attribute + public EnumAliasAttribute(string aliasName) { - public string AliasName { get; set; } - public EnumAliasAttribute(string aliasName) - { - this.AliasName = aliasName; - } + this.AliasName = aliasName; } - internal static class EnumAliasExtension + public string AliasName { get; set; } +} + +internal static class EnumAliasExtension +{ + public static string ToAliasOrDefault(this Enum value) { - public static string ToAliasOrDefault(this Enum value) - { - var i = value.GetType() - .GetField(value.ToString()) - .GetCustomAttributes(typeof(EnumAliasAttribute), false) - .Cast() - .FirstOrDefault(); + var i = value.GetType() + .GetField(value.ToString()) + .GetCustomAttributes(typeof(EnumAliasAttribute), false) + .Cast() + .FirstOrDefault(); - // use default name - if(i == null) - return Enum.GetName(value.GetType(), value); - // use alias - else - return i.AliasName; - } + // use default name + if(i == null) + return Enum.GetName(value.GetType(), value); + // use alias + return i.AliasName; } } diff --git a/SharpChatwork/src/Client/AccessToken/AccessTokenClient.cs b/SharpChatwork/src/Client/AccessToken/AccessTokenClient.cs index 5d90b4a..f6526ac 100644 --- a/SharpChatwork/src/Client/AccessToken/AccessTokenClient.cs +++ b/SharpChatwork/src/Client/AccessToken/AccessTokenClient.cs @@ -4,40 +4,38 @@ using System.Threading; using System.Threading.Tasks; -namespace SharpChatwork.AccessToken +namespace SharpChatwork.AccessToken; + +public class AccessTokenClient(string accessToken, HttpMessageInvoker messageInvoker = null) : ChatworkClient { - public class AccessTokenClient(string accessToken, HttpMessageInvoker messageInvoker = null) : ChatworkClient - { - public override string clientName => nameof(AccessTokenClient); - private readonly HttpMessageInvoker _messageInvoker = messageInvoker ?? new HttpClient(); + private readonly HttpMessageInvoker _messageInvoker = messageInvoker ?? new HttpClient(); + public override string clientName => nameof(AccessTokenClient); - private string accessToken { get; } = accessToken; + private string accessToken { get; } = accessToken; - private HttpRequestMessage GenerateRequestMessage(Uri uri, HttpMethod method) + private HttpRequestMessage GenerateRequestMessage(Uri uri, HttpMethod method) + { + var request = new HttpRequestMessage { - var request = new HttpRequestMessage - { - Method = method, - RequestUri = uri, - }; - request.Headers.Add("X-ChatWorkToken", this.accessToken); - return request; - } + Method = method, + RequestUri = uri, + }; + request.Headers.Add("X-ChatWorkToken", this.accessToken); + return request; + } - public override async ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default) + public override async ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default) + { + var requestMessage = this.GenerateRequestMessage(uri, method); + requestMessage.Content = content; + var client = this._messageInvoker; + var result = await client.SendAsync(requestMessage, cancellation); + var code = (int)result.StatusCode; + return new ResponseWrapper { - var requestMessage = this.GenerateRequestMessage(uri, method); - requestMessage.Content = content; - var client = this._messageInvoker; - var result = await client.SendAsync(requestMessage, cancellation); - var code = (int)result.StatusCode; - - return new ResponseWrapper - { - content = await result.Content.ReadAsStringAsync(), - headers = result.Headers.ToDictionary(m => m.Key, m => m.Value), - statusCode = code, - }; - } + content = await result.Content.ReadAsStringAsync(), + headers = result.Headers.ToDictionary(m => m.Key, m => m.Value), + statusCode = code, + }; } } diff --git a/SharpChatwork/src/Client/ChatworkQueryError.cs b/SharpChatwork/src/Client/ChatworkQueryError.cs index f304a8c..54dbd71 100644 --- a/SharpChatwork/src/Client/ChatworkQueryError.cs +++ b/SharpChatwork/src/Client/ChatworkQueryError.cs @@ -1,27 +1,26 @@ using System.Text.Json.Serialization; -namespace SharpChatwork +namespace SharpChatwork; + +internal sealed class ChatworkQueryError { - internal sealed class ChatworkQueryError - { - public int statusCode { get; set; } - public string jsonBody { get; set; } + public int statusCode { get; set; } + public string jsonBody { get; set; } - /// - /// 一定期間におけるAPIの最大利用回数 - /// - [JsonPropertyName("x-ratelimit-limit")] - public int rateLimitLimit { get; set; } - /// - /// 一定期間におけるAPIの残り利用回数 - /// - [JsonPropertyName("x-ratelimit-remaining")] - public int rateLimitRemaining { get; set; } - /// - /// API利用回数制限が次にリセットされる時間。 - /// Unix時間(秒)で示されます。 - /// - [JsonPropertyName("x-ratelimit-reset")] - public int rateLimitReset { get; set; } - } + /// + /// 一定期間におけるAPIの最大利用回数 + /// + [JsonPropertyName("x-ratelimit-limit")] + public int rateLimitLimit { get; set; } + /// + /// 一定期間におけるAPIの残り利用回数 + /// + [JsonPropertyName("x-ratelimit-remaining")] + public int rateLimitRemaining { get; set; } + /// + /// API利用回数制限が次にリセットされる時間。 + /// Unix時間(秒)で示されます。 + /// + [JsonPropertyName("x-ratelimit-reset")] + public int rateLimitReset { get; set; } } diff --git a/SharpChatwork/src/Client/EndPoints.cs b/SharpChatwork/src/Client/EndPoints.cs index b82e2ce..ecc663b 100644 --- a/SharpChatwork/src/Client/EndPoints.cs +++ b/SharpChatwork/src/Client/EndPoints.cs @@ -1,76 +1,75 @@ using System; -namespace SharpChatwork +namespace SharpChatwork; + +public class EndPoints { - public class EndPoints - { - public static readonly Uri Token = new Uri($@"https://oauth.chatwork.com/token"); - public static readonly Uri Oauth2 = new Uri($@"https://www.chatwork.com/packages/oauth2/login.php"); - public static readonly Uri Me = new Uri($@"https://api.chatwork.com/v2/me"); - public static readonly Uri MyStatus = new Uri($@"https://api.chatwork.com/v2/my/status"); - public static readonly Uri MyTasks = new Uri($@"https://api.chatwork.com/v2/my/tasks"); - public static readonly Uri Rooms = new Uri($@"https://api.chatwork.com/v2/Rooms"); - public static readonly Uri Contacts = new Uri($@"https://api.chatwork.com/v2/contacts"); - public static readonly Uri IncomingRequests = new Uri($@"https://api.chatwork.com/v2/incoming_requests"); + public static readonly Uri Token = new Uri(@"https://oauth.chatwork.com/token"); + public static readonly Uri Oauth2 = new Uri(@"https://www.chatwork.com/packages/oauth2/login.php"); + public static readonly Uri Me = new Uri(@"https://api.chatwork.com/v2/me"); + public static readonly Uri MyStatus = new Uri(@"https://api.chatwork.com/v2/my/status"); + public static readonly Uri MyTasks = new Uri(@"https://api.chatwork.com/v2/my/tasks"); + public static readonly Uri Rooms = new Uri(@"https://api.chatwork.com/v2/Rooms"); + public static readonly Uri Contacts = new Uri(@"https://api.chatwork.com/v2/contacts"); + public static readonly Uri IncomingRequests = new Uri(@"https://api.chatwork.com/v2/incoming_requests"); - public static Uri RoomOf(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}"); - } + public static Uri RoomOf(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}"); + } - public static Uri RoomMember(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/members"); - } + public static Uri RoomMember(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/members"); + } - public static Uri RoomMessages(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages"); - } + public static Uri RoomMessages(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages"); + } - public static Uri RoomMessagesOf(long roomId, long messageId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages/{messageId}"); - } + public static Uri RoomMessagesOf(long roomId, long messageId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages/{messageId}"); + } - public static Uri RoomMessagesRead(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages/read"); - } + public static Uri RoomMessagesRead(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages/read"); + } - public static Uri RoomMessagesUnread(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages/unread"); - } + public static Uri RoomMessagesUnread(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/messages/unread"); + } - public static Uri RoomTasks(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/tasks"); - } + public static Uri RoomTasks(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/tasks"); + } - public static Uri RoomTasksOf(long roomId, long taskId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/tasks/{taskId}"); - } + public static Uri RoomTasksOf(long roomId, long taskId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/tasks/{taskId}"); + } - public static Uri RoomFiles(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/files"); - } + public static Uri RoomFiles(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/files"); + } - public static Uri RoomFilesOf(long roomId, long fileId) - { - return new Uri($@"https://api.chatwork.com/v 2/rooms/{roomId}/files/{fileId}"); - } + public static Uri RoomFilesOf(long roomId, long fileId) + { + return new Uri($@"https://api.chatwork.com/v 2/rooms/{roomId}/files/{fileId}"); + } - public static Uri RoomLink(long roomId) - { - return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/link"); - } + public static Uri RoomLink(long roomId) + { + return new Uri($@"https://api.chatwork.com/v2/rooms/{roomId}/link"); + } - public static Uri IncomingRequestsOf(long requestId) - { - return new Uri($@"https://api.chatwork.com/v2/incoming_requests/{requestId}"); - } + public static Uri IncomingRequestsOf(long requestId) + { + return new Uri($@"https://api.chatwork.com/v2/incoming_requests/{requestId}"); } } diff --git a/SharpChatwork/src/Client/Exceptions/ChatworkClientException.cs b/SharpChatwork/src/Client/Exceptions/ChatworkClientException.cs index 6e5b760..11513de 100644 --- a/SharpChatwork/src/Client/Exceptions/ChatworkClientException.cs +++ b/SharpChatwork/src/Client/Exceptions/ChatworkClientException.cs @@ -1,10 +1,8 @@ using System; -using System.Runtime.Serialization; -namespace SharpChatwork.Client.Exceptions +namespace SharpChatwork.Client.Exceptions; + +public class ChatworkClientException(ResponseWrapper response) : Exception { - public class ChatworkClientException(ResponseWrapper response) : Exception - { - public readonly ResponseWrapper response = response; - } + public readonly ResponseWrapper response = response; } diff --git a/SharpChatwork/src/Client/IChatworkClient.cs b/SharpChatwork/src/Client/IChatworkClient.cs index 52e3e35..38f2c4f 100644 --- a/SharpChatwork/src/Client/IChatworkClient.cs +++ b/SharpChatwork/src/Client/IChatworkClient.cs @@ -7,59 +7,55 @@ using SharpChatwork.Client.Exceptions; using SharpChatwork.Query; -namespace SharpChatwork +namespace SharpChatwork; + +public interface IChatworkClient { - public interface IChatworkClient - { - IMeQuery me { get; } - IRoomQuery room { get; } - IContactQuery contact { get; } - IIncomingRequestQuery incomingRequest { get; } - } + IMeQuery me { get; } + IRoomQuery room { get; } + IContactQuery contact { get; } + IIncomingRequestQuery incomingRequest { get; } +} - public abstract class ChatworkClient : IChatworkClient +public abstract class ChatworkClient : IChatworkClient +{ + public ChatworkClient() { - public ChatworkClient() - { - this.me = new MeQuery(this); - this.contact = new ContactQuery(this); - this.room = new RoomQuery(this); - this.incomingRequest = new IncomingRequestQuery(this); - } - - public IMeQuery me { get; } - public IRoomQuery room { get; } - public IContactQuery contact { get; } - public IIncomingRequestQuery incomingRequest { get; } - - public abstract string clientName { get; } - public abstract ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default); - - public async ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default) - { - var wrapper = await this.QueryAsync(uri, method, content, cancellation); - if(wrapper.statusCode >= 300) - throw new ChatworkClientException(wrapper); + this.me = new MeQuery(this); + this.contact = new ContactQuery(this); + this.room = new RoomQuery(this); + this.incomingRequest = new IncomingRequestQuery(this); + } - return JsonSerializer.Deserialize(wrapper.content); - } + public abstract string clientName { get; } - public async ValueTask QueryAsync(Uri uri, HttpMethod method, IReadOnlyDictionary data, CancellationToken cancellation = default) - { - HttpContent content = null; - if(data.Count != 0) - content = new FormUrlEncodedContent(data); + public IMeQuery me { get; } + public IRoomQuery room { get; } + public IContactQuery contact { get; } + public IIncomingRequestQuery incomingRequest { get; } + public abstract ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default); - return await this.QueryAsync(uri, method, content, cancellation); - } + public async ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default) + { + var wrapper = await this.QueryAsync(uri, method, content, cancellation); + if(wrapper.statusCode >= 300) + throw new ChatworkClientException(wrapper); + return JsonSerializer.Deserialize(wrapper.content); + } - public async ValueTask QueryAsync(Uri uri, HttpMethod method, IReadOnlyDictionary data, CancellationToken cancellation = default) - { - var wrapper = await this.QueryAsync(uri, method, data, cancellation); - if(wrapper.statusCode >= 300) - throw new ChatworkClientException(wrapper); + public async ValueTask QueryAsync(Uri uri, HttpMethod method, IReadOnlyDictionary data, CancellationToken cancellation = default) + { + HttpContent content = null; + if(data.Count != 0) + content = new FormUrlEncodedContent(data); + return await this.QueryAsync(uri, method, content, cancellation); + } - return JsonSerializer.Deserialize(wrapper.content); - } + public async ValueTask QueryAsync(Uri uri, HttpMethod method, IReadOnlyDictionary data, CancellationToken cancellation = default) + { + var wrapper = await this.QueryAsync(uri, method, data, cancellation); + if(wrapper.statusCode >= 300) + throw new ChatworkClientException(wrapper); + return JsonSerializer.Deserialize(wrapper.content); } } diff --git a/SharpChatwork/src/Client/IQuery/IContactQuery.cs b/SharpChatwork/src/Client/IQuery/IContactQuery.cs index 9cb6ef7..0f625e4 100644 --- a/SharpChatwork/src/Client/IQuery/IContactQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IContactQuery.cs @@ -3,10 +3,9 @@ using System.Threading; using System.Threading.Tasks; -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +public interface IContactQuery { - public interface IContactQuery - { - ValueTask> GetAllAsync(CancellationToken token = default); - } + ValueTask> GetAllAsync(CancellationToken token = default); } diff --git a/SharpChatwork/src/Client/IQuery/IIncomingRequestQuery.cs b/SharpChatwork/src/Client/IQuery/IIncomingRequestQuery.cs index 5bf59cc..7d8bfbd 100644 --- a/SharpChatwork/src/Client/IQuery/IIncomingRequestQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IIncomingRequestQuery.cs @@ -3,12 +3,11 @@ using System.Threading; using System.Threading.Tasks; -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +public interface IIncomingRequestQuery { - public interface IIncomingRequestQuery - { - ValueTask> GetAllAsync(CancellationToken token = default); - ValueTask AcceptAsync(long requestId, CancellationToken token = default); - ValueTask CancelAsync(long requestId, CancellationToken token = default); - } + ValueTask> GetAllAsync(CancellationToken token = default); + ValueTask AcceptAsync(long requestId, CancellationToken token = default); + ValueTask CancelAsync(long requestId, CancellationToken token = default); } diff --git a/SharpChatwork/src/Client/IQuery/IMeQuery.cs b/SharpChatwork/src/Client/IQuery/IMeQuery.cs index 1c5bcf5..efdc569 100644 --- a/SharpChatwork/src/Client/IQuery/IMeQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IMeQuery.cs @@ -3,12 +3,11 @@ using System.Threading; using System.Threading.Tasks; -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +public interface IMeQuery { - public interface IMeQuery - { - public ValueTask GetMyStatusAsync(CancellationToken cancellation = default); - public ValueTask> GetMyTasksAsync(CancellationToken cancellation = default); - public ValueTask GetUserAsync(CancellationToken cancellation = default); - } + public ValueTask GetMyStatusAsync(CancellationToken cancellation = default); + public ValueTask> GetMyTasksAsync(CancellationToken cancellation = default); + public ValueTask GetUserAsync(CancellationToken cancellation = default); } diff --git a/SharpChatwork/src/Client/IQuery/IRoomFileQuery.cs b/SharpChatwork/src/Client/IQuery/IRoomFileQuery.cs index d2f1029..e1a6a73 100644 --- a/SharpChatwork/src/Client/IQuery/IRoomFileQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IRoomFileQuery.cs @@ -1,16 +1,15 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +public interface IRoomFileQuery { - public interface IRoomFileQuery - { - public ValueTask> GetAllAsync(long roomId, long accountId, CancellationToken cancellation = default); - public ValueTask UploadAsync(long roomId, string filePath, string message, CancellationToken cancellation = default); - public ValueTask UploadAsync(long roomId, Stream stream, string filePath, string message, CancellationToken cancellation = default); - public ValueTask GetAsync(long roomId, long fileId, bool createDownloadLink, CancellationToken cancellation = default); - } + public ValueTask> GetAllAsync(long roomId, long accountId, CancellationToken cancellation = default); + public ValueTask UploadAsync(long roomId, string filePath, string message, CancellationToken cancellation = default); + public ValueTask UploadAsync(long roomId, Stream stream, string filePath, string message, CancellationToken cancellation = default); + public ValueTask GetAsync(long roomId, long fileId, bool createDownloadLink, CancellationToken cancellation = default); } diff --git a/SharpChatwork/src/Client/IQuery/IRoomInviteQuery.cs b/SharpChatwork/src/Client/IQuery/IRoomInviteQuery.cs index 7040438..bfa7777 100644 --- a/SharpChatwork/src/Client/IQuery/IRoomInviteQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IRoomInviteQuery.cs @@ -1,14 +1,13 @@ -using SharpChatwork.Query.Types; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +public interface IRoomInviteQuery { - public interface IRoomInviteQuery - { - public ValueTask GetAsync(long roomId, CancellationToken cancellation = default); - public ValueTask CreateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken cancellation = default); - public ValueTask UpdateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken cancellation = default); - public ValueTask DestroyAsync(long roomId, CancellationToken cancellation = default); - } + public ValueTask GetAsync(long roomId, CancellationToken cancellation = default); + public ValueTask CreateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken cancellation = default); + public ValueTask UpdateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken cancellation = default); + public ValueTask DestroyAsync(long roomId, CancellationToken cancellation = default); } diff --git a/SharpChatwork/src/Client/IQuery/IRoomMemberQuery.cs b/SharpChatwork/src/Client/IQuery/IRoomMemberQuery.cs index baca70c..9423347 100644 --- a/SharpChatwork/src/Client/IQuery/IRoomMemberQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IRoomMemberQuery.cs @@ -1,13 +1,14 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +public interface IRoomMemberQuery { - public interface IRoomMemberQuery - { - public ValueTask> GetAllAsync(long roomId, CancellationToken cancellation = default); - public ValueTask UpdateAsync(long roomId, IEnumerable adminsMembers, IEnumerable normalMembers, IEnumerable readonlyMembers, CancellationToken cancellation = default); - } + public ValueTask> GetAllAsync(long roomId, CancellationToken cancellation = default); + public ValueTask UpdateAsync( + long roomId, IEnumerable adminsMembers, IEnumerable normalMembers, IEnumerable readonlyMembers, CancellationToken cancellation = default + ); } diff --git a/SharpChatwork/src/Client/IQuery/IRoomMessageQuery.cs b/SharpChatwork/src/Client/IQuery/IRoomMessageQuery.cs index abc29fa..7356520 100644 --- a/SharpChatwork/src/Client/IQuery/IRoomMessageQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IRoomMessageQuery.cs @@ -1,21 +1,20 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +public interface IRoomMessageQuery { - public interface IRoomMessageQuery - { - public ValueTask SendAsync(long roomId, string message, bool isSelfUnread, CancellationToken cancellation = default); + public ValueTask SendAsync(long roomId, string message, bool isSelfUnread, CancellationToken cancellation = default); - public ValueTask ReadAsync(long roomId, long messageId, CancellationToken cancellation = default); - public ValueTask UnReadAsync(long roomId, long messageId, CancellationToken cancellation = default); + public ValueTask ReadAsync(long roomId, long messageId, CancellationToken cancellation = default); + public ValueTask UnReadAsync(long roomId, long messageId, CancellationToken cancellation = default); - public ValueTask> GetAllAsync(long roomId, bool isForceMode = false, CancellationToken cancellation = default); - public ValueTask GetAsync(long roomId, long messageId, CancellationToken cancellation = default); + public ValueTask> GetAllAsync(long roomId, bool isForceMode = false, CancellationToken cancellation = default); + public ValueTask GetAsync(long roomId, long messageId, CancellationToken cancellation = default); - public ValueTask UpdateAsync(long roomId, long messageId, string message, CancellationToken cancellation = default); - public ValueTask RemoveAsync(long roomId, long messageId, CancellationToken cancellation = default); - } + public ValueTask UpdateAsync(long roomId, long messageId, string message, CancellationToken cancellation = default); + public ValueTask RemoveAsync(long roomId, long messageId, CancellationToken cancellation = default); } diff --git a/SharpChatwork/src/Client/IQuery/IRoomQuery.cs b/SharpChatwork/src/Client/IQuery/IRoomQuery.cs index dfe457d..d5fe917 100644 --- a/SharpChatwork/src/Client/IQuery/IRoomQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IRoomQuery.cs @@ -1,23 +1,22 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +public interface IRoomQuery { - public interface IRoomQuery - { - public ValueTask> GetAllAsync(CancellationToken cancellation = default); - public ValueTask CreateAsync(CancellationToken cancellation = default); - public ValueTask GetAsync(long roomId, CancellationToken cancellation = default); - public ValueTask UpdateAsync(long roomId, string roomName, string description, RoomIconPreset preset, CancellationToken cancellation = default); - public ValueTask LeaveAsync(long roomId, CancellationToken cancellation = default); - public ValueTask DeleteAsync(long roomId, CancellationToken cancellation = default); - public IRoomMessageQuery message { get; } - public IRoomMemberQuery member { get; } - public IRoomInviteQuery invite { get; } - public IRoomFileQuery file { get; } - public IRoomTaskQuery task { get; } - } + public IRoomMessageQuery message { get; } + public IRoomMemberQuery member { get; } + public IRoomInviteQuery invite { get; } + public IRoomFileQuery file { get; } + public IRoomTaskQuery task { get; } + public ValueTask> GetAllAsync(CancellationToken cancellation = default); + public ValueTask CreateAsync(CancellationToken cancellation = default); + public ValueTask GetAsync(long roomId, CancellationToken cancellation = default); + public ValueTask UpdateAsync(long roomId, string roomName, string description, RoomIconPreset preset, CancellationToken cancellation = default); + public ValueTask LeaveAsync(long roomId, CancellationToken cancellation = default); + public ValueTask DeleteAsync(long roomId, CancellationToken cancellation = default); } diff --git a/SharpChatwork/src/Client/IQuery/IRoomTaskQuery.cs b/SharpChatwork/src/Client/IQuery/IRoomTaskQuery.cs index 79bd53d..9949290 100644 --- a/SharpChatwork/src/Client/IQuery/IRoomTaskQuery.cs +++ b/SharpChatwork/src/Client/IQuery/IRoomTaskQuery.cs @@ -1,15 +1,14 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +public interface IRoomTaskQuery { - public interface IRoomTaskQuery - { - public ValueTask> GetAllAsync(long roomId, long accountId, long autherId, bool isDone = false, CancellationToken cancellation = default); - public ValueTask CreateAsync(long roomId, string taskText, long limit, CancellationToken cancellation = default); - public ValueTask GetAsync(long roomId, long taskId, CancellationToken cancellation = default); - public ValueTask UpdateAsync(long roomId, long taskId, TaskStateType state, CancellationToken cancellation = default); - } + public ValueTask> GetAllAsync(long roomId, long accountId, long autherId, bool isDone = false, CancellationToken cancellation = default); + public ValueTask CreateAsync(long roomId, string taskText, long limit, CancellationToken cancellation = default); + public ValueTask GetAsync(long roomId, long taskId, CancellationToken cancellation = default); + public ValueTask UpdateAsync(long roomId, long taskId, TaskStateType state, CancellationToken cancellation = default); } diff --git a/SharpChatwork/src/Client/OAuth2/OAuth2Client.cs b/SharpChatwork/src/Client/OAuth2/OAuth2Client.cs index a164cb8..774aa0f 100644 --- a/SharpChatwork/src/Client/OAuth2/OAuth2Client.cs +++ b/SharpChatwork/src/Client/OAuth2/OAuth2Client.cs @@ -11,117 +11,116 @@ using System.Threading; using System.Threading.Tasks; -namespace SharpChatwork.OAuth2 -{ - public class OAuth2Client(string clientKey, string secretKey, HttpMessageInvoker invoker = null) : ChatworkClient - { - public override string clientName => nameof(OAuth2Client); +namespace SharpChatwork.OAuth2; - private readonly HttpMessageInvoker _messageInvoker = invoker ?? new HttpClient(); - private string clientKey { get; } = clientKey; - private string secretKey { get; } = secretKey; - private string oauth2Code { get; set; } = string.Empty; - private string accessToken { get; set; } = string.Empty; - private string refleshToken { get; set; } = string.Empty; - private long tokenExpired { get; set; } = 0; +public class OAuth2Client(string clientKey, string secretKey, HttpMessageInvoker invoker = null) : ChatworkClient +{ + public override string clientName => nameof(OAuth2Client); - private string scope { get; set; } = string.Empty; - private string redirectUri { get; set; } = string.Empty; - private DateTime tokenQueryTime { get; set; } = DateTime.Now; + private readonly HttpMessageInvoker _messageInvoker = invoker ?? new HttpClient(); + private string clientKey { get; } = clientKey; + private string secretKey { get; } = secretKey; + private string oauth2Code { get; set; } = string.Empty; + private string accessToken { get; set; } = string.Empty; + private string refleshToken { get; set; } = string.Empty; + private long tokenExpired { get; set; } = 0; - private HttpRequestMessage GenerateRequestMessage(Uri uri, HttpMethod method) - { - var request = new HttpRequestMessage - { - Method = method, - RequestUri = uri, - }; - request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", this.accessToken); - return request; - } + private string scope { get; set; } = string.Empty; + private string redirectUri { get; set; } = string.Empty; + private DateTime tokenQueryTime { get; set; } = DateTime.Now; - public override async ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default) + private HttpRequestMessage GenerateRequestMessage(Uri uri, HttpMethod method) + { + var request = new HttpRequestMessage { - var requestMessage = this.GenerateRequestMessage(uri, method); - requestMessage.Content = content; - var client = this._messageInvoker; - var result = await client.SendAsync(requestMessage, cancellation); - var code = (int)result.StatusCode; + Method = method, + RequestUri = uri, + }; + request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", this.accessToken); + return request; + } - return new ResponseWrapper - { - content = await result.Content.ReadAsStringAsync(), - headers = result.Headers.ToDictionary(m => m.Key, m => m.Value), - statusCode = code, - }; - } + public override async ValueTask QueryAsync(Uri uri, HttpMethod method, HttpContent content, CancellationToken cancellation = default) + { + var requestMessage = this.GenerateRequestMessage(uri, method); + requestMessage.Content = content; + var client = this._messageInvoker; + var result = await client.SendAsync(requestMessage, cancellation); + var code = (int)result.StatusCode; - public OAuth2ConcentQueryResult Authorization(OAuth2ConcentQuery query, string codeVerifer = "") + return new ResponseWrapper { - query.client_id = this.clientKey; - this.scope = query.scope; - this.redirectUri = query.redirect_uri; - // TODO Only windows - var concentUrlArg = EndPoints.Oauth2.OriginalString + $"{UrlArgEncoder.ToURLArg(query)}"; - Console.WriteLine("Please input code of redirect url code="); - Process.Start( - new ProcessStartInfo("cmd", $"/c start {concentUrlArg}") - { - CreateNoWindow = true, - } - ); - this.oauth2Code = Console.ReadLine(); + content = await result.Content.ReadAsStringAsync(), + headers = result.Headers.ToDictionary(m => m.Key, m => m.Value), + statusCode = code, + }; + } - if(string.IsNullOrEmpty(this.oauth2Code)) + public OAuth2ConcentQueryResult Authorization(OAuth2ConcentQuery query, string codeVerifer = "") + { + query.client_id = this.clientKey; + this.scope = query.scope; + this.redirectUri = query.redirect_uri; + // TODO Only windows + var concentUrlArg = EndPoints.Oauth2.OriginalString + $"{UrlArgEncoder.ToURLArg(query)}"; + Console.WriteLine("Please input code of redirect url code="); + Process.Start( + new ProcessStartInfo("cmd", $"/c start {concentUrlArg}") { - return new OAuth2ConcentQueryResult - { - error = "oauth_code_error", - //error_description = "inputed oauth_code is null or empty", - }; + CreateNoWindow = true, } - query.client_id = this.clientKey; + ); + this.oauth2Code = Console.ReadLine(); + + if(string.IsNullOrEmpty(this.oauth2Code)) + { return new OAuth2ConcentQueryResult { - code = this.oauth2Code, + error = "oauth_code_error", + //error_description = "inputed oauth_code is null or empty", }; } + query.client_id = this.clientKey; + return new OAuth2ConcentQueryResult + { + code = this.oauth2Code, + }; + } - public async Task UpdateToken(OAuth2TokenQuery.GrantType grantType = OAuth2TokenQuery.GrantType.RefreshToken, string codeVerifer = "", CancellationToken cancellation = default) + public async Task UpdateToken(OAuth2TokenQuery.GrantType grantType = OAuth2TokenQuery.GrantType.RefreshToken, string codeVerifer = "", CancellationToken cancellation = default) + { + var tokenQuery = new OAuth2TokenQuery(grantType) { - var tokenQuery = new OAuth2TokenQuery(grantType) - { - scope = this.scope, - redirect_uri = this.redirectUri, - }; - var request = new HttpRequestMessage - { - Method = HttpMethod.Post, - RequestUri = EndPoints.Token, - }; + scope = this.scope, + redirect_uri = this.redirectUri, + }; + var request = new HttpRequestMessage + { + Method = HttpMethod.Post, + RequestUri = EndPoints.Token, + }; - if(grantType == OAuth2TokenQuery.GrantType.AuthroizationCode) - tokenQuery.code = this.oauth2Code; - else if(grantType == OAuth2TokenQuery.GrantType.RefreshToken) - tokenQuery.refresh_token = this.refleshToken; + if(grantType == OAuth2TokenQuery.GrantType.AuthroizationCode) + tokenQuery.code = this.oauth2Code; + else if(grantType == OAuth2TokenQuery.GrantType.RefreshToken) + tokenQuery.refresh_token = this.refleshToken; - request.Headers.Authorization = new AuthenticationHeaderValue( - "Basic", - Convert.ToBase64String(Encoding.ASCII.GetBytes($"{this.clientKey}:{this.secretKey}")) - ); - request.Content = new FormUrlEncodedContent(UrlArgEncoder.ToDictionary(tokenQuery)); + request.Headers.Authorization = new AuthenticationHeaderValue( + "Basic", + Convert.ToBase64String(Encoding.ASCII.GetBytes($"{this.clientKey}:{this.secretKey}")) + ); + request.Content = new FormUrlEncodedContent(UrlArgEncoder.ToDictionary(tokenQuery)); - var client = this._messageInvoker; - var response = await client.SendAsync(request, cancellation); - var stream = await response.Content.ReadAsStreamAsync(); + var client = this._messageInvoker; + var response = await client.SendAsync(request, cancellation); + var stream = await response.Content.ReadAsStreamAsync(); - using var reader = new StreamReader(stream); - var result = JsonSerializer.Deserialize(reader.ReadToEnd()); - this.tokenExpired = result.expires_in; - this.tokenQueryTime = DateTime.Now; - this.refleshToken = result.refresh_token; - this.accessToken = result.access_token; - return result; - } + using var reader = new StreamReader(stream); + var result = JsonSerializer.Deserialize(reader.ReadToEnd()); + this.tokenExpired = result.expires_in; + this.tokenQueryTime = DateTime.Now; + this.refleshToken = result.refresh_token; + this.accessToken = result.access_token; + return result; } } diff --git a/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQuery.cs b/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQuery.cs index 5406c4b..b2c4c6b 100644 --- a/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQuery.cs +++ b/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQuery.cs @@ -1,20 +1,19 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.OAuth2 +namespace SharpChatwork.OAuth2; + +public class OAuth2ConcentQuery { - public class OAuth2ConcentQuery - { - public string response_type => "code"; - public string client_id { get; set; } = string.Empty; - public string redirect_uri { get; set; } = string.Empty; - public string scope { get; set; } = string.Empty; - public string state { get; set; } = string.Empty; - public string code_challenge { get; set; } = string.Empty; - public string code_challenge_method { get; set; } = string.Empty; + public string response_type => "code"; + public string client_id { get; set; } = string.Empty; + public string redirect_uri { get; set; } = string.Empty; + public string scope { get; set; } = string.Empty; + public string state { get; set; } = string.Empty; + public string code_challenge { get; set; } = string.Empty; + public string code_challenge_method { get; set; } = string.Empty; - /// - /// auto set to from input bit field flag - /// - public ScopeType scopeType { set => this.scope = value.ToUrlArg(); } - } + /// + /// auto set to from input bit field flag + /// + public ScopeType scopeType { set => this.scope = value.ToUrlArg(); } } diff --git a/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQueryResult.cs b/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQueryResult.cs index 73fa263..24db3a8 100644 --- a/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQueryResult.cs +++ b/SharpChatwork/src/Client/OAuth2/OAuth2ConcentQueryResult.cs @@ -1,11 +1,10 @@ -namespace SharpChatwork.OAuth2 +namespace SharpChatwork.OAuth2; + +public class OAuth2ConcentQueryResult { - public class OAuth2ConcentQueryResult - { - public string code { get; set; } = string.Empty; - public string state { get; set; } = string.Empty; - public string error { get; set; } = string.Empty; + public string code { get; set; } = string.Empty; + public string state { get; set; } = string.Empty; + public string error { get; set; } = string.Empty; - public bool isError => string.IsNullOrEmpty(this.error); - } + public bool isError => string.IsNullOrEmpty(this.error); } diff --git a/SharpChatwork/src/Client/OAuth2/OAuth2TokenQuery.cs b/SharpChatwork/src/Client/OAuth2/OAuth2TokenQuery.cs index 60fbdbc..9fa3e9d 100644 --- a/SharpChatwork/src/Client/OAuth2/OAuth2TokenQuery.cs +++ b/SharpChatwork/src/Client/OAuth2/OAuth2TokenQuery.cs @@ -1,34 +1,33 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.OAuth2 +namespace SharpChatwork.OAuth2; + +public class OAuth2TokenQuery { - public class OAuth2TokenQuery + public enum GrantType { - public enum GrantType - { - [EnumAlias("authorization_code")] - AuthroizationCode, - [EnumAlias("refresh_token")] - RefreshToken, - } + [EnumAlias("authorization_code")] + AuthroizationCode, + [EnumAlias("refresh_token")] + RefreshToken, + } - public string grant_type { get; set; } = string.Empty; - public string code { get; set; } = string.Empty; - public string redirect_uri { get; set; } = string.Empty; - public string code_verifier { get; set; } = string.Empty; - public string refresh_token { get; set; } = string.Empty; - public string scope { get; set; } = string.Empty; + public string grant_type { get; set; } = string.Empty; + public string code { get; set; } = string.Empty; + public string redirect_uri { get; set; } = string.Empty; + public string code_verifier { get; set; } = string.Empty; + public string refresh_token { get; set; } = string.Empty; + public string scope { get; set; } = string.Empty; - private ScopeType _scopeType; - public ScopeType scopeType - { - get => this._scopeType; - set { this._scopeType = value; this.scope = this._scopeType.ToUrlArg(); } - } + private ScopeType _scopeType; + public ScopeType scopeType + { + get => this._scopeType; + set { this._scopeType = value; this.scope = this._scopeType.ToUrlArg(); } + } - public OAuth2TokenQuery(GrantType type) - { - this.grant_type = type.ToAliasOrDefault(); - } + public OAuth2TokenQuery(GrantType type) + { + this.grant_type = type.ToAliasOrDefault(); } } diff --git a/SharpChatwork/src/Client/OAuth2/OAuth2TokenQueryResult.cs b/SharpChatwork/src/Client/OAuth2/OAuth2TokenQueryResult.cs index 360f8bd..0c1cb5e 100644 --- a/SharpChatwork/src/Client/OAuth2/OAuth2TokenQueryResult.cs +++ b/SharpChatwork/src/Client/OAuth2/OAuth2TokenQueryResult.cs @@ -1,21 +1,20 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.OAuth2 +namespace SharpChatwork.OAuth2; + +public class OAuth2TokenQueryResult { - public class OAuth2TokenQueryResult - { - public string access_token { get; set; } - public string refresh_token { get; set; } - public string token_type { get; set; } - public long expires_in { get; set; } - public string scope { get; set; } - // TODO ScopeType FromString - // public ScopeType scope_type => + public string access_token { get; set; } + public string refresh_token { get; set; } + public string token_type { get; set; } + public long expires_in { get; set; } + public string scope { get; set; } + // TODO ScopeType FromString + // public ScopeType scope_type => - public string error { get; set; } - public string error_description { get; set; } - public string error_uri { get; set; } + public string error { get; set; } + public string error_description { get; set; } + public string error_uri { get; set; } - public bool isError => !string.IsNullOrEmpty(this.error); - } + public bool isError => !string.IsNullOrEmpty(this.error); } diff --git a/SharpChatwork/src/Client/OAuth2/Scope.cs b/SharpChatwork/src/Client/OAuth2/Scope.cs index fc8e976..4acd14f 100644 --- a/SharpChatwork/src/Client/OAuth2/Scope.cs +++ b/SharpChatwork/src/Client/OAuth2/Scope.cs @@ -3,144 +3,143 @@ using System.ComponentModel; using System.Linq; -namespace SharpChatwork.OAuth2 +namespace SharpChatwork.OAuth2; + +/// +/// API access scopes +/// implement from here http://developer.chatwork.com/ja/oauth.html#secAppendix +/// +public enum ScopeType : long { - /// - /// API access scopes - /// implement from here http://developer.chatwork.com/ja/oauth.html#secAppendix - /// - public enum ScopeType : long - { - [Description("永続的なAPIアクセスの許可")] - [EnumAlias("offline_access")] - OfflineAccess = 0x100000000, + [Description("永続的なAPIアクセスの許可")] + [EnumAlias("offline_access")] + OfflineAccess = 0x100000000, - [Description("自分のアカウントに紐づく情報の取得")] - [EnumAlias("users.all:read")] - UsersAllR = UsersProfileMeR | UsersTasksMeR | UsersStatusMeR, + [Description("自分のアカウントに紐づく情報の取得")] + [EnumAlias("users.all:read")] + UsersAllR = UsersProfileMeR | UsersTasksMeR | UsersStatusMeR, - [Description("自分のプロフィール情報の取得")] - [EnumAlias("users.profile.me:read")] - UsersProfileMeR = 0x0400_0000, + [Description("自分のプロフィール情報の取得")] + [EnumAlias("users.profile.me:read")] + UsersProfileMeR = 0x0400_0000, - [Description("自分の未既読数の取得")] - [EnumAlias("users.status.me:read")] - UsersStatusMeR = 0x0200_0000, + [Description("自分の未既読数の取得")] + [EnumAlias("users.status.me:read")] + UsersStatusMeR = 0x0200_0000, - [Description("自分のタスク一覧の取得")] - [EnumAlias("users.tasks.me:read")] - UsersTasksMeR = 0x0100_0000, + [Description("自分のタスク一覧の取得")] + [EnumAlias("users.tasks.me:read")] + UsersTasksMeR = 0x0100_0000, - [Description("チャットルームに紐づくメッセージ・タスク・ファイル・概要・メンバー情報の操作/取得")] - [EnumAlias("rooms.all:read_write")] - RoomsAllRW = RoomsAllR | RoomsAllW, + [Description("チャットルームに紐づくメッセージ・タスク・ファイル・概要・メンバー情報の操作/取得")] + [EnumAlias("rooms.all:read_write")] + RoomsAllRW = RoomsAllR | RoomsAllW, - [Description("チャットルームに紐づくメッセージ・タスク・ファイル・概要・メンバー情報の取得")] - [EnumAlias("rooms.all:read")] - RoomsAllR = 0x00F0_0000, + [Description("チャットルームに紐づくメッセージ・タスク・ファイル・概要・メンバー情報の取得")] + [EnumAlias("rooms.all:read")] + RoomsAllR = 0x00F0_0000, - [Description("チャットルームに紐づくメッセージ・タスク・ファイル・概要・メンバー情報の操作")] - [EnumAlias("rooms.all:write")] - RoomsAllW = 0x0000_00F0, + [Description("チャットルームに紐づくメッセージ・タスク・ファイル・概要・メンバー情報の操作")] + [EnumAlias("rooms.all:write")] + RoomsAllW = 0x0000_00F0, - [Description("チャットルームの作成と参加しているチャットルームの削除")] - [EnumAlias("rooms:write")] - RoomsW = 0x0000_0080, + [Description("チャットルームの作成と参加しているチャットルームの削除")] + [EnumAlias("rooms:write")] + RoomsW = 0x0000_0080, - [Description("自分が参加しているチャットルーム一覧の取得")] - [EnumAlias("rooms.info:read")] - RoomsInfoR = 0x0040_0000, + [Description("自分が参加しているチャットルーム一覧の取得")] + [EnumAlias("rooms.info:read")] + RoomsInfoR = 0x0040_0000, - [Description("自分が参加しているチャットルーム一覧の更新")] - [EnumAlias("rooms:info:write")] - RoomsInfoW = 0x0000_0040, + [Description("自分が参加しているチャットルーム一覧の更新")] + [EnumAlias("rooms:info:write")] + RoomsInfoW = 0x0000_0040, - [Description("自分が参加しているチャットルームのメンバーの取得")] - [EnumAlias("rooms.members:read")] - RoomsMembersR = 0x0020_0000, + [Description("自分が参加しているチャットルームのメンバーの取得")] + [EnumAlias("rooms.members:read")] + RoomsMembersR = 0x0020_0000, - [Description("自分が参加しているチャットルームのメンバーの追加/削除/権限変更")] - [EnumAlias("rooms.members:write")] - RoomsMembersW = 0x0000_0020, + [Description("自分が参加しているチャットルームのメンバーの追加/削除/権限変更")] + [EnumAlias("rooms.members:write")] + RoomsMembersW = 0x0000_0020, - [Description("自分か参加しているチャットルームのメッセージ取得")] - [EnumAlias("rooms.messages:read")] - RoomsMessagesR = 0x0010_0000, + [Description("自分か参加しているチャットルームのメッセージ取得")] + [EnumAlias("rooms.messages:read")] + RoomsMessagesR = 0x0010_0000, - [Description("自分が参加しているチャットルームへのメッセージ投稿")] - [EnumAlias("rooms.messages:write")] - RoomsMessagesW = 0x0000_0010, + [Description("自分が参加しているチャットルームへのメッセージ投稿")] + [EnumAlias("rooms.messages:write")] + RoomsMessagesW = 0x0000_0010, - [Description("自分が参加しているチャットルームのタスク取得")] - [EnumAlias("rooms.tasks:read")] - RoomsTasksR = 0x0004_0000, + [Description("自分が参加しているチャットルームのタスク取得")] + [EnumAlias("rooms.tasks:read")] + RoomsTasksR = 0x0004_0000, - [Description("自分が参加しているチャットルームでタスクを作成")] - [EnumAlias("rooms.tasks:write")] - RoomsTasksW = 0x0000_0004, + [Description("自分が参加しているチャットルームでタスクを作成")] + [EnumAlias("rooms.tasks:write")] + RoomsTasksW = 0x0000_0004, - [Description("自分が参加しているチャットルームにアップロードされているファイル情報を取得")] - [EnumAlias("rooms.files:read")] - RoomsFilesR = 0x0002_0000, + [Description("自分が参加しているチャットルームにアップロードされているファイル情報を取得")] + [EnumAlias("rooms.files:read")] + RoomsFilesR = 0x0002_0000, - [Description("自分が参加しているチャットルームへのファイルのアップロード")] - [EnumAlias("rooms.files:write")] - RoomsFilesW = 0x0000_0002, + [Description("自分が参加しているチャットルームへのファイルのアップロード")] + [EnumAlias("rooms.files:write")] + RoomsFilesW = 0x0000_0002, - [Description("自分のコンタクト、及びコンタクト承認依頼情報の取得/操作")] - [EnumAlias("contacts.all:read_write")] - ContactsAllRW = ContactsAllR | ContactsAllW, + [Description("自分のコンタクト、及びコンタクト承認依頼情報の取得/操作")] + [EnumAlias("contacts.all:read_write")] + ContactsAllRW = ContactsAllR | ContactsAllW, - [Description("自分のコンタクト、及びコンタクト承認依頼情報の取得")] - [EnumAlias("contacts.all:read")] - ContactsAllR = 0x0001_0000, + [Description("自分のコンタクト、及びコンタクト承認依頼情報の取得")] + [EnumAlias("contacts.all:read")] + ContactsAllR = 0x0001_0000, - [Description("自分あてのコンタクト承認依頼情報を操作")] - [EnumAlias("contacts.all:write")] - ContactsAllW = 0x0000_0001, - } + [Description("自分あてのコンタクト承認依頼情報を操作")] + [EnumAlias("contacts.all:write")] + ContactsAllW = 0x0000_0001, +} - internal static class ScopeTypeExtension +internal static class ScopeTypeExtension +{ + public static string ToUrlArg(this ScopeType type) { - public static string ToUrlArg(this ScopeType type) + // extract name value pair + var enumValues = Enum.GetValues(typeof(ScopeType)).OfType(); + var enumNames = enumValues.Select(m => FindAttribute(m)); + var input = (long)type; + var enumNameValues = enumNames + .Zip(enumValues, (m, n) => new { m.AliasName, Value = n }) + .Where(m => ((long)m.Value & input) != 0) + .Reverse(); + + List> resultScopes = new List>(); + + // escape _all child + foreach(var item in enumNameValues) { - // extract name value pair - var enumValues = Enum.GetValues(typeof(ScopeType)).OfType(); - var enumNames = enumValues.Select(m => FindAttribute(m)); - var input = (long)type; - var enumNameValues = enumNames - .Zip(enumValues, (m, n) => new { m.AliasName, Value = n }) - .Where(m => ((long)m.Value & input) != 0) - .Reverse(); - - List> resultScopes = new List>(); - - // escape _all child - foreach(var item in enumNameValues) + if(resultScopes.Where(m => (m.Item2 & (long)item.Value) != 0).Any()) { - if(resultScopes.Where(m => (m.Item2 & (long)item.Value) != 0).Any()) - { - continue; - } - resultScopes.Add(new Tuple(item.AliasName, (long)item.Value)); + continue; } - - // ascii 'SP' - return string.Join("%20", resultScopes.Select(m => m.Item1)); + resultScopes.Add(new Tuple(item.AliasName, (long)item.Value)); } - private static AttributeT FindAttribute(ScopeType type) where AttributeT : Attribute - { - var fieldInfo = typeof(ScopeType).GetField(type.ToString()); - var attributes = fieldInfo - .GetCustomAttributes(typeof(AttributeT), false) - .Cast(); - if(attributes == null) - return null; - if(!attributes.Any()) - return null; + // ascii 'SP' + return string.Join("%20", resultScopes.Select(m => m.Item1)); + } + private static AttributeT FindAttribute(ScopeType type) where AttributeT : Attribute + { + var fieldInfo = typeof(ScopeType).GetField(type.ToString()); + var attributes = fieldInfo + .GetCustomAttributes(typeof(AttributeT), false) + .Cast(); - return attributes.First(); - } + if(attributes == null) + return null; + if(!attributes.Any()) + return null; + + return attributes.First(); } } diff --git a/SharpChatwork/src/Client/Query/ClientQuery.cs b/SharpChatwork/src/Client/Query/ClientQuery.cs index 3bec924..c0b89fe 100644 --- a/SharpChatwork/src/Client/Query/ClientQuery.cs +++ b/SharpChatwork/src/Client/Query/ClientQuery.cs @@ -1,7 +1,6 @@ -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +internal class ClientQuery(IChatworkClient client) { - internal class ClientQuery(IChatworkClient client) - { - internal ChatworkClient chatworkClient { get; private set; } = client as ChatworkClient; - } + internal ChatworkClient chatworkClient { get; private set; } = client as ChatworkClient; } diff --git a/SharpChatwork/src/Client/Query/ContactQuery.cs b/SharpChatwork/src/Client/Query/ContactQuery.cs index 085e759..c1d3887 100644 --- a/SharpChatwork/src/Client/Query/ContactQuery.cs +++ b/SharpChatwork/src/Client/Query/ContactQuery.cs @@ -1,16 +1,15 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +internal sealed class ContactQuery(IChatworkClient client) : ClientQuery(client), IContactQuery { - internal sealed class ContactQuery(IChatworkClient client) : ClientQuery(client), IContactQuery + public async ValueTask> GetAllAsync(CancellationToken token = default) { - public async ValueTask> GetAllAsync(CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync>(EndPoints.Contacts, HttpMethod.Get, new Dictionary(), token); - } + return await this.chatworkClient.QueryAsync>(EndPoints.Contacts, HttpMethod.Get, new Dictionary(), token); } } diff --git a/SharpChatwork/src/Client/Query/IncomingRequestQuery.cs b/SharpChatwork/src/Client/Query/IncomingRequestQuery.cs index 7f3e7b4..71a98f2 100644 --- a/SharpChatwork/src/Client/Query/IncomingRequestQuery.cs +++ b/SharpChatwork/src/Client/Query/IncomingRequestQuery.cs @@ -1,26 +1,25 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +internal sealed class IncomingRequestQuery(IChatworkClient client) : ClientQuery(client), IIncomingRequestQuery { - internal sealed class IncomingRequestQuery(IChatworkClient client) : ClientQuery(client), IIncomingRequestQuery + public async ValueTask AcceptAsync(long requestId, CancellationToken token = default) { - public async ValueTask AcceptAsync(long requestId, CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.IncomingRequestsOf(requestId), HttpMethod.Post, new Dictionary(), token); - } + return await this.chatworkClient.QueryAsync(EndPoints.IncomingRequestsOf(requestId), HttpMethod.Post, new Dictionary(), token); + } - public async ValueTask CancelAsync(long requestId, CancellationToken token = default) - { - await this.chatworkClient.QueryAsync(EndPoints.IncomingRequestsOf(requestId), HttpMethod.Delete, new Dictionary(), token); - } + public async ValueTask CancelAsync(long requestId, CancellationToken token = default) + { + await this.chatworkClient.QueryAsync(EndPoints.IncomingRequestsOf(requestId), HttpMethod.Delete, new Dictionary(), token); + } - public async ValueTask> GetAllAsync(CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync>(EndPoints.IncomingRequests, HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask> GetAllAsync(CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync>(EndPoints.IncomingRequests, HttpMethod.Get, new Dictionary(), token); } } diff --git a/SharpChatwork/src/Client/Query/MeQuery.cs b/SharpChatwork/src/Client/Query/MeQuery.cs index 74d5d31..94b6e83 100644 --- a/SharpChatwork/src/Client/Query/MeQuery.cs +++ b/SharpChatwork/src/Client/Query/MeQuery.cs @@ -4,23 +4,22 @@ using System.Threading; using System.Threading.Tasks; -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +internal sealed class MeQuery(IChatworkClient client) : ClientQuery(client), IMeQuery { - internal sealed class MeQuery(IChatworkClient client) : ClientQuery(client), IMeQuery + public async ValueTask GetMyStatusAsync(CancellationToken token = default) { - public async ValueTask GetMyStatusAsync(CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.MyStatus, HttpMethod.Get, new Dictionary(), token); - } + return await this.chatworkClient.QueryAsync(EndPoints.MyStatus, HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask> GetMyTasksAsync(CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync>(EndPoints.MyTasks, HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask> GetMyTasksAsync(CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync>(EndPoints.MyTasks, HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask GetUserAsync(CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.Me, HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask GetUserAsync(CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync(EndPoints.Me, HttpMethod.Get, new Dictionary(), token); } } diff --git a/SharpChatwork/src/Client/Query/RoomFileQuery.cs b/SharpChatwork/src/Client/Query/RoomFileQuery.cs index 3fc81f4..d63a483 100644 --- a/SharpChatwork/src/Client/Query/RoomFileQuery.cs +++ b/SharpChatwork/src/Client/Query/RoomFileQuery.cs @@ -1,4 +1,3 @@ -using SharpChatwork.Query.Types; using System; using System.Collections.Generic; using System.IO; @@ -6,54 +5,53 @@ using System.Net.Http.Headers; using System.Threading; using System.Threading.Tasks; +using MimeMapping; +using SharpChatwork.Query.Types; -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +internal sealed class RoomFileQuery : ClientQuery, IRoomFileQuery { - internal sealed class RoomFileQuery : ClientQuery, IRoomFileQuery + public RoomFileQuery(IChatworkClient client) : base(client) { - public RoomFileQuery(IChatworkClient client) : base(client) - { - } + } - public async ValueTask> GetAllAsync(long roomId, long accountId, CancellationToken token = default) - { - var uri = $"{EndPoints.RoomFiles(roomId)}?account_id={accountId}"; - return await this.chatworkClient.QueryAsync>(new Uri(uri), HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask> GetAllAsync(long roomId, long accountId, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomFiles(roomId)}?account_id={accountId}"; + return await this.chatworkClient.QueryAsync>(new Uri(uri), HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask GetAsync(long roomId, long fileId, bool createDownloadLink, CancellationToken token = default) - { - var uri = $"{EndPoints.RoomFiles(roomId)}?create_download_url={UrlArgEncoder.BoolToInt(createDownloadLink)}"; - return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Get, new Dictionary(), token); - } - public async ValueTask UploadAsync(long roomId, Stream stream, string filePath, string message, CancellationToken token = default) + public async ValueTask GetAsync(long roomId, long fileId, bool createDownloadLink, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomFiles(roomId)}?create_download_url={UrlArgEncoder.BoolToInt(createDownloadLink)}"; + return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Get, new Dictionary(), token); + } + public async ValueTask UploadAsync(long roomId, Stream stream, string filePath, string message, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomFiles(roomId)}"; + var multipart = new MultipartFormDataContent(); + var fileContent = new StreamContent(stream); + fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { - var uri = $"{EndPoints.RoomFiles(roomId)}"; - - MultipartFormDataContent multipart = new MultipartFormDataContent(); - var fileContent = new StreamContent(stream); - fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") - { - Name = "\"file\"", - FileName = $"\"{Path.GetFileName(filePath)}\"", - }; - var mimeName = MimeMapping.MimeUtility.GetMimeMapping(filePath); - fileContent.Headers.ContentType = new MediaTypeHeaderValue(mimeName); - var messageContent = new StringContent(message); - messageContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") - { - Name = "\"message\"", - }; - messageContent.Headers.ContentType = null; - multipart.Add(fileContent); - multipart.Add(messageContent); - - return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, multipart, token); - } - public async ValueTask UploadAsync(long roomId, string filePath, string message, CancellationToken token = default) + Name = "\"file\"", + FileName = $"\"{Path.GetFileName(filePath)}\"", + }; + var mimeName = MimeUtility.GetMimeMapping(filePath); + fileContent.Headers.ContentType = new MediaTypeHeaderValue(mimeName); + var messageContent = new StringContent(message); + messageContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") { - using FileStream stream = new FileStream(filePath, FileMode.Open); - return await this.UploadAsync(roomId, stream, filePath, message, token); - } + Name = "\"message\"", + }; + messageContent.Headers.ContentType = null; + multipart.Add(fileContent); + multipart.Add(messageContent); + return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, multipart, token); + } + public async ValueTask UploadAsync(long roomId, string filePath, string message, CancellationToken token = default) + { + using var stream = new FileStream(filePath, FileMode.Open); + return await this.UploadAsync(roomId, stream, filePath, message, token); } } diff --git a/SharpChatwork/src/Client/Query/RoomIconPreset.cs b/SharpChatwork/src/Client/Query/RoomIconPreset.cs index 72e3be1..d3df23c 100644 --- a/SharpChatwork/src/Client/Query/RoomIconPreset.cs +++ b/SharpChatwork/src/Client/Query/RoomIconPreset.cs @@ -1,40 +1,39 @@ -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +public enum RoomIconPreset { - public enum RoomIconPreset - { - [EnumAlias("group")] - Group, - [EnumAlias("check")] - Check, - [EnumAlias("document")] - Document, - [EnumAlias("meeting")] - Meeting, - [EnumAlias("event")] - Event, - [EnumAlias("project")] - Project, - [EnumAlias("business")] - Business, - [EnumAlias("study")] - Study, - [EnumAlias("security")] - Security, - [EnumAlias("star")] - Star, - [EnumAlias("idea")] - Idea, - [EnumAlias("heart")] - Heart, - [EnumAlias("magcup")] - Magcup, - [EnumAlias("beer")] - Beer, - [EnumAlias("music")] - Music, - [EnumAlias("sports")] - Sports, - [EnumAlias("travel")] - Travel, - } + [EnumAlias("group")] + Group, + [EnumAlias("check")] + Check, + [EnumAlias("document")] + Document, + [EnumAlias("meeting")] + Meeting, + [EnumAlias("event")] + Event, + [EnumAlias("project")] + Project, + [EnumAlias("business")] + Business, + [EnumAlias("study")] + Study, + [EnumAlias("security")] + Security, + [EnumAlias("star")] + Star, + [EnumAlias("idea")] + Idea, + [EnumAlias("heart")] + Heart, + [EnumAlias("magcup")] + Magcup, + [EnumAlias("beer")] + Beer, + [EnumAlias("music")] + Music, + [EnumAlias("sports")] + Sports, + [EnumAlias("travel")] + Travel, } diff --git a/SharpChatwork/src/Client/Query/RoomInviteQuery.cs b/SharpChatwork/src/Client/Query/RoomInviteQuery.cs index b9dfe01..d4ee7fb 100644 --- a/SharpChatwork/src/Client/Query/RoomInviteQuery.cs +++ b/SharpChatwork/src/Client/Query/RoomInviteQuery.cs @@ -1,43 +1,42 @@ -using SharpChatwork.Query.Types; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +internal sealed class RoomInviteQuery(IChatworkClient client) : ClientQuery(client), IRoomInviteQuery { - internal sealed class RoomInviteQuery(IChatworkClient client) : ClientQuery(client), IRoomInviteQuery + public async ValueTask CreateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken token = default) { - public async ValueTask CreateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken token = default) + var data = new Dictionary { - var data = new Dictionary() - { - { "code" , uniqueName }, - { "description" , description}, - { "need_acceptance" , UrlArgEncoder.BoolToInt(requireAcceptance).ToString()}, - }; - return await this.chatworkClient.QueryAsync(EndPoints.RoomTasks(roomId), HttpMethod.Post, data, token); - } + {"code", uniqueName}, + {"description", description}, + {"need_acceptance", UrlArgEncoder.BoolToInt(requireAcceptance).ToString()}, + }; + return await this.chatworkClient.QueryAsync(EndPoints.RoomTasks(roomId), HttpMethod.Post, data, token); + } - public async ValueTask DestroyAsync(long roomId, CancellationToken token = default) - { - await this.chatworkClient.QueryAsync(EndPoints.RoomLink(roomId), HttpMethod.Delete, new Dictionary(), token); - } + public async ValueTask DestroyAsync(long roomId, CancellationToken token = default) + { + await this.chatworkClient.QueryAsync(EndPoints.RoomLink(roomId), HttpMethod.Delete, new Dictionary(), token); + } - public async ValueTask GetAsync(long roomId, CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.RoomLink(roomId), HttpMethod.Post, new Dictionary(), token); - } + public async ValueTask GetAsync(long roomId, CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync(EndPoints.RoomLink(roomId), HttpMethod.Post, new Dictionary(), token); + } - public async ValueTask UpdateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken token = default) + public async ValueTask UpdateAsync(long roomId, string uniqueName, string description, bool requireAcceptance, CancellationToken token = default) + { + var data = new Dictionary { - var data = new Dictionary() - { - { "code" , uniqueName }, - { "description" , description}, - { "need_acceptance" , UrlArgEncoder.BoolToInt(requireAcceptance).ToString()}, - }; - return await this.chatworkClient.QueryAsync(EndPoints.RoomTasks(roomId), HttpMethod.Put, data, token); - } + {"code", uniqueName}, + {"description", description}, + {"need_acceptance", UrlArgEncoder.BoolToInt(requireAcceptance).ToString()}, + }; + return await this.chatworkClient.QueryAsync(EndPoints.RoomTasks(roomId), HttpMethod.Put, data, token); } } diff --git a/SharpChatwork/src/Client/Query/RoomMemberQuery.cs b/SharpChatwork/src/Client/Query/RoomMemberQuery.cs index 560cbaa..12a4161 100644 --- a/SharpChatwork/src/Client/Query/RoomMemberQuery.cs +++ b/SharpChatwork/src/Client/Query/RoomMemberQuery.cs @@ -1,32 +1,31 @@ -using SharpChatwork.Query.Types; using System; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; + +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +internal sealed class RoomMemberQuery(IChatworkClient client) : ClientQuery(client), IRoomMemberQuery { - internal sealed class RoomMemberQuery(IChatworkClient client) : ClientQuery(client), IRoomMemberQuery + public async ValueTask> GetAllAsync(long roomId, CancellationToken token = default) { - public async ValueTask> GetAllAsync(long roomId, CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync>(EndPoints.RoomMember(roomId), HttpMethod.Get, new Dictionary(), token); - } + return await this.chatworkClient.QueryAsync>(EndPoints.RoomMember(roomId), HttpMethod.Get, new Dictionary(), token); + } - public ValueTask UpdateAsync(long roomId, IEnumerable adminsMembers, IEnumerable normalMembers, IEnumerable readonlyMembers, CancellationToken token = default) + public ValueTask UpdateAsync(long roomId, IEnumerable adminsMembers, IEnumerable normalMembers, IEnumerable readonlyMembers, CancellationToken token = default) + { + throw new NotImplementedException(); + /* + var data = new Dictionary() { - throw new NotImplementedException(); - /* - var data = new Dictionary() - { - // TODO convert - // {"members_admin_ids",adminsMembers}, - // {"members_member_ids",roomName }, - // {"members_readonly_ids",preset.ToAliasOrDefault() } - }; - return await this.chatworkClient.QueryAsync(EndPoints.RoomMember(roomId), HttpMethod.Get, data); - */ - } + // TODO convert + // {"members_admin_ids",adminsMembers}, + // {"members_member_ids",roomName }, + // {"members_readonly_ids",preset.ToAliasOrDefault() } + }; + return await this.chatworkClient.QueryAsync(EndPoints.RoomMember(roomId), HttpMethod.Get, data); + */ } } diff --git a/SharpChatwork/src/Client/Query/RoomMessageQuery.cs b/SharpChatwork/src/Client/Query/RoomMessageQuery.cs index 56c2c61..58f6097 100644 --- a/SharpChatwork/src/Client/Query/RoomMessageQuery.cs +++ b/SharpChatwork/src/Client/Query/RoomMessageQuery.cs @@ -1,59 +1,57 @@ -using SharpChatwork.Query.Types; using System; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +internal sealed class RoomMessageQuery(IChatworkClient client) : ClientQuery(client), IRoomMessageQuery { - internal sealed class RoomMessageQuery(IChatworkClient client) : ClientQuery(client), IRoomMessageQuery + public async ValueTask> GetAllAsync(long roomId, bool isForceMode = false, CancellationToken token = default) { - public async ValueTask> GetAllAsync(long roomId, bool isForceMode = false, CancellationToken token = default) - { - // TODO QueryAsync + data is error - // single arg is invalid ? - var uri = $"{EndPoints.RoomMessages(roomId)}?force={UrlArgEncoder.BoolToInt(isForceMode)}"; - return await this.chatworkClient.QueryAsync>(new Uri(uri), HttpMethod.Get, new Dictionary(), token); - } + // TODO QueryAsync + data is error + // single arg is invalid ? + var uri = $"{EndPoints.RoomMessages(roomId)}?force={UrlArgEncoder.BoolToInt(isForceMode)}"; + return await this.chatworkClient.QueryAsync>(new Uri(uri), HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask GetAsync(long roomId, long messageId, CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.RoomMessagesOf(roomId, messageId), HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask GetAsync(long roomId, long messageId, CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync(EndPoints.RoomMessagesOf(roomId, messageId), HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask ReadAsync(long roomId, long messageId, CancellationToken token = default) - { - var uri = $"{EndPoints.RoomMessages(roomId)}?message_id={messageId}"; - return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); - } + public async ValueTask ReadAsync(long roomId, long messageId, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomMessages(roomId)}?message_id={messageId}"; + return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); + } - public async ValueTask RemoveAsync(long roomId, long messageId, CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.RoomMessagesOf(roomId, messageId), HttpMethod.Delete, new Dictionary(), token); - } + public async ValueTask RemoveAsync(long roomId, long messageId, CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync(EndPoints.RoomMessagesOf(roomId, messageId), HttpMethod.Delete, new Dictionary(), token); + } - public async ValueTask SendAsync(long roomId, string message, bool isSelfUnread, CancellationToken token = default) - { - var data = new Dictionary() - { - { "body" , message }, - { "self_unread" , UrlArgEncoder.BoolToInt(isSelfUnread).ToString() } - }; - return await this.chatworkClient.QueryAsync(EndPoints.RoomMessages(roomId), HttpMethod.Post, data, token); - } - - public async ValueTask UnReadAsync(long roomId, long messageId, CancellationToken token = default) + public async ValueTask SendAsync(long roomId, string message, bool isSelfUnread, CancellationToken token = default) + { + var data = new Dictionary { - var uri = $"{EndPoints.RoomMessages(roomId)}?message_id={messageId}"; - return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); - } + {"body", message}, + {"self_unread", UrlArgEncoder.BoolToInt(isSelfUnread).ToString()}, + }; + return await this.chatworkClient.QueryAsync(EndPoints.RoomMessages(roomId), HttpMethod.Post, data, token); + } - public async ValueTask UpdateAsync(long roomId, long messageId, string message, CancellationToken token = default) - { - var uri = $"{EndPoints.RoomMessagesOf(roomId, messageId)}?body={message}"; - return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); - } + public async ValueTask UnReadAsync(long roomId, long messageId, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomMessages(roomId)}?message_id={messageId}"; + return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); + } + + public async ValueTask UpdateAsync(long roomId, long messageId, string message, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomMessagesOf(roomId, messageId)}?body={message}"; + return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); } } diff --git a/SharpChatwork/src/Client/Query/RoomQuery.cs b/SharpChatwork/src/Client/Query/RoomQuery.cs index 53d2e88..c397d2c 100644 --- a/SharpChatwork/src/Client/Query/RoomQuery.cs +++ b/SharpChatwork/src/Client/Query/RoomQuery.cs @@ -5,60 +5,60 @@ using System.Threading.Tasks; using SharpChatwork.Query.Types; -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +internal sealed class RoomQuery(IChatworkClient client) : ClientQuery(client), IRoomQuery { - internal sealed class RoomQuery(IChatworkClient client) : ClientQuery(client), IRoomQuery - { - public IRoomMessageQuery message { get; } = new RoomMessageQuery(client); - public IRoomMemberQuery member { get; } = new RoomMemberQuery(client); - public IRoomInviteQuery invite { get; } = new RoomInviteQuery(client); - public IRoomFileQuery file { get; } = new RoomFileQuery(client); - public IRoomTaskQuery task { get; } = new RoomTaskQuery(client); + public IRoomMessageQuery message { get; } = new RoomMessageQuery(client); + public IRoomMemberQuery member { get; } = new RoomMemberQuery(client); + public IRoomInviteQuery invite { get; } = new RoomInviteQuery(client); + public IRoomFileQuery file { get; } = new RoomFileQuery(client); + public IRoomTaskQuery task { get; } = new RoomTaskQuery(client); - public async ValueTask CreateAsync(CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.Rooms, HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask CreateAsync(CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync(EndPoints.Rooms, HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask DeleteAsync(long roomId, CancellationToken token = default) - { - var uri = $"{EndPoints.RoomMessages(roomId)}?action_type=delete"; - await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); - } + public async ValueTask DeleteAsync(long roomId, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomMessages(roomId)}?action_type=delete"; + await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); + } - public async ValueTask> GetAllAsync(CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync>(EndPoints.Rooms, HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask> GetAllAsync(CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync>(EndPoints.Rooms, HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask GetAsync(long roomId, CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.RoomOf(roomId), HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask GetAsync(long roomId, CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync(EndPoints.RoomOf(roomId), HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask LeaveAsync(long roomId, CancellationToken token = default) - { - var uri = $"{EndPoints.RoomMessages(roomId)}?action_type=leave"; - await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); - } + public async ValueTask LeaveAsync(long roomId, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomMessages(roomId)}?action_type=leave"; + await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); + } - public async ValueTask UpdateAsync(long roomId, string roomName, string description, RoomIconPreset preset, - CancellationToken token = default - ) + public async ValueTask UpdateAsync( + long roomId, string roomName, string description, RoomIconPreset preset, + CancellationToken token = default + ) + { + var data = new Dictionary { - var data = new Dictionary { - { - "name", roomName - }, - { - "description", roomName - }, - { - "icon_preset", preset.ToAliasOrDefault() - }, - }; - return await this.chatworkClient.QueryAsync(EndPoints.RoomOf(roomId), HttpMethod.Post, data, token); - } + "name", roomName + }, + { + "description", roomName + }, + { + "icon_preset", preset.ToAliasOrDefault() + }, + }; + return await this.chatworkClient.QueryAsync(EndPoints.RoomOf(roomId), HttpMethod.Post, data, token); } } diff --git a/SharpChatwork/src/Client/Query/RoomTaskQuery.cs b/SharpChatwork/src/Client/Query/RoomTaskQuery.cs index 6d7e1f3..3dbaa19 100644 --- a/SharpChatwork/src/Client/Query/RoomTaskQuery.cs +++ b/SharpChatwork/src/Client/Query/RoomTaskQuery.cs @@ -1,51 +1,49 @@ -using SharpChatwork.Query.Types; using System; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; +using SharpChatwork.Query.Types; +namespace SharpChatwork.Query; -namespace SharpChatwork.Query +internal sealed class RoomTaskQuery(IChatworkClient client) : ClientQuery(client), IRoomTaskQuery { - internal sealed class RoomTaskQuery(IChatworkClient client) : ClientQuery(client), IRoomTaskQuery + public ValueTask CreateAsync(long roomId, string taskText, long limit, CancellationToken token = default) { - public ValueTask CreateAsync(long roomId, string taskText, long limit, CancellationToken token = default) - { - //var data = new Dictionary() - //{ - // { "body" , taskText }, - // { "limit" , limit}, - // { "limit_type" , doneString}, - // { "to_ids" , doneString}, - //}; - //return await this.QueryAsync>(EndPoints.RoomTasks(roomId), HttpMethod.Get, data); - throw new NotImplementedException(); - } + //var data = new Dictionary() + //{ + // { "body" , taskText }, + // { "limit" , limit}, + // { "limit_type" , doneString}, + // { "to_ids" , doneString}, + //}; + //return await this.QueryAsync>(EndPoints.RoomTasks(roomId), HttpMethod.Get, data); + throw new NotImplementedException(); + } - public async ValueTask GetAsync(long roomId, long taskId, CancellationToken token = default) - { - return await this.chatworkClient.QueryAsync(EndPoints.RoomTasksOf(roomId, taskId), HttpMethod.Get, new Dictionary(), token); - } + public async ValueTask GetAsync(long roomId, long taskId, CancellationToken token = default) + { + return await this.chatworkClient.QueryAsync(EndPoints.RoomTasksOf(roomId, taskId), HttpMethod.Get, new Dictionary(), token); + } - public async ValueTask> GetAllAsync(long roomId, long accountId, long autherId, bool isDone = false, CancellationToken token = default) + public async ValueTask> GetAllAsync(long roomId, long accountId, long autherId, bool isDone = false, CancellationToken token = default) + { + var doneString = "done"; + if(!isDone) + doneString = "open"; + var data = new Dictionary { - var doneString = "done"; - if(!isDone) - doneString = "open"; - var data = new Dictionary() - { - { "account_id" , accountId.ToString() }, - { "assigned_by_account_id" , autherId.ToString()}, - { "status" , doneString}, - }; - return await this.chatworkClient.QueryAsync>(EndPoints.RoomTasks(roomId), HttpMethod.Get, data, token); - } + {"account_id", accountId.ToString()}, + {"assigned_by_account_id", autherId.ToString()}, + {"status", doneString}, + }; + return await this.chatworkClient.QueryAsync>(EndPoints.RoomTasks(roomId), HttpMethod.Get, data, token); + } - public async ValueTask UpdateAsync(long roomId, long taskId, TaskStateType state, CancellationToken token = default) - { - var uri = $"{EndPoints.RoomTasksOf(roomId, taskId)}?body={state.ToAliasOrDefault()}"; - return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); - } + public async ValueTask UpdateAsync(long roomId, long taskId, TaskStateType state, CancellationToken token = default) + { + var uri = $"{EndPoints.RoomTasksOf(roomId, taskId)}?body={state.ToAliasOrDefault()}"; + return await this.chatworkClient.QueryAsync(new Uri(uri), HttpMethod.Post, new Dictionary(), token); } } diff --git a/SharpChatwork/src/Client/Query/TaskState.cs b/SharpChatwork/src/Client/Query/TaskState.cs index 669a671..16cfde1 100644 --- a/SharpChatwork/src/Client/Query/TaskState.cs +++ b/SharpChatwork/src/Client/Query/TaskState.cs @@ -1,10 +1,9 @@ -namespace SharpChatwork.Query +namespace SharpChatwork.Query; + +public enum TaskStateType { - public enum TaskStateType - { - [EnumAlias("open")] - Open, - [EnumAlias("done")] - Done, - } + [EnumAlias("open")] + Open, + [EnumAlias("done")] + Done, } diff --git a/SharpChatwork/src/Client/QueryResult/Contact.cs b/SharpChatwork/src/Client/QueryResult/Contact.cs index 078de29..8e7aaca 100644 --- a/SharpChatwork/src/Client/QueryResult/Contact.cs +++ b/SharpChatwork/src/Client/QueryResult/Contact.cs @@ -1,16 +1,15 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class Contact { - public class Contact - { - public int account_id { get; set; } - public int room_id { get; set; } - public string name { get; set; } - public string chatwork_id { get; set; } - public int organization_id { get; set; } - public string organization_name { get; set; } - public string department { get; set; } - public string avatar_image_url { get; set; } - } + public int account_id { get; set; } + public int room_id { get; set; } + public string name { get; set; } + public string chatwork_id { get; set; } + public int organization_id { get; set; } + public string organization_name { get; set; } + public string department { get; set; } + public string avatar_image_url { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/Ids/ElementId.cs b/SharpChatwork/src/Client/QueryResult/Ids/ElementId.cs index f8f9ffb..7056009 100644 --- a/SharpChatwork/src/Client/QueryResult/Ids/ElementId.cs +++ b/SharpChatwork/src/Client/QueryResult/Ids/ElementId.cs @@ -1,9 +1,8 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class ElementId { - public class ElementId - { - public string id { get; set; } - } + public string id { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/Ids/FileId.cs b/SharpChatwork/src/Client/QueryResult/Ids/FileId.cs index d376128..95e83db 100644 --- a/SharpChatwork/src/Client/QueryResult/Ids/FileId.cs +++ b/SharpChatwork/src/Client/QueryResult/Ids/FileId.cs @@ -1,13 +1,12 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class FileId : ElementId { - public class FileId : ElementId + public string File_id { - public string File_id - { - get => this.id; - set => this.id = value; - } + get => this.id; + set => this.id = value; } } diff --git a/SharpChatwork/src/Client/QueryResult/Ids/MessageId.cs b/SharpChatwork/src/Client/QueryResult/Ids/MessageId.cs index ff67c01..f3d1a9f 100644 --- a/SharpChatwork/src/Client/QueryResult/Ids/MessageId.cs +++ b/SharpChatwork/src/Client/QueryResult/Ids/MessageId.cs @@ -1,13 +1,12 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class MessageId : ElementId { - public class MessageId : ElementId + public string message_id { - public string message_id - { - get => this.id; - set => this.id = value; - } + get => this.id; + set => this.id = value; } } diff --git a/SharpChatwork/src/Client/QueryResult/Ids/RoomId.cs b/SharpChatwork/src/Client/QueryResult/Ids/RoomId.cs index a894704..1e2bac6 100644 --- a/SharpChatwork/src/Client/QueryResult/Ids/RoomId.cs +++ b/SharpChatwork/src/Client/QueryResult/Ids/RoomId.cs @@ -1,13 +1,12 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class RoomId : ElementId { - public class RoomId : ElementId + public string room_id { - public string room_id - { - get => this.id; - set => this.id = value; - } + get => this.id; + set => this.id = value; } } diff --git a/SharpChatwork/src/Client/QueryResult/Ids/TaskId.cs b/SharpChatwork/src/Client/QueryResult/Ids/TaskId.cs index 4c789ab..b663e21 100644 --- a/SharpChatwork/src/Client/QueryResult/Ids/TaskId.cs +++ b/SharpChatwork/src/Client/QueryResult/Ids/TaskId.cs @@ -1,13 +1,12 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class TaskId : ElementId { - public class TaskId : ElementId + public string task_id { - public string task_id - { - get => this.id; - set => this.id = value; - } + get => this.id; + set => this.id = value; } } diff --git a/SharpChatwork/src/Client/QueryResult/Ids/UserId.cs b/SharpChatwork/src/Client/QueryResult/Ids/UserId.cs index 2a6096c..a848756 100644 --- a/SharpChatwork/src/Client/QueryResult/Ids/UserId.cs +++ b/SharpChatwork/src/Client/QueryResult/Ids/UserId.cs @@ -1,13 +1,12 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class UserId : ElementId { - public class UserId : ElementId + public string user_id { - public string user_id - { - get => this.id; - set => this.id = value; - } + get => this.id; + set => this.id = value; } } diff --git a/SharpChatwork/src/Client/QueryResult/IncomingRequest.cs b/SharpChatwork/src/Client/QueryResult/IncomingRequest.cs index a0c2b3f..8d205ec 100644 --- a/SharpChatwork/src/Client/QueryResult/IncomingRequest.cs +++ b/SharpChatwork/src/Client/QueryResult/IncomingRequest.cs @@ -1,17 +1,16 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class IncomingRequest { - public class IncomingRequest - { - public int request_id { get; set; } - public int account_id { get; set; } - public string message { get; set; } - public string name { get; set; } - public string chatwork_id { get; set; } - public int organization_id { get; set; } - public string organization_name { get; set; } - public string department { get; set; } - public string avatar_image_url { get; set; } - } + public int request_id { get; set; } + public int account_id { get; set; } + public string message { get; set; } + public string name { get; set; } + public string chatwork_id { get; set; } + public int organization_id { get; set; } + public string organization_name { get; set; } + public string department { get; set; } + public string avatar_image_url { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/InviteLink.cs b/SharpChatwork/src/Client/QueryResult/InviteLink.cs index c3d838d..9fe79ed 100644 --- a/SharpChatwork/src/Client/QueryResult/InviteLink.cs +++ b/SharpChatwork/src/Client/QueryResult/InviteLink.cs @@ -1,12 +1,11 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class InviteLink { - public class InviteLink - { - public bool @public { get; set; } - public string url { get; set; } - public bool need_acceptance { get; set; } - public string description { get; set; } - } + public bool @public { get; set; } + public string url { get; set; } + public bool need_acceptance { get; set; } + public string description { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/MessageReadUnread.cs b/SharpChatwork/src/Client/QueryResult/MessageReadUnread.cs index b8533f7..b7ff96b 100644 --- a/SharpChatwork/src/Client/QueryResult/MessageReadUnread.cs +++ b/SharpChatwork/src/Client/QueryResult/MessageReadUnread.cs @@ -1,10 +1,9 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class MessageReadUnread { - public class MessageReadUnread - { - public int unread_num { get; set; } - public int mention_num { get; set; } - } + public int unread_num { get; set; } + public int mention_num { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/Room.cs b/SharpChatwork/src/Client/QueryResult/Room.cs index 13b76fe..a3a9ea6 100644 --- a/SharpChatwork/src/Client/QueryResult/Room.cs +++ b/SharpChatwork/src/Client/QueryResult/Room.cs @@ -1,22 +1,21 @@ #pragma warning disable CA1707 // Underscore #pragma warning disable CA1805 // Default value initialize -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class Room { - public class Room - { - public int room_id { get; set; } = -1; - public string name { get; set; } = string.Empty; - public string type { get; set; } = string.Empty; - public string role { get; set; } = string.Empty; - public bool sticky { get; set; } = false; - public int unread_num { get; set; } = 0; - public int mention_num { get; set; } = 0; - public int mytask_num { get; set; } = 0; - public int message_num { get; set; } = 0; - public int file_num { get; set; } = 0; - public int task_num { get; set; } = 0; - public string icon_path { get; set; } = string.Empty; - public int last_update_time { get; set; } = 0; - } + public int room_id { get; set; } = -1; + public string name { get; set; } = string.Empty; + public string type { get; set; } = string.Empty; + public string role { get; set; } = string.Empty; + public bool sticky { get; set; } = false; + public int unread_num { get; set; } = 0; + public int mention_num { get; set; } = 0; + public int mytask_num { get; set; } = 0; + public int message_num { get; set; } = 0; + public int file_num { get; set; } = 0; + public int task_num { get; set; } = 0; + public string icon_path { get; set; } = string.Empty; + public int last_update_time { get; set; } = 0; } diff --git a/SharpChatwork/src/Client/QueryResult/RoomMember.cs b/SharpChatwork/src/Client/QueryResult/RoomMember.cs index d4fa9ef..baf83f6 100644 --- a/SharpChatwork/src/Client/QueryResult/RoomMember.cs +++ b/SharpChatwork/src/Client/QueryResult/RoomMember.cs @@ -2,12 +2,11 @@ using System.Collections.Generic; -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class RoomMember { - public class RoomMember - { - public List admin { get; set; } = new List(); - public List member { get; set; } = new List(); - public List @readonly { get; set; } = new List(); - } + public List admin { get; set; } = new List(); + public List member { get; set; } = new List(); + public List @readonly { get; set; } = new List(); } diff --git a/SharpChatwork/src/Client/QueryResult/Status.cs b/SharpChatwork/src/Client/QueryResult/Status.cs index ff19e50..d141c84 100644 --- a/SharpChatwork/src/Client/QueryResult/Status.cs +++ b/SharpChatwork/src/Client/QueryResult/Status.cs @@ -1,14 +1,13 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class Status { - public class Status - { - public int unread_room_num { get; set; } - public int mention_room_num { get; set; } - public int mytask_room_num { get; set; } - public int unread_num { get; set; } - public int mention_num { get; set; } - public int mytask_num { get; set; } - } + public int unread_room_num { get; set; } + public int mention_room_num { get; set; } + public int mytask_room_num { get; set; } + public int unread_num { get; set; } + public int mention_num { get; set; } + public int mytask_num { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/User.cs b/SharpChatwork/src/Client/QueryResult/User.cs index 2ccf783..6a3ddc1 100644 --- a/SharpChatwork/src/Client/QueryResult/User.cs +++ b/SharpChatwork/src/Client/QueryResult/User.cs @@ -1,27 +1,26 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class User { - public class User - { - public int account_id { get; set; } - public int room_id { get; set; } - public string name { get; set; } - public string chatwork_id { get; set; } - public int organization_id { get; set; } - public string organization_name { get; set; } - public string department { get; set; } - public string title { get; set; } - public string url { get; set; } - public string introduction { get; set; } - public string mail { get; set; } - public string tel_organization { get; set; } - public string tel_extension { get; set; } - public string tel_mobile { get; set; } - public string skype { get; set; } - public string facebook { get; set; } - public string twitter { get; set; } - public string avatar_image_url { get; set; } - public string login_mail { get; set; } - } + public int account_id { get; set; } + public int room_id { get; set; } + public string name { get; set; } + public string chatwork_id { get; set; } + public int organization_id { get; set; } + public string organization_name { get; set; } + public string department { get; set; } + public string title { get; set; } + public string url { get; set; } + public string introduction { get; set; } + public string mail { get; set; } + public string tel_organization { get; set; } + public string tel_extension { get; set; } + public string tel_mobile { get; set; } + public string skype { get; set; } + public string facebook { get; set; } + public string twitter { get; set; } + public string avatar_image_url { get; set; } + public string login_mail { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/UserFile.cs b/SharpChatwork/src/Client/QueryResult/UserFile.cs index 52d8f40..db124aa 100644 --- a/SharpChatwork/src/Client/QueryResult/UserFile.cs +++ b/SharpChatwork/src/Client/QueryResult/UserFile.cs @@ -1,14 +1,13 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class UserFile { - public class UserFile - { - public int file_id { get; set; } - public User account { get; set; } - public string message_id { get; set; } - public string filename { get; set; } - public int filesize { get; set; } - public int upload_time { get; set; } - } + public int file_id { get; set; } + public User account { get; set; } + public string message_id { get; set; } + public string filename { get; set; } + public int filesize { get; set; } + public int upload_time { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/UserMessage.cs b/SharpChatwork/src/Client/QueryResult/UserMessage.cs index 8ca806c..eeb7e78 100644 --- a/SharpChatwork/src/Client/QueryResult/UserMessage.cs +++ b/SharpChatwork/src/Client/QueryResult/UserMessage.cs @@ -1,13 +1,12 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class UserMessage { - public class UserMessage - { - public string message_id { get; set; } - public User account { get; set; } - public string body { get; set; } - public int send_time { get; set; } - public int update_time { get; set; } - } + public string message_id { get; set; } + public User account { get; set; } + public string body { get; set; } + public int send_time { get; set; } + public int update_time { get; set; } } diff --git a/SharpChatwork/src/Client/QueryResult/UserTask.cs b/SharpChatwork/src/Client/QueryResult/UserTask.cs index 7be4bed..37af8ef 100644 --- a/SharpChatwork/src/Client/QueryResult/UserTask.cs +++ b/SharpChatwork/src/Client/QueryResult/UserTask.cs @@ -1,16 +1,15 @@ #pragma warning disable CA1707 // Underscore -namespace SharpChatwork.Query.Types +namespace SharpChatwork.Query.Types; + +public class UserTask { - public class UserTask - { - public int task_id { get; set; } - public Room room { get; set; } - public User assigned_by_account { get; set; } - public string message_id { get; set; } - public string body { get; set; } - public int limit_time { get; set; } - public string status { get; set; } - public string limit_type { get; set; } - } + public int task_id { get; set; } + public Room room { get; set; } + public User assigned_by_account { get; set; } + public string message_id { get; set; } + public string body { get; set; } + public int limit_time { get; set; } + public string status { get; set; } + public string limit_type { get; set; } } diff --git a/SharpChatwork/src/Client/ResponseWrapper.cs b/SharpChatwork/src/Client/ResponseWrapper.cs index 6e9b3a1..64d4e83 100644 --- a/SharpChatwork/src/Client/ResponseWrapper.cs +++ b/SharpChatwork/src/Client/ResponseWrapper.cs @@ -1,11 +1,10 @@ using System.Collections.Generic; -namespace SharpChatwork +namespace SharpChatwork; + +public class ResponseWrapper { - public class ResponseWrapper - { - public int statusCode { get; set; } - public string content { get; set; } - public Dictionary> headers { get; set; } - } + public int statusCode { get; set; } + public string content { get; set; } + public Dictionary> headers { get; set; } } diff --git a/SharpChatwork/src/Client/UrlArgEncoder.cs b/SharpChatwork/src/Client/UrlArgEncoder.cs index 1d86094..f60e6b9 100644 --- a/SharpChatwork/src/Client/UrlArgEncoder.cs +++ b/SharpChatwork/src/Client/UrlArgEncoder.cs @@ -2,41 +2,41 @@ using System.Linq; using System.Reflection; -namespace SharpChatwork +namespace SharpChatwork; + +internal sealed class UrlArgEncoder { - internal sealed class UrlArgEncoder + public static Dictionary ToDictionary(T input) where T : class { - public static Dictionary ToDictionary(T input) where T : class - { - var type = typeof(T); - return type.GetMembers() - .Where(m => m.MemberType == MemberTypes.Field) - .Where(m => m.DeclaringType.IsPublic) - .Select(m => new KeyValuePair(m.Name, type.GetField(m.Name).GetValue(input))) - .Where(m => m.Value != null) - .Where(m => !string.IsNullOrEmpty(m.Value.ToString())) - .Select(m => new KeyValuePair(m.Key, m.Value.ToString())) - .Concat( - type.GetProperties() + var type = typeof(T); + return type.GetMembers() + .Where(m => m.MemberType == MemberTypes.Field) + .Where(m => m.DeclaringType.IsPublic) + .Select(m => new KeyValuePair(m.Name, type.GetField(m.Name).GetValue(input))) + .Where(m => m.Value != null) + .Where(m => !string.IsNullOrEmpty(m.Value.ToString())) + .Select(m => new KeyValuePair(m.Key, m.Value.ToString())) + .Concat( + type.GetProperties() .Where(m => m.MemberType == MemberTypes.Property) .Where(m => m.DeclaringType.IsPublic) .Where(m => type.GetProperty(m.Name).CanRead) .Select(m => new KeyValuePair(m.Name, type.GetProperty(m.Name).GetValue(input))) .Where(m => m.Value != null) .Where(m => !string.IsNullOrEmpty(m.Value.ToString())) - .Select(m => new KeyValuePair(m.Key, m.Value.ToString()))) - .ToDictionary(m => m.Key, n => n.Value); - } - public static string ToURLArg(T input) where T : class - { - return "?" + string.Join("^&", ToDictionary(input).Select(m => $"{m.Key}={m.Value}")); - } + .Select(m => new KeyValuePair(m.Key, m.Value.ToString())) + ) + .ToDictionary(m => m.Key, n => n.Value); + } + public static string ToURLArg(T input) where T : class + { + return "?" + string.Join("^&", UrlArgEncoder.ToDictionary(input).Select(m => $"{m.Key}={m.Value}")); + } - public static int BoolToInt(bool value) - { - if(value) - return 1; - return 0; - } + public static int BoolToInt(bool value) + { + if(value) + return 1; + return 0; } }