Implement Logout Event Fix Own Direct Messages Not New Lining The Chat Version Bump
881 lines
33 KiB
C#
881 lines
33 KiB
C#
using QtCNETAPI.Dtos.Room;
|
|
using QtCNETAPI.Dtos.User;
|
|
using QtCNETAPI.Enums;
|
|
using QtCNETAPI.Models;
|
|
using QtCNETAPI.Schema;
|
|
using RestSharp;
|
|
using System.IdentityModel.Tokens.Jwt;
|
|
using System.Text.Json;
|
|
|
|
namespace QtCNETAPI.Services.ApiService
|
|
{
|
|
public class ApiService : IApiService
|
|
{
|
|
private User? user;
|
|
private RestClient _client;
|
|
|
|
internal string? sessionToken;
|
|
internal string apiUri;
|
|
|
|
public event EventHandler? OnCurrentUserUpdate;
|
|
|
|
public string? SessionToken
|
|
{
|
|
get { return sessionToken; }
|
|
set { sessionToken = value; }
|
|
}
|
|
|
|
public User? CurrentUser
|
|
{
|
|
get { return user; }
|
|
}
|
|
|
|
public ApiService(string apiUrl)
|
|
{
|
|
apiUri = apiUrl;
|
|
_client = new RestClient(apiUri);
|
|
}
|
|
|
|
public async Task<ServiceResponse<string>> PingServerAsync()
|
|
{
|
|
var serviceResponse = new ServiceResponse<string>();
|
|
|
|
try
|
|
{
|
|
var request = new RestRequest("general/ping");
|
|
var response = await _client.GetAsync<string>(request);
|
|
|
|
if (response != null)
|
|
{
|
|
if (response != "Pong!") serviceResponse.Success = false;
|
|
else serviceResponse.Success = true;
|
|
}
|
|
else serviceResponse.Success = false;
|
|
} catch (HttpRequestException ex)
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = ex.Message;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<List<UserInformationDto>>> GetAllUsersAsync()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<List<UserInformationDto>>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var request = new RestRequest("users/all")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync<ServiceResponse<List<UserInformationDto>>>(request);
|
|
|
|
if (response != null || response!.Data != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API didn't respond with users.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<List<UserInformationDto>>> GetOnlineUsersAsync()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<List<UserInformationDto>>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var request = new RestRequest("users/users-online")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync<ServiceResponse<List<UserInformationDto>>>(request);
|
|
|
|
if (response != null || response!.Data != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
} else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API didn't respond with online users.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<UserInformationDto>> GetUserInformationAsync(string id)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<UserInformationDto>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var request = new RestRequest($"users/user-info")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("id", id);
|
|
var response = await _client.GetAsync<ServiceResponse<UserInformationDto>>(request);
|
|
|
|
if(response != null || response!.Data != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
} else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API did not return user information.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<UserInformationDto>> UpdateUserInformationAsync(UserUpdateInformationDto request)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<UserInformationDto>();
|
|
|
|
var restRequest = new RestRequest("users/update")
|
|
.AddJsonBody(request)
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.PutAsync<ServiceResponse<UserInformationDto>>(restRequest);
|
|
|
|
if(response != null || response!.Data != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
|
|
// anything that changes the user should tell the api service to set it again
|
|
await SetCurrentUser();
|
|
OnCurrentUserUpdate?.Invoke(this, EventArgs.Empty);
|
|
} else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API never responded.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<string>> UpdateUserProfilePic(string filePath)
|
|
{
|
|
var serviceResponse = new ServiceResponse<string>();
|
|
|
|
try
|
|
{
|
|
var restRequest = new RestRequest($"users/upload-profile-pic")
|
|
.AddQueryParameter("userId", CurrentUser!.Id)
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddFile("file", filePath);
|
|
var response = await _client.PostAsync<ServiceResponse<string>>(restRequest);
|
|
|
|
if (response != null && response.Success != false)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
|
|
// anything that changes the user should tell the api service to set it again
|
|
await SetCurrentUser();
|
|
OnCurrentUserUpdate?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Data = "Upload Failed.";
|
|
}
|
|
} catch (JsonException)
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "Profile Pictures Can Only Be Less Then 3 MB In Size.";
|
|
} catch (HttpRequestException ex)
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Data = ex.Message;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<byte[]>> GetUserProfilePic(string userId)
|
|
{
|
|
var serviceResponse = new ServiceResponse<byte[]>();
|
|
try
|
|
{
|
|
var restRequest = new RestRequest($"users/profile-pic/{userId}")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync(restRequest);
|
|
|
|
if (response != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.RawBytes;
|
|
}
|
|
else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "No Profile Picture Received.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
} catch (HttpRequestException ex)
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = ex.Message;
|
|
return serviceResponse;
|
|
}
|
|
}
|
|
|
|
public async Task<ServiceResponse<User>> LoginAsync(UserLoginDto userLoginDto)
|
|
{
|
|
var serviceResponse = new ServiceResponse<User>();
|
|
|
|
try
|
|
{
|
|
if (string.IsNullOrWhiteSpace(userLoginDto.Email) || string.IsNullOrWhiteSpace(userLoginDto.Password))
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "Email or Password cannot be null.";
|
|
}
|
|
|
|
var request = new RestRequest("auth/login")
|
|
.AddJsonBody(userLoginDto);
|
|
var response = await _client.PostAsync<ServiceResponse<string>>(request);
|
|
|
|
if (response != null)
|
|
{
|
|
if (response.Data != null && response.Success)
|
|
{
|
|
SessionToken = response.Data!;
|
|
|
|
await File.WriteAllTextAsync("./session.token", response.Message);
|
|
|
|
var user = await SetCurrentUser();
|
|
|
|
serviceResponse.Success = true;
|
|
if (response.Message != null) serviceResponse.Message = response.Message;
|
|
serviceResponse.Data = user;
|
|
}
|
|
else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = response.Message;
|
|
}
|
|
}
|
|
} catch (Exception ex)
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = ex.Message;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<User> SetCurrentUser()
|
|
{
|
|
var userRequest = new RestRequest("users/user-authorized")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var userResponse = await _client.GetAsync<ServiceResponse<User>>(userRequest);
|
|
|
|
if (userResponse != null && userResponse.Success && userResponse.Data != null)
|
|
{
|
|
user = userResponse.Data;
|
|
return userResponse.Data;
|
|
} else
|
|
{
|
|
throw new NullReferenceException("Current User could not be set.");
|
|
}
|
|
}
|
|
|
|
public async Task<ServiceResponse<User>> RefreshLogin(string refreshToken)
|
|
{
|
|
var serviceResponse = new ServiceResponse<User>();
|
|
|
|
try
|
|
{
|
|
if (string.IsNullOrEmpty(refreshToken))
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "No Refresh Token Specified.";
|
|
}
|
|
|
|
var request = new RestRequest("auth/refresh")
|
|
.AddQueryParameter("token", refreshToken);
|
|
var response = await _client.PostAsync<ServiceResponse<string>>(request);
|
|
|
|
if (response != null && response.Success != false)
|
|
{
|
|
SessionToken = response.Data;
|
|
|
|
if (user == null)
|
|
{
|
|
var user = await SetCurrentUser();
|
|
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = user;
|
|
}
|
|
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = CurrentUser;
|
|
}
|
|
else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API didn't respond with a session token.";
|
|
}
|
|
} catch (Exception ex)
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = ex.Message;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<string>> RefreshSessionIfInvalid()
|
|
{
|
|
var tokenHandler = new JwtSecurityTokenHandler();
|
|
var refToken = await File.ReadAllTextAsync("./session.token");
|
|
|
|
JwtSecurityToken token = tokenHandler.ReadJwtToken(SessionToken);
|
|
|
|
if(DateTime.Compare(DateTime.UtcNow, token.ValidTo) > 0)
|
|
{
|
|
if (!File.Exists("./session.token")) { return new ServiceResponse<string> { Success = false, Message = "Session File Not Found. Session Expired." }; }
|
|
|
|
var result = await RefreshLogin(refToken);
|
|
|
|
if (result == null || result.Success == false)
|
|
{
|
|
File.Delete("./session.token");
|
|
|
|
return new ServiceResponse<string> { Success = false, Message = "Session Expired." };
|
|
} else return new ServiceResponse<string> { Success = true, Data = refToken };
|
|
} else return new ServiceResponse<string> { Success = true, Data = refToken };
|
|
}
|
|
|
|
public async Task<ServiceResponse<User>> RegisterAsync(UserDto userDto)
|
|
{
|
|
var serviceResponse = new ServiceResponse<User>();
|
|
|
|
if (string.IsNullOrEmpty(userDto.Username) || string.IsNullOrEmpty(userDto.Password) || string.IsNullOrEmpty(userDto.Email))
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "Incomplete UserDto.";
|
|
}
|
|
|
|
var request = new RestRequest("auth/register")
|
|
.AddJsonBody(userDto);
|
|
var response = await _client.PostAsync<ServiceResponse<User>>(request);
|
|
|
|
if (response != null || response!.Success == true)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
} else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API never responded with created user.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<Room>> CreateRoomAsync(RoomDto request)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<Room>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest($"rooms/create-room?userId={user!.Id}")
|
|
.AddJsonBody(request)
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.PostAsync<ServiceResponse<Room>>(restRequest);
|
|
|
|
if(response != null || response!.Data != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
} else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API never responded with created room.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<List<Room>>> GetAllRoomsAsync()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<List<Room>>();
|
|
|
|
if(SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var request = new RestRequest("rooms/get-all-rooms")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync<ServiceResponse<List<Room>>>(request);
|
|
|
|
if (response != null || response!.Data != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API never responded with rooms.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<Room>> DeleteRoomAsync(string roomId)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<Room>();
|
|
|
|
if(SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var request = new RestRequest($"rooms/delete-room?roomId={roomId}")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.DeleteAsync<ServiceResponse<Room>>(request);
|
|
|
|
if (response != null || response!.Data != null)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
} else
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API never responded.";
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<List<Contact>>> GetCurrentUserContacts()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<List<Contact>>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var request = new RestRequest("contacts/get-user-contacts")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddJsonBody(CurrentUser!);
|
|
var response = await _client.GetAsync<ServiceResponse<List<Contact>>>(request);
|
|
|
|
if (response == null)
|
|
{
|
|
serviceResponse.Success = false;
|
|
serviceResponse.Message = "API didn't respond.";
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
if (response.Message == "User Has No Contacts.")
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Message = "No Contacts Found.";
|
|
}
|
|
|
|
if (response.Success == true)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<Contact>> AddContactToCurrentUser(string userId)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<Contact>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("contacts/add-contact")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("ownerId", CurrentUser!.Id)
|
|
.AddQueryParameter("userId", userId);
|
|
var response = await _client.PostAsync<ServiceResponse<Contact>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<bool>> AcceptContactRequest(string userId)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<bool>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("contacts/approve-contact")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("ownerId", CurrentUser!.Id)
|
|
.AddQueryParameter("userId", userId);
|
|
var response = await _client.PostAsync<ServiceResponse<bool>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<Contact>> RemoveContactFromCurrentUser(string userId)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<Contact>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("contacts/remove-contact")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("userId", userId);
|
|
var response = await _client.DeleteAsync<ServiceResponse<Contact>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<int>> AddCurrencyToCurrentUser(int amount, bool isSpinClaim)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<int>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("users/update-user-currency")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("amount", amount)
|
|
.AddQueryParameter("isSpinClaim", isSpinClaim);
|
|
var response = await _client.PostAsync<ServiceResponse<int>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
|
|
// anything that changes the user should tell the api service to set it again
|
|
await SetCurrentUser();
|
|
OnCurrentUserUpdate?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<int>> GetCurrentStockPrice()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<int>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("games/stock-market/current-price")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync<ServiceResponse<int>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<UserStockActionResultDto>> BuyStock(int amount)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<UserStockActionResultDto>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("games/stock-market/buy-stock")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("amount", amount);
|
|
var response = await _client.PostAsync<ServiceResponse<UserStockActionResultDto>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
|
|
// anything that changes the user should tell the api service to set it again
|
|
await SetCurrentUser();
|
|
OnCurrentUserUpdate?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<UserStockActionResultDto>> SellStock(int amount)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<UserStockActionResultDto>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("games/stock-market/sell-stock")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("amount", amount);
|
|
var response = await _client.PostAsync<ServiceResponse<UserStockActionResultDto>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
|
|
// anything that changes the user should tell the api service to set it again
|
|
await SetCurrentUser();
|
|
OnCurrentUserUpdate?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<int>> GetRandomNumber()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<int>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("games/number-guess/get-number")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync<ServiceResponse<int>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<NumberGuessResult>> GuessRandomNumber(int original, int guess)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<NumberGuessResult>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("games/number-guess/guess-number")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("original", original)
|
|
.AddQueryParameter("guess", guess);
|
|
var response = await _client.GetAsync<ServiceResponse<NumberGuessResult>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<List<StoreItem>>> GetStoreItems()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<List<StoreItem>>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("store/all-items")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync<ServiceResponse<List<StoreItem>>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<StoreItem>> GetStoreItem(int id)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<StoreItem>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("store/item")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("id", id);
|
|
var response = await _client.GetAsync<ServiceResponse<StoreItem>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<bool>> BuyStoreItem(int id)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<bool>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("store/buy-item")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("id", id);
|
|
var response = await _client.PostAsync<ServiceResponse<bool>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
|
|
// anything that changes the user should tell the api service to set it again
|
|
await SetCurrentUser();
|
|
OnCurrentUserUpdate?.Invoke(this, EventArgs.Empty);
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<List<OwnedStoreItem>>> GetOwnedStoreItems()
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<List<OwnedStoreItem>>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("store/bought-items")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
|
var response = await _client.GetAsync<ServiceResponse<List<OwnedStoreItem>>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<OwnedStoreItem>> GetOwnedStoreItem(int id)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<OwnedStoreItem>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("store/bought-item")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("id", id);
|
|
var response = await _client.GetAsync<ServiceResponse<OwnedStoreItem>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
|
|
public async Task<ServiceResponse<User>> DeleteUserById(string id)
|
|
{
|
|
await RefreshSessionIfInvalid();
|
|
|
|
var serviceResponse = new ServiceResponse<User>();
|
|
|
|
if (SessionToken == null) throw new NullReferenceException("Function Was Called Before A Session Was Made.");
|
|
|
|
var restRequest = new RestRequest("users/delete-user")
|
|
.AddHeader("Authorization", $"Bearer {SessionToken}")
|
|
.AddQueryParameter("id", id);
|
|
var response = await _client.DeleteAsync<ServiceResponse<User>>(restRequest);
|
|
|
|
if (response == null) { serviceResponse.Success = false; serviceResponse.Message = "API did not respond."; return serviceResponse; }
|
|
|
|
if (response.Success)
|
|
{
|
|
serviceResponse.Success = true;
|
|
serviceResponse.Data = response.Data;
|
|
}
|
|
|
|
return serviceResponse;
|
|
}
|
|
}
|
|
}
|