Implement Store API Functions
Fix CurrentUser Not Being Up To Date When Updating User API Side
This commit is contained in:
parent
9fecd1fb74
commit
0d93557959
8
QtCNETAPI/Enums/StoreItemType.cs
Normal file
8
QtCNETAPI/Enums/StoreItemType.cs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
namespace QtCNETAPI.Enums
|
||||||
|
{
|
||||||
|
public enum StoreItemType
|
||||||
|
{
|
||||||
|
ProfileCosmetic = 1,
|
||||||
|
ClientCosmetic = 2
|
||||||
|
}
|
||||||
|
}
|
14
QtCNETAPI/Models/OwnedStoreItem.cs
Normal file
14
QtCNETAPI/Models/OwnedStoreItem.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
|
|
||||||
|
namespace QtCNETAPI.Models
|
||||||
|
{
|
||||||
|
public class OwnedStoreItem
|
||||||
|
{
|
||||||
|
[Key]
|
||||||
|
public int Id { get; set; }
|
||||||
|
public string UserId { get; set; } = string.Empty;
|
||||||
|
public int StoreItemId { get; set; }
|
||||||
|
|
||||||
|
public virtual User? User { get; }
|
||||||
|
}
|
||||||
|
}
|
@ -15,9 +15,11 @@
|
|||||||
public int CurrencyAmount { get; set; } = 0;
|
public int CurrencyAmount { get; set; } = 0;
|
||||||
public int StockAmount { get; set; } = 0;
|
public int StockAmount { get; set; } = 0;
|
||||||
public DateTime LastCurrencySpin { get; set; }
|
public DateTime LastCurrencySpin { get; set; }
|
||||||
|
public int ActiveProfileCosmetic { get; set; } = 0;
|
||||||
|
|
||||||
public virtual IEnumerable<RefreshToken>? RefreshTokens { get; }
|
public virtual IEnumerable<RefreshToken>? RefreshTokens { get; }
|
||||||
public virtual IEnumerable<Contact>? ContactsMade { get; }
|
public virtual IEnumerable<Contact>? ContactsMade { get; }
|
||||||
public virtual IEnumerable<Contact>? ContactsList { get; }
|
public virtual IEnumerable<Contact>? ContactsList { get; }
|
||||||
|
public virtual IEnumerable<OwnedStoreItem>? OwnedStoreItems { get; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
23
QtCNETAPI/Schema/StoreItem.cs
Normal file
23
QtCNETAPI/Schema/StoreItem.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using QtCNETAPI.Enums;
|
||||||
|
using System.Text.Json.Serialization;
|
||||||
|
|
||||||
|
namespace QtCNETAPI.Schema
|
||||||
|
{
|
||||||
|
public class StoreItem
|
||||||
|
{
|
||||||
|
[JsonPropertyName("Id")]
|
||||||
|
public int Id { get; set; }
|
||||||
|
[JsonPropertyName("Type")]
|
||||||
|
public StoreItemType Type { get; set; }
|
||||||
|
[JsonPropertyName("Price")]
|
||||||
|
public int Price { get; set; }
|
||||||
|
[JsonPropertyName("Name")]
|
||||||
|
public string Name { get; set; } = string.Empty;
|
||||||
|
[JsonPropertyName("Description")]
|
||||||
|
public string Description { get; set; } = string.Empty;
|
||||||
|
[JsonPropertyName("AssetUrl")]
|
||||||
|
public string AssetUrl { get; set; } = string.Empty;
|
||||||
|
[JsonPropertyName("ThumbnailUrl")]
|
||||||
|
public string ThumbnailUrl { get; set; } = string.Empty;
|
||||||
|
}
|
||||||
|
}
|
@ -2,6 +2,7 @@
|
|||||||
using QtCNETAPI.Dtos.User;
|
using QtCNETAPI.Dtos.User;
|
||||||
using QtCNETAPI.Enums;
|
using QtCNETAPI.Enums;
|
||||||
using QtCNETAPI.Models;
|
using QtCNETAPI.Models;
|
||||||
|
using QtCNETAPI.Schema;
|
||||||
using RestSharp;
|
using RestSharp;
|
||||||
using System.IdentityModel.Tokens.Jwt;
|
using System.IdentityModel.Tokens.Jwt;
|
||||||
using System.Resources;
|
using System.Resources;
|
||||||
@ -151,10 +152,8 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
serviceResponse.Success = true;
|
serviceResponse.Success = true;
|
||||||
serviceResponse.Data = response.Data;
|
serviceResponse.Data = response.Data;
|
||||||
|
|
||||||
// update currentuser model
|
// anything that changes the user should tell the api service to set it again
|
||||||
CurrentUser!.Username = response.Data!.Username;
|
await SetCurrentUser();
|
||||||
CurrentUser.Bio = response.Data.Bio;
|
|
||||||
CurrentUser.DateOfBirth = response.Data.DateOfBirth;
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
serviceResponse.Success = false;
|
serviceResponse.Success = false;
|
||||||
@ -180,6 +179,9 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
{
|
{
|
||||||
serviceResponse.Success = true;
|
serviceResponse.Success = true;
|
||||||
serviceResponse.Data = response.Data;
|
serviceResponse.Data = response.Data;
|
||||||
|
|
||||||
|
// anything that changes the user should tell the api service to set it again
|
||||||
|
await SetCurrentUser();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -273,16 +275,16 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
return serviceResponse;
|
return serviceResponse;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task<User> SetCurrentUser()
|
public async Task<User> SetCurrentUser()
|
||||||
{
|
{
|
||||||
var userRequest = new RestRequest("users/user-authorized")
|
var userRequest = new RestRequest("users/user-authorized")
|
||||||
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
.AddHeader("Authorization", $"Bearer {SessionToken}");
|
||||||
var userResponse = await _client.GetAsync<ServiceResponse<User>>(userRequest);
|
var userResponse = await _client.GetAsync<ServiceResponse<User>>(userRequest);
|
||||||
|
|
||||||
if (userResponse != null || userResponse!.Data != null)
|
if (userResponse != null && userResponse.Success && userResponse.Data != null)
|
||||||
{
|
{
|
||||||
user = userResponse.Data;
|
user = userResponse.Data;
|
||||||
return userResponse.Data!;
|
return userResponse.Data;
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
throw new NullReferenceException("Current User could not be set.");
|
throw new NullReferenceException("Current User could not be set.");
|
||||||
@ -565,6 +567,9 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
{
|
{
|
||||||
serviceResponse.Success = true;
|
serviceResponse.Success = true;
|
||||||
serviceResponse.Data = response.Data;
|
serviceResponse.Data = response.Data;
|
||||||
|
|
||||||
|
// anything that changes the user should tell the api service to set it again
|
||||||
|
await SetCurrentUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
return serviceResponse;
|
return serviceResponse;
|
||||||
@ -590,6 +595,9 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
{
|
{
|
||||||
serviceResponse.Success = true;
|
serviceResponse.Success = true;
|
||||||
serviceResponse.Data = response.Data;
|
serviceResponse.Data = response.Data;
|
||||||
|
|
||||||
|
// anything that changes the user should tell the api service to set it again
|
||||||
|
await SetCurrentUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
return serviceResponse;
|
return serviceResponse;
|
||||||
@ -713,5 +721,123 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
|
|
||||||
return serviceResponse;
|
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<OwnedStoreItem>> BuyStoreItem(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/buy-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<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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using QtCNETAPI.Enums;
|
using QtCNETAPI.Enums;
|
||||||
|
using QtCNETAPI.Schema;
|
||||||
|
|
||||||
namespace QtCNETAPI.Services.ApiService
|
namespace QtCNETAPI.Services.ApiService
|
||||||
{
|
{
|
||||||
@ -22,6 +23,7 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
public Task<ServiceResponse<User>> LoginAsync(UserLoginDto userLoginDto);
|
public Task<ServiceResponse<User>> LoginAsync(UserLoginDto userLoginDto);
|
||||||
public Task<ServiceResponse<User>> RefreshLogin(string refreshToken);
|
public Task<ServiceResponse<User>> RefreshLogin(string refreshToken);
|
||||||
public Task<ServiceResponse<string>> RefreshSessionIfInvalid();
|
public Task<ServiceResponse<string>> RefreshSessionIfInvalid();
|
||||||
|
public Task<User> SetCurrentUser();
|
||||||
public Task<ServiceResponse<User>> RegisterAsync(UserDto userDto);
|
public Task<ServiceResponse<User>> RegisterAsync(UserDto userDto);
|
||||||
public Task<ServiceResponse<UserInformationDto>> GetUserInformationAsync(string id);
|
public Task<ServiceResponse<UserInformationDto>> GetUserInformationAsync(string id);
|
||||||
public Task<ServiceResponse<UserInformationDto>> UpdateUserInformationAsync(UserUpdateInformationDto request);
|
public Task<ServiceResponse<UserInformationDto>> UpdateUserInformationAsync(UserUpdateInformationDto request);
|
||||||
@ -40,5 +42,10 @@ namespace QtCNETAPI.Services.ApiService
|
|||||||
public Task<ServiceResponse<UserStockActionResultDto>> SellStock(int amount);
|
public Task<ServiceResponse<UserStockActionResultDto>> SellStock(int amount);
|
||||||
public Task<ServiceResponse<int>> GetRandomNumber();
|
public Task<ServiceResponse<int>> GetRandomNumber();
|
||||||
public Task<ServiceResponse<NumberGuessResult>> GuessRandomNumber(int original, int guess);
|
public Task<ServiceResponse<NumberGuessResult>> GuessRandomNumber(int original, int guess);
|
||||||
|
public Task<ServiceResponse<List<StoreItem>>> GetStoreItems();
|
||||||
|
public Task<ServiceResponse<StoreItem>> GetStoreItem(int id);
|
||||||
|
public Task<ServiceResponse<OwnedStoreItem>> BuyStoreItem(int id);
|
||||||
|
public Task<ServiceResponse<List<OwnedStoreItem>>> GetOwnedStoreItems();
|
||||||
|
public Task<ServiceResponse<OwnedStoreItem>> GetOwnedStoreItem(int id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,6 +173,9 @@ namespace QtCNETAPI.Services.GatewayService
|
|||||||
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
if (HubConnection == null || HubConnection.State != HubConnectionState.Connected) throw new InvalidOperationException("Function was called before connection was made.");
|
||||||
|
|
||||||
await HubConnection.SendAsync("UpdateStatus", _apiService.CurrentUser, status);
|
await HubConnection.SendAsync("UpdateStatus", _apiService.CurrentUser, status);
|
||||||
|
|
||||||
|
// anything that changes the user should tell the api service to set it again
|
||||||
|
await _apiService.SetCurrentUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user