refactor SDK to stateful architecture and implement reactive websocket handling

This commit is contained in:
2026-05-03 20:30:29 +02:00
parent 6d7151ebe6
commit e7e8f6b1a9
3 changed files with 73 additions and 1 deletions

82
Services/AuthService.cs Normal file
View File

@@ -0,0 +1,82 @@
using Chtn.CSharp.SDK.Core;
using Chtn.CSharp.SDK.Models.Auth;
using Chtn.CSharp.SDK.Models.Session;
using System;
using System.Threading.Tasks;
namespace Chtn.CSharp.SDK.Services
{
public interface IAuthService
{
Task<AuthMethods> GetAuthMethods(GetAuthMethodsReq req);
Task OtpSendCode(OtpPleSendCodeReq req);
Task<SignInSuccessResp> OtpVerifyCode(OtpPleVerifyCodeReq req);
Task<SignInSuccessResp> LoginPasswordAuth(LoginPasswordAuthReq req);
Task<UserDataValidationResp> IsUsernameUsed(UnameUsageReq req);
Task<UserDataValidationResp> IsEmailUsed(EmailUsageReq req);
Task PleSendVCode(PleSendVCodeReq req);
Task<PleVerifyCodeResp> PleVerifyCode(PleVerifyCodeReq req);
Task<SignInSuccessResp> FinishPLEAccount(FinishPleAccountReq req);
Task<SignInSuccessResp> LoginWithGoogle(LoginWithGoogleReq req);
Task<SignInSuccessResp> LoginWithApple(LoginWithAppleReq req);
Task<SignInSuccessResp> Register(RegisterReq req);
Task<ResetPasswordResp> ResetPassword(ResetPasswordReq req);
Task VerifyResetCode(VerifyPasswordResetReq req);
Task<ValidateSessionResp> ValidateSession(ValidateSessionReq req);
}
public class AuthServiceProvider : IAuthService
{
private readonly ApiClient _apiClient;
public AuthServiceProvider(ApiClient apiClient)
{
_apiClient = apiClient;
}
public async Task<AuthMethods> GetAuthMethods(GetAuthMethodsReq req) =>
await _apiClient.PostAsync<GetAuthMethodsReq, AuthMethods>("user/authOptions", req);
public async Task OtpSendCode(OtpPleSendCodeReq req) =>
await _apiClient.PostAsync<OtpPleSendCodeReq, object>("v2/user/otpSendCode", req);
public async Task<SignInSuccessResp> OtpVerifyCode(OtpPleVerifyCodeReq req) =>
await _apiClient.PostAsync<OtpPleVerifyCodeReq, SignInSuccessResp>("v2/user/otpVerifyCode", req);
public async Task<SignInSuccessResp> LoginPasswordAuth(LoginPasswordAuthReq req) =>
await _apiClient.PostAsync<LoginPasswordAuthReq, SignInSuccessResp>("v2/user/loginPasswordAuth", req);
public async Task<UserDataValidationResp> IsUsernameUsed(UnameUsageReq req) =>
await _apiClient.PostAsync<UnameUsageReq, UserDataValidationResp>("v2/user/unameUsage", req);
public async Task<UserDataValidationResp> IsEmailUsed(EmailUsageReq req) =>
await _apiClient.PostAsync<EmailUsageReq, UserDataValidationResp>("v2/user/emailUsage", req);
public async Task PleSendVCode(PleSendVCodeReq req) =>
await _apiClient.PostAsync<PleSendVCodeReq, object>("v2/user/pleSendVCode", req);
public async Task<PleVerifyCodeResp> PleVerifyCode(PleVerifyCodeReq req) =>
await _apiClient.PostAsync<PleVerifyCodeReq, PleVerifyCodeResp>("v2/user/pleVerifyCode", req);
public async Task<SignInSuccessResp> FinishPLEAccount(FinishPleAccountReq req) =>
await _apiClient.PostAsync<FinishPleAccountReq, SignInSuccessResp>("v2/user/finishPLEAccount", req);
public async Task<SignInSuccessResp> LoginWithGoogle(LoginWithGoogleReq req) =>
await _apiClient.PostAsync<LoginWithGoogleReq, SignInSuccessResp>("user/loginWithGoogle", req);
public async Task<SignInSuccessResp> LoginWithApple(LoginWithAppleReq req) =>
await _apiClient.PostAsync<LoginWithAppleReq, SignInSuccessResp>("user/loginWithApple", req);
public async Task<SignInSuccessResp> Register(RegisterReq req) =>
await _apiClient.PostAsync<RegisterReq, SignInSuccessResp>("v2/user/register", req);
public async Task<ResetPasswordResp> ResetPassword(ResetPasswordReq req) =>
await _apiClient.PostAsync<ResetPasswordReq, ResetPasswordResp>("user/resetPassword", req);
public async Task VerifyResetCode(VerifyPasswordResetReq req) =>
await _apiClient.PostAsync<VerifyPasswordResetReq, object>("user/verifyResetCode", req);
public async Task<ValidateSessionResp> ValidateSession(ValidateSessionReq req) =>
await _apiClient.PostAsync<ValidateSessionReq, ValidateSessionResp>("v2/user/validateSession", req);
}
}