From a22e37d641c19c8d5314c602fd7c1ce662eb0bab Mon Sep 17 00:00:00 2001 From: David Ellams Date: Sat, 9 Sep 2023 11:33:13 -0600 Subject: [PATCH] - Continued work on upgrading the OASIS API NFT API. - Created IMintAndPlaceGeoSpatialNFTRequest, IOASISGeoSpatialNFT, IPlaceGeoSpatialNFTRequest, IPlaceGeoSpatialNFTRequestBase & IMintNFTTransaction interfaces in OASIS.API.Core. - Updated IOASISNFT interface in OASIS.API.Core by adding ThumbnailUrl, Token, Hash and MetaData properties. - Updated IOASISNFTProvider interface in OASIS.API.Core by adding MintNFT, MintNFTAsync, LoadNFT, LoadNFTAsync, LoadAllNFTsForAvatar, LoadAllNFTsForAvatarAsync, LoadAllNFTsForMintAddress, LoadAllNFTsForMintAddressAsync, PlaceGeoNFT, PlaceGeoNFTAsync, MintAndPlaceGeoNFT & MintAndPlaceGeoNFTAsync functions. - Removed Date from IWalletTransaction and WalletTransaction in OASIS.API.Core (this should be set by the relevant managers (NFTManger, WalletManager etc) so the date is always set to Now and so the date cannot be forged then.) - Added Hash, ThumbnailUrl, Token & MetaData to OASISNFT in OASIS.API.Core. - Created NFTProviderType enum in OASIS.API.ONode.Core. - Updated INFTManager interface in OASIS.API.ONode.Core by adding CreateNftTransactionAsync, CreateNftTransaction, MintNftAsync, MintNft, LoadNftAsync, LoadNft, GetNFTProvider, GetNFTProviderTypeFromProviderType & GetProviderTypeFromNFTProviderType functions. - Created ICreateNftTransactionRequest, IPurchaseOlandRequest & IPurchaseOlandResponse interfaces in OASIS.API.ONode.Core. - Updated NFTManager in OASIS.API.ONode.Core by adding CreateNftTransactionAsync, CreateNftTransaction, MintNftAsync, MintNft, LoadNftAsync, LoadNft, GetNFTProvider, GetNFTProviderTypeFromProviderType & GetProviderTypeFromNFTProviderType functions. - Added CreateNftTransactionRequest object to OASIS.API.ONode.Core. - Removed CargoSaleId property from PurchaseOlandRequest object in OASIS.API.ONode.Core. - PurchaseOlandResponse object now implements new IPurchaseOlandResponse interface in OASIS.API.ONode.Core. - Updated NFTController in OASIS.API.ONode.WebAPI by removing all references to the new obsolete NFTService and pointing methods CreateNftTransaction to the new NFTManger in OASIS.API.ONode.Core instead. Also added new MintNFT function. - Removed the rest of the now retired NFTService in OASIS.API.ONode.WebAPI. --- .../IMintAndPlaceGeoSpatialNFTRequest.cs | 8 + .../IOASISGeoSpatialNFT.cs | 2 +- .../IPlaceGeoSpatialNFTRequest.cs | 12 + .../IPlaceGeoSpatialNFTRequestBase.cs | 12 + .../Interfaces/NFT/IMintNFTTransaction.cs | 23 ++ .../Interfaces/NFT/IOASISNFT.cs | 5 +- .../Interfaces/Providers/IOASISNFTProvider.cs | 22 ++ .../Interfaces/Wallets/IWalletTransaction.cs | 2 - .../Objects/OASISGeoSpatialNFT.cs | 2 +- .../Objects/OASISNFT.cs | 7 +- .../Objects/Wallets/TransactionRespone.cs | 1 - .../Objects/Wallets/WalletTransaction.cs | 1 - .../Enums/NFTProviderType.cs | 11 + .../Interfaces/Managers/INFTManager.cs | 19 +- .../Objects/ICreateNftTransactionRequest.cs | 15 + .../Objects/IPurchaseOlandRequest.cs | 16 ++ .../Objects/IPurchaseOlandResponse.cs | 12 + .../Managers/NFTManager - Copy.cs | 234 ---------------- .../Managers/NFTManager.cs | 264 ++++++++++++++---- .../Objects/CreateNftTransactionRequest.cs | 16 ++ .../Objects/PurchaseOlandRequest.cs | 4 +- .../Objects/PurchaseOlandResponse.cs | 5 +- .../Controllers/NftController.cs | 28 +- .../Interfaces/INftService.cs | 100 +++---- 24 files changed, 456 insertions(+), 365 deletions(-) create mode 100644 NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IMintAndPlaceGeoSpatialNFTRequest.cs rename NextGenSoftware.OASIS.API.Core/Interfaces/NFT/{ => GeoSpatialNFT}/IOASISGeoSpatialNFT.cs (81%) create mode 100644 NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequest.cs create mode 100644 NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequestBase.cs create mode 100644 NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IMintNFTTransaction.cs create mode 100644 NextGenSoftware.OASIS.API.ONODE.Core/Enums/NFTProviderType.cs create mode 100644 NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/ICreateNftTransactionRequest.cs create mode 100644 NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandRequest.cs create mode 100644 NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandResponse.cs delete mode 100644 NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager - Copy.cs create mode 100644 NextGenSoftware.OASIS.API.ONODE.Core/Objects/CreateNftTransactionRequest.cs diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IMintAndPlaceGeoSpatialNFTRequest.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IMintAndPlaceGeoSpatialNFTRequest.cs new file mode 100644 index 00000000..515e41be --- /dev/null +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IMintAndPlaceGeoSpatialNFTRequest.cs @@ -0,0 +1,8 @@ + +namespace NextGenSoftware.OASIS.API.Core.Interfaces.NFT.GeoSpatialNFT +{ + public interface IMintAndPlaceGeoSpatialNFTRequest : IMintNFTTransaction, IPlaceGeoSpatialNFTRequestBase + { + + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IOASISGeoSpatialNFT.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IOASISGeoSpatialNFT.cs similarity index 81% rename from NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IOASISGeoSpatialNFT.cs rename to NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IOASISGeoSpatialNFT.cs index 92bd8078..a12949ca 100644 --- a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IOASISGeoSpatialNFT.cs +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IOASISGeoSpatialNFT.cs @@ -1,4 +1,4 @@ -namespace NextGenSoftware.OASIS.API.Core.Interfaces.NFT +namespace NextGenSoftware.OASIS.API.Core.Interfaces.NFT.GeoSpatialNFT { public interface IOASISGeoSpatialNFT : IOASISNFT { diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequest.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequest.cs new file mode 100644 index 00000000..17d47ded --- /dev/null +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequest.cs @@ -0,0 +1,12 @@ +using System; + +namespace NextGenSoftware.OASIS.API.Core.Interfaces.NFT.GeoSpatialNFT +{ + public interface IPlaceGeoSpatialNFTRequest : IPlaceGeoSpatialNFTRequestBase + { + public Guid OASISNFTId { get; set; } + public string NFTHash { get; set; } + public string NFTURL { get; set; } + public Guid AvatarId { get; set; } + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequestBase.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequestBase.cs new file mode 100644 index 00000000..012ef2f7 --- /dev/null +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/GeoSpatialNFT/IPlaceGeoSpatialNFTRequestBase.cs @@ -0,0 +1,12 @@ +namespace NextGenSoftware.OASIS.API.Core.Interfaces.NFT.GeoSpatialNFT +{ + public interface IPlaceGeoSpatialNFTRequestBase + { + public long Lat { get; set; } + public long Long { get; set; } + public bool AllowOtherPlayersToAlsoCollect { get; set; } + public bool PermSpawn { get; set; } + public int GlobalSpawnQuantity { get; set; } + public int PlayerSpawnQuantity { get; set; } + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IMintNFTTransaction.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IMintNFTTransaction.cs new file mode 100644 index 00000000..e1e82f26 --- /dev/null +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IMintNFTTransaction.cs @@ -0,0 +1,23 @@ +using NextGenSoftware.OASIS.API.Core.Enums; +using System; +using System.Collections.Generic; + +namespace NextGenSoftware.OASIS.API.Core.Interfaces.NFT +{ + public interface IMintNFTTransaction + { + public string MintWalletAddress { get; set; } + public Guid MintedByAvatarId { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public byte[] Thumbnail { get; set; } + public string ThumbnailUrl { get; set; } + public decimal Price { get; set; } + public decimal Discount { get; set; } + public string Token { get; set; } //TODO: Should be dervied from the OnChainProvider so may not need this? + public int NumberToMint { get; set; } + public Dictionary MetaData { get; set; } + public ProviderType OffChainProvider { get; set; } + public ProviderType OnChainProvider { get; set; } + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IOASISNFT.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IOASISNFT.cs index e9c15d2a..7eb04184 100644 --- a/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IOASISNFT.cs +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/NFT/IOASISNFT.cs @@ -9,10 +9,13 @@ public interface IOASISNFT Guid Id { get; set; } Guid MintedByAvatarId { get; set; } string MintedByAddress { get; set; } + string Hash { get; set; } decimal Price { get; set; } decimal Discount { get; set; } byte[] Thumbnail { get; set; } - Dictionary MetaData { get; set; } + string ThumbnailUrl { get; set; } + public string Token { get; set; } //TODO: Should be dervied from the OnChainProvider so may not need this? + Dictionary MetaData { get; set; } ProviderType OffChainProvider { get; set; } ProviderType OnChainProvider { get; set; } } diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/Providers/IOASISNFTProvider.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/Providers/IOASISNFTProvider.cs index f2ab4440..ec585e12 100644 --- a/NextGenSoftware.OASIS.API.Core/Interfaces/Providers/IOASISNFTProvider.cs +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/Providers/IOASISNFTProvider.cs @@ -1,7 +1,10 @@  using NextGenSoftware.OASIS.API.Core.Helpers; using NextGenSoftware.OASIS.API.Core.Interfaces.NFT; +using NextGenSoftware.OASIS.API.Core.Interfaces.NFT.GeoSpatialNFT; using NextGenSoftware.OASIS.API.Core.Objects.Wallets; +using System; +using System.Collections.Generic; using System.Threading.Tasks; namespace NextGenSoftware.OASIS.API.Core.Interfaces @@ -11,5 +14,24 @@ public interface IOASISNFTProvider : IOASISProvider //TODO: More to come soon... ;-) public OASISResult SendNFT(INFTWalletTransaction transation); public Task> SendNFTAsync(INFTWalletTransaction transation); + + public OASISResult MintNFT(IMintNFTTransaction transation); + public Task> MintNFTAsync(IMintNFTTransaction transation); + + //These load methods below will apply ONLY to the specefic provider/blockchain that they are implemented on. So will not load for ALL providers across the OASIS, but the versions implemented on NFTManger DOES... + public OASISResult LoadNFT(Guid id); + public Task> LoadNFTAsync(Guid id); + + public OASISResult> LoadAllNFTsForAvatar(Guid avatarId); + public Task>> LoadAllNFTsForAvatarAsync(Guid avatarId); + + public OASISResult> LoadAllNFTsForMintAddress(string mintWalletAddress); + public Task>> LoadAllNFTsForMintAddressAsync(string mintWalletAddress); + + public OASISResult PlaceGeoNFT(IPlaceGeoSpatialNFTRequest request); + public Task> PlaceGeoNFTAsync(IPlaceGeoSpatialNFTRequest request); + + public OASISResult MintAndPlaceGeoNFT(IMintAndPlaceGeoSpatialNFTRequest request); + public Task> MintAndPlaceGeoNFTAsync(IMintAndPlaceGeoSpatialNFTRequest request); } } \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.Core/Interfaces/Wallets/IWalletTransaction.cs b/NextGenSoftware.OASIS.API.Core/Interfaces/Wallets/IWalletTransaction.cs index 30f65b2e..5f523e5d 100644 --- a/NextGenSoftware.OASIS.API.Core/Interfaces/Wallets/IWalletTransaction.cs +++ b/NextGenSoftware.OASIS.API.Core/Interfaces/Wallets/IWalletTransaction.cs @@ -1,5 +1,4 @@  -using System; using NextGenSoftware.OASIS.API.Core.Enums; namespace NextGenSoftware.OASIS.API.Core.Interfaces @@ -11,7 +10,6 @@ public interface IWalletTransaction public string ToWalletAddress { get; set; } public string Token { get; set; } public string MemoText { get; set; } - public DateTime Date { get; set; } public ProviderType ProviderType { get; set; } } } \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.Core/Objects/OASISGeoSpatialNFT.cs b/NextGenSoftware.OASIS.API.Core/Objects/OASISGeoSpatialNFT.cs index 558d9a6a..b29c837b 100644 --- a/NextGenSoftware.OASIS.API.Core/Objects/OASISGeoSpatialNFT.cs +++ b/NextGenSoftware.OASIS.API.Core/Objects/OASISGeoSpatialNFT.cs @@ -1,4 +1,4 @@ -using NextGenSoftware.OASIS.API.Core.Interfaces.NFT; +using NextGenSoftware.OASIS.API.Core.Interfaces.NFT.GeoSpatialNFT; namespace NextGenSoftware.OASIS.API.Core.Objects { diff --git a/NextGenSoftware.OASIS.API.Core/Objects/OASISNFT.cs b/NextGenSoftware.OASIS.API.Core/Objects/OASISNFT.cs index 0be6fb42..259e842c 100644 --- a/NextGenSoftware.OASIS.API.Core/Objects/OASISNFT.cs +++ b/NextGenSoftware.OASIS.API.Core/Objects/OASISNFT.cs @@ -14,12 +14,13 @@ public class OASISNFT : IOASISNFT /// The wallet address /// public string MintedByAddress { get; set; } + public string Hash { get; set; } public decimal Price { get; set; } public decimal Discount { get; set; } - public byte[] Thumbnail { get; set; } - - public Dictionary MetaData { get; set; } = new Dictionary(); + public string ThumbnailUrl { get; set; } + public string Token { get; set; } //TODO: Should be dervied from the OnChainProvider so may not need this? + public Dictionary MetaData { get; set; } = new Dictionary(); /// /// The Blockchain to store the token on. diff --git a/NextGenSoftware.OASIS.API.Core/Objects/Wallets/TransactionRespone.cs b/NextGenSoftware.OASIS.API.Core/Objects/Wallets/TransactionRespone.cs index d3ae6e5c..61166e16 100644 --- a/NextGenSoftware.OASIS.API.Core/Objects/Wallets/TransactionRespone.cs +++ b/NextGenSoftware.OASIS.API.Core/Objects/Wallets/TransactionRespone.cs @@ -4,6 +4,5 @@ namespace NextGenSoftware.OASIS.API.Core.Objects.Wallets public class TransactionRespone { public string TransactionResult { get; set; } - //public bool IsSuccess { get; set; } //Redundant because will always be wrapped in a OASISResult which contains IsSuccess and IsError etc... } } \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.Core/Objects/Wallets/WalletTransaction.cs b/NextGenSoftware.OASIS.API.Core/Objects/Wallets/WalletTransaction.cs index 96e6f220..5993f857 100644 --- a/NextGenSoftware.OASIS.API.Core/Objects/Wallets/WalletTransaction.cs +++ b/NextGenSoftware.OASIS.API.Core/Objects/Wallets/WalletTransaction.cs @@ -12,7 +12,6 @@ public class WalletTransaction : IWalletTransaction public string ToWalletAddress { get; set; } public string Token { get; set; } public string MemoText { get; set; } - public DateTime Date { get; set; } public ProviderType ProviderType { get; set; } } } \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Enums/NFTProviderType.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Enums/NFTProviderType.cs new file mode 100644 index 00000000..756a88c5 --- /dev/null +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Enums/NFTProviderType.cs @@ -0,0 +1,11 @@ + +namespace NextGenSoftware.OASIS.API.ONode.Core.Objects +{ + public enum NFTProviderType + { + None, + Solana, + Ethereum, + EOS + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Managers/INFTManager.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Managers/INFTManager.cs index 1d085636..e3e5cf12 100644 --- a/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Managers/INFTManager.cs +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Managers/INFTManager.cs @@ -1,12 +1,27 @@ -using NextGenSoftware.OASIS.API.Core.Helpers; +using System; +using System.Threading.Tasks; +using NextGenSoftware.OASIS.API.Core.Enums; +using NextGenSoftware.OASIS.API.Core.Helpers; +using NextGenSoftware.OASIS.API.Core.Interfaces; using NextGenSoftware.OASIS.API.Core.Interfaces.NFT; using NextGenSoftware.OASIS.API.Core.Objects.Wallets; -using System.Threading.Tasks; +using NextGenSoftware.OASIS.API.ONode.Core.Objects; namespace NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Managers { public interface INFTManager { + Task> CreateNftTransactionAsync(CreateNftTransactionRequest request); + OASISResult CreateNftTransaction(CreateNftTransactionRequest request); Task> CreateNftTransactionAsync(INFTWalletTransaction request); + OASISResult CreateNftTransaction(INFTWalletTransaction request); + Task> MintNftAsync(IMintNFTTransaction request); + OASISResult MintNft(IMintNFTTransaction request); + Task> LoadNftAsync(Guid id, NFTProviderType NFTProviderType); + OASISResult LoadNft(Guid id, NFTProviderType NFTProviderType); + IOASISNFTProvider GetNFTProvider(NFTProviderType NFTProviderType, ref OASISResult result, string errorMessage); + IOASISNFTProvider GetNFTProvider(ProviderType providerType, ref OASISResult result, string errorMessage); + NFTProviderType GetNFTProviderTypeFromProviderType(ProviderType providerType); + ProviderType GetProviderTypeFromNFTProviderType(NFTProviderType nftProviderType); } } \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/ICreateNftTransactionRequest.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/ICreateNftTransactionRequest.cs new file mode 100644 index 00000000..ee32fa89 --- /dev/null +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/ICreateNftTransactionRequest.cs @@ -0,0 +1,15 @@ +using NextGenSoftware.OASIS.API.ONode.Core.Objects; + +namespace NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Objects +{ + public interface ICreateNftTransactionRequest + { + public NFTProviderType NFTProviderType { get; set; } + public string MintWalletAddress { get; set; } + public string FromWalletAddress { get; set; } + public string ToWalletAddress { get; set; } + public int Amount { get; set; } + public string Token { get; set; } + public string MemoText { get; set; } + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandRequest.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandRequest.cs new file mode 100644 index 00000000..a1f7187f --- /dev/null +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandRequest.cs @@ -0,0 +1,16 @@ +using NextGenSoftware.OASIS.API.Core.Enums; +using System; +using System.Collections.Generic; + +namespace NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Objects +{ + public interface IPurchaseOlandRequest + { + Guid AvatarId { get; set; } + string AvatarUsername { get; set; } + List OlandIds { get; set; } + ProviderType ProviderType { get; set; } + string Tiles { get; set; } + string WalletAddress { get; set; } + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandResponse.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandResponse.cs new file mode 100644 index 00000000..e113c07e --- /dev/null +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Interfaces/Objects/IPurchaseOlandResponse.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; + +namespace NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Objects +{ + public interface IPurchaseOlandResponse + { + List OlandIds { get; set; } + Guid OLandPurchaseId { get; set; } + string TransactionHash { get; set; } + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager - Copy.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager - Copy.cs deleted file mode 100644 index b65837ab..00000000 --- a/NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager - Copy.cs +++ /dev/null @@ -1,234 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Threading.Tasks; -//using NextGenSoftware.OASIS.API.DNA; -//using NextGenSoftware.OASIS.API.Core.Interfaces; -//using NextGenSoftware.OASIS.API.Core.Helpers; -//using NextGenSoftware.OASIS.API.Core.Objects; -//using NextGenSoftware.OASIS.API.Core.Managers; -//using NextGenSoftware.OASIS.API.Core.Objects.Wallets; -//using NextGenSoftware.OASIS.API.Core.Enums; -//using NextGenSoftware.OASIS.API.ONode.Core.Objects; - -//namespace NextGenSoftware.OASIS.API.ONode.Core.Managers -//{ -// public class NFTManager : OASISManager -// { -// private static NFTManager _instance = null; - -// public static NFTManager Instance -// { -// get -// { -// if (_instance == null) -// _instance = new NFTManager(ProviderManager.CurrentStorageProvider); - -// return _instance; -// } -// } - -// public NFTManager(IOASISStorageProvider OASISStorageProvider, OASISDNA OASISDNA = null) : base(OASISStorageProvider, OASISDNA) -// { -// _olandManager = new OLANDManager(); -// } - -// public NFTManager(OASISDNA OASISDNA = null) : base(OASISDNA) -// { -// _olandManager = new OLANDManager(); -// } - - -// //private readonly ISolanaService _solanaService; -// //private readonly ICargoService _cargoService; - -// private readonly OLANDManager _olandManager; - -// private const int OlandUnitPrice = 17; - -// /// -// /// Key: OLAND Count -// /// Value: Price -// /// -// private readonly Dictionary OlandByCountPrice = new Dictionary() -// { -// { 5, 80 }, -// { 10, 160 }, -// { 20, 325 }, -// { 25, 405 }, -// { 50, 820 }, -// { 100, 1665 }, -// { 200, 3360 }, -// { 400, 6740 }, -// { 500, 8435 }, -// { 800, 13530 }, -// { 1600, 27100 }, -// { 3200, 54000 }, -// { 6400, 108000 }, -// { 12800, 216000 }, -// { 25600, 432000 }, -// { 51200, 864000 }, -// { 102400, 1728000 }, -// { 204800, 3456000 }, -// { 409600, 6912000 }, -// { 819200, 13824000 }, -// }; - -// //public NftService(ISolanaService solanaService, ICargoService cargoService) -// //{ -// // _solanaService = solanaService; -// // _cargoService = cargoService; -// // _olandManager = new OLANDManager(); -// //} - -// public async Task> CreateNftTransaction(INFTWalletTransaction request) -// { -// OASISResult result = new OASISResult(); -// IOASISNFTProvider provider = null; -// string errorMessage = "Error occured in CreateNftTransaction in NFTManager. Reason:"; - -// try -// { -// IOASISProvider OASISProvider = ProviderManager.GetProvider(request.ProviderType); - -// if (OASISProvider != null) -// { -// if (!OASISProvider.IsProviderActivated) -// { -// OASISResult activateProviderResult = OASISProvider.ActivateProvider(); - -// if (activateProviderResult.IsError) -// ErrorHandling.HandleError(ref result, $"{errorMessage} Error occured activating provider. Reason: {activateProviderResult.Message}"); -// } -// } -// else -// ErrorHandling.HandleError(ref result, $"{errorMessage} The {Enum.GetName(typeof(ProviderType), request.ProviderType)} provider was not found."); - - -// if (!result.IsError) -// { -// provider = OASISProvider as IOASISNFTProvider; - -// if (provider != null) -// result = provider.SendNFT(request); -// else -// ErrorHandling.HandleError(ref result, $"{errorMessage} The {Enum.GetName(typeof(ProviderType), request.ProviderType)} provider is not a valid OASISNFTProvider."); -// } - -// /* -// switch (request.NftProvider) -// { -// case NftProvider.Cargo: -// var cargoPurchaseResponse = await _cargoService.PurchaseCargoSale(request.CargoExchange); -// if (cargoPurchaseResponse.IsError) -// { -// response.IsError = true; -// response.Message = cargoPurchaseResponse.Message; -// ErrorHandling.HandleError(ref response, response.Message); -// return response; -// } -// nftTransaction.TransactionResult = cargoPurchaseResponse.Result.TransactionHash; -// break; -// case NftProvider.Solana: -// var exchangeResult = await _solanaService.ExchangeTokens(request.SolanaExchange); -// if (exchangeResult.IsError) -// { -// response.IsError = true; -// response.Message = exchangeResult.Message; -// ErrorHandling.HandleError(ref response, response.Message); -// return response; -// } -// nftTransaction.TransactionResult = exchangeResult.Result.TransactionHash; -// break; -// } -// response.IsError = false;*/ - - -// } -// catch (Exception e) -// { -// ErrorHandling.HandleError(ref result, $"{errorMessage} Unknown error occured: {e.Message}", e); -// } - -// return result; -// } - -// public async Task> GetOlandPrice(int count, string couponCode) -// { -// var response = new OASISResult(); - -// try -// { -// if (count <= 0) -// ErrorHandling.HandleError(ref response, "Count property need's to be greater then zero!"); -// else -// response.Result = OlandByCountPrice.ContainsKey(count) -// ? OlandByCountPrice[count] -// : OlandUnitPrice * count; -// } -// catch (Exception e) -// { -// ErrorHandling.HandleError(ref response, e.Message, e); -// } - -// return response; -// } - -// public async Task> PurchaseOland(PurchaseOlandRequest request) -// { -// var response = new OASISResult(); -// try -// { -// if (request == null) -// { -// response.IsError = true; -// response.IsSaved = false; -// response.Message = "Request is NULL! Bad Request!"; -// ErrorHandling.HandleError(ref response, response.Message); -// return response; -// } - -// //TODO: Re-write this so is generic. -// /* -// var cargoPurchaseResponse = await _cargoService.PurchaseCargoSale(new PurchaseRequestModel(request.CargoSaleId)); -// if (cargoPurchaseResponse.IsError) -// { -// response.IsError = true; -// response.IsSaved = false; -// response.Message = cargoPurchaseResponse.Message; -// ErrorHandling.HandleError(ref response, response.Message); -// return response; -// } - -// var purchaseOlandResult = await _olandManager.PurchaseOland(new OlandPurchase() -// { -// PurchaseDate = DateTime.Now, -// Id = Guid.NewGuid(), -// Tiles = request.Tiles, -// AvatarId = request.AvatarId, -// AvatarUsername = request.AvatarUsername, -// WalletAddress = request.WalletAddress, -// OlandId = request.OlandId, -// TransactionHash = cargoPurchaseResponse.Result.TransactionHash, -// ErrorMessage = cargoPurchaseResponse.Message, -// CargoSaleId = request.CargoSaleId, -// IsSucceedPurchase = !cargoPurchaseResponse.IsError -// }); - -// response.Result = new PurchaseOlandResponse(purchaseOlandResult.Result); -// */ -// } -// catch (Exception e) -// { -// response.IsError = true; -// response.IsError = false; -// response.Message = e.Message; -// response.Exception = e; -// ErrorHandling.HandleError(ref response, e.Message); -// } -// return response; -// } - - -// //TODO: Lots more coming soon! ;-) -// } -//} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager.cs index 9d570a83..37da3388 100644 --- a/NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager.cs +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Managers/NFTManager.cs @@ -6,8 +6,10 @@ using NextGenSoftware.OASIS.API.Core.Managers; using NextGenSoftware.OASIS.API.Core.Objects.Wallets; using NextGenSoftware.OASIS.API.Core.Enums; -using NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Managers; using NextGenSoftware.OASIS.API.Core.Interfaces.NFT; +using NextGenSoftware.OASIS.API.ONode.Core.Objects; +using NextGenSoftware.OASIS.API.Core.Objects; +using NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Managers; namespace NextGenSoftware.OASIS.API.ONode.Core.Managers { @@ -36,80 +38,135 @@ public NFTManager(OASISDNA OASISDNA = null) : base(OASISDNA) } + //TODO: This method may become obsolete if ProviderType changes to NFTProviderType on INFTWalletTransaction + public async Task> CreateNftTransactionAsync(CreateNftTransactionRequest request) + { + return await CreateNftTransactionAsync(new NFTWalletTransaction() + { + Amount = request.Amount, + //Date = DateTime.Now, + FromWalletAddress = request.FromWalletAddress, + MemoText = request.MemoText, + MintWalletAddress = request.MintWalletAddress, + ToWalletAddress = request.ToWalletAddress, + Token = request.Token, + ProviderType = GetProviderTypeFromNFTProviderType(request.NFTProviderType) + }); + } + //TODO: This method may become obsolete if ProviderType changes to NFTProviderType on INFTWalletTransaction + public OASISResult CreateNftTransaction(CreateNftTransactionRequest request) + { + return CreateNftTransaction(new NFTWalletTransaction() + { + Amount = request.Amount, + //Date = DateTime.Now, + FromWalletAddress = request.FromWalletAddress, + MemoText = request.MemoText, + MintWalletAddress = request.MintWalletAddress, + ToWalletAddress = request.ToWalletAddress, + Token = request.Token, + ProviderType = GetProviderTypeFromNFTProviderType(request.NFTProviderType) + }); + } + public async Task> CreateNftTransactionAsync(INFTWalletTransaction request) + { + OASISResult result = new OASISResult(); + string errorMessage = "Error occured in CreateNftTransactionAsync in NFTManager. Reason:"; + //if (request.Date == DateTime.MinValue) + // request.Date = DateTime.Now; - //public NftService(ISolanaService solanaService, ICargoService cargoService) - //{ - // _solanaService = solanaService; - // _cargoService = cargoService; - // _olandManager = new OLANDManager(); - //} + try + { + IOASISNFTProvider nftProvider = GetNFTProvider(request.ProviderType, ref result, errorMessage); - public async Task> CreateNftTransactionAsync(INFTWalletTransaction request) + if (nftProvider == null) + result = await nftProvider.SendNFTAsync(request); + } + catch (Exception e) + { + ErrorHandling.HandleError(ref result, $"{errorMessage} Unknown error occured: {e.Message}", e); + } + + return result; + } + + public OASISResult CreateNftTransaction(INFTWalletTransaction request) { OASISResult result = new OASISResult(); - IOASISNFTProvider provider = null; string errorMessage = "Error occured in CreateNftTransactionAsync in NFTManager. Reason:"; + //if (request.Date == DateTime.MinValue) + // request.Date = DateTime.Now; + try { - IOASISProvider OASISProvider = ProviderManager.GetProvider(request.ProviderType); + IOASISNFTProvider nftProvider = GetNFTProvider(request.ProviderType, ref result, errorMessage); - if (OASISProvider != null) - { - if (!OASISProvider.IsProviderActivated) - { - OASISResult activateProviderResult = OASISProvider.ActivateProvider(); + if (nftProvider == null) + result = nftProvider.SendNFT(request); + } + catch (Exception e) + { + ErrorHandling.HandleError(ref result, $"{errorMessage} Unknown error occured: {e.Message}", e); + } - if (activateProviderResult.IsError) - ErrorHandling.HandleError(ref result, $"{errorMessage} Error occured activating provider. Reason: {activateProviderResult.Message}"); - } - } - else - ErrorHandling.HandleError(ref result, $"{errorMessage} The {Enum.GetName(typeof(ProviderType), request.ProviderType)} provider was not found."); + return result; + } + public async Task> MintNftAsync(IMintNFTTransaction request) + { + OASISResult result = new OASISResult(); + string errorMessage = "Error occured in MintNftAsync in NFTManager. Reason:"; - if (!result.IsError) - { - provider = OASISProvider as IOASISNFTProvider; + try + { + IOASISNFTProvider nftProvider = GetNFTProvider(request.OnChainProvider, ref result, errorMessage); - if (provider != null) - result = provider.SendNFT(request); - else - ErrorHandling.HandleError(ref result, $"{errorMessage} The {Enum.GetName(typeof(ProviderType), request.ProviderType)} provider is not a valid OASISNFTProvider."); - } + if (nftProvider == null) + result = await nftProvider.MintNFTAsync(request); + } + catch (Exception e) + { + ErrorHandling.HandleError(ref result, $"{errorMessage} Unknown error occured: {e.Message}", e); + } - /* - switch (request.NftProvider) - { - case NftProvider.Cargo: - var cargoPurchaseResponse = await _cargoService.PurchaseCargoSale(request.CargoExchange); - if (cargoPurchaseResponse.IsError) - { - response.IsError = true; - response.Message = cargoPurchaseResponse.Message; - ErrorHandling.HandleError(ref response, response.Message); - return response; - } - nftTransaction.TransactionResult = cargoPurchaseResponse.Result.TransactionHash; - break; - case NftProvider.Solana: - var exchangeResult = await _solanaService.ExchangeTokens(request.SolanaExchange); - if (exchangeResult.IsError) - { - response.IsError = true; - response.Message = exchangeResult.Message; - ErrorHandling.HandleError(ref response, response.Message); - return response; - } - nftTransaction.TransactionResult = exchangeResult.Result.TransactionHash; - break; - } - response.IsError = false;*/ + return result; + } + + public OASISResult MintNft(IMintNFTTransaction request) + { + OASISResult result = new OASISResult(); + string errorMessage = "Error occured in MintNftAsync in NFTManager. Reason:"; + + try + { + IOASISNFTProvider nftProvider = GetNFTProvider(request.OnChainProvider, ref result, errorMessage); + + if (nftProvider == null) + result = nftProvider.MintNFT(request); + } + catch (Exception e) + { + ErrorHandling.HandleError(ref result, $"{errorMessage} Unknown error occured: {e.Message}", e); + } + return result; + } + + public async Task> LoadNftAsync(Guid id, NFTProviderType NFTProviderType) + { + OASISResult result = new OASISResult(); + string errorMessage = "Error occured in LoadNftAsync in NFTManager. Reason:"; + try + { + IOASISNFTProvider nftProvider = GetNFTProvider(NFTProviderType, ref result, errorMessage); + + if (nftProvider == null) + result = await nftProvider.LoadNFTAsync(id); } catch (Exception e) { @@ -119,8 +176,103 @@ public async Task> CreateNftTransactionAsync(INF return result; } + public OASISResult LoadNft(Guid id, NFTProviderType NFTProviderType) + { + OASISResult result = new OASISResult(); + string errorMessage = "Error occured in LoadNft in NFTManager. Reason:"; + try + { + IOASISNFTProvider nftProvider = GetNFTProvider(NFTProviderType, ref result, errorMessage); + if (nftProvider == null) + result = nftProvider.LoadNFT(id); + } + catch (Exception e) + { + ErrorHandling.HandleError(ref result, $"{errorMessage} Unknown error occured: {e.Message}", e); + } + + return result; + } + + public ProviderType GetProviderTypeFromNFTProviderType(NFTProviderType nftProviderType) + { + ProviderType providerType = ProviderType.None; + + switch (nftProviderType) + { + case NFTProviderType.Solana: + providerType = ProviderType.SolanaOASIS; + break; + + case NFTProviderType.EOS: + providerType = ProviderType.EOSIOOASIS; + break; + + case NFTProviderType.Ethereum: + providerType = ProviderType.EthereumOASIS; + break; + } + + return providerType; + } + + public NFTProviderType GetNFTProviderTypeFromProviderType(ProviderType providerType) + { + NFTProviderType nftProviderType = NFTProviderType.None; + + switch (providerType) + { + case ProviderType.SolanaOASIS: + nftProviderType = NFTProviderType.Solana; + break; + + case ProviderType.EOSIOOASIS: + nftProviderType = NFTProviderType.EOS; + break; + + case ProviderType.EthereumOASIS: + nftProviderType = NFTProviderType.Ethereum; + break; + } + + return nftProviderType; + } + + public IOASISNFTProvider GetNFTProvider(NFTProviderType NFTProviderType, ref OASISResult result, string errorMessage) + { + return GetNFTProvider(GetProviderTypeFromNFTProviderType(NFTProviderType), ref result, errorMessage); + } + + public IOASISNFTProvider GetNFTProvider(ProviderType providerType, ref OASISResult result, string errorMessage) + { + IOASISNFTProvider nftProvider = null; + IOASISProvider OASISProvider = ProviderManager.GetProvider(providerType); + + if (OASISProvider != null) + { + if (!OASISProvider.IsProviderActivated) + { + OASISResult activateProviderResult = OASISProvider.ActivateProvider(); + + if (activateProviderResult.IsError) + ErrorHandling.HandleError(ref result, $"{errorMessage} Error occured activating provider. Reason: {activateProviderResult.Message}"); + } + } + else + ErrorHandling.HandleError(ref result, $"{errorMessage} The {Enum.GetName(typeof(ProviderType), providerType)} provider was not found."); + + if (!result.IsError) + { + nftProvider = OASISProvider as IOASISNFTProvider; + + if (nftProvider == null) + ErrorHandling.HandleError(ref result, $"{errorMessage} The {Enum.GetName(typeof(ProviderType), providerType)} provider is not a valid OASISNFTProvider."); + } + + return nftProvider; + } //TODO: Lots more coming soon! ;-) } diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Objects/CreateNftTransactionRequest.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Objects/CreateNftTransactionRequest.cs new file mode 100644 index 00000000..d4eabb00 --- /dev/null +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Objects/CreateNftTransactionRequest.cs @@ -0,0 +1,16 @@ + +using NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Objects; + +namespace NextGenSoftware.OASIS.API.ONode.Core.Objects +{ + public class CreateNftTransactionRequest : ICreateNftTransactionRequest + { + public NFTProviderType NFTProviderType { get; set; } + public string MintWalletAddress { get; set; } + public string FromWalletAddress { get; set; } + public string ToWalletAddress { get; set; } + public int Amount { get; set; } + public string Token { get; set; } + public string MemoText { get; set; } + } +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandRequest.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandRequest.cs index 1b26001c..39f316d7 100644 --- a/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandRequest.cs +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandRequest.cs @@ -1,17 +1,17 @@ using NextGenSoftware.OASIS.API.Core.Enums; +using NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Objects; using System; using System.Collections.Generic; namespace NextGenSoftware.OASIS.API.ONode.Core.Objects { - public class PurchaseOlandRequest + public class PurchaseOlandRequest : IPurchaseOlandRequest { public List OlandIds { get; set; } public Guid AvatarId { get; set; } public string AvatarUsername { get; set; } public string Tiles { get; set; } public string WalletAddress { get; set; } - // public string CargoSaleId { get; set; } public ProviderType ProviderType { get; set; } } } diff --git a/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandResponse.cs b/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandResponse.cs index 63451f4a..2a81a4f0 100644 --- a/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandResponse.cs +++ b/NextGenSoftware.OASIS.API.ONODE.Core/Objects/PurchaseOlandResponse.cs @@ -1,12 +1,13 @@ using System; using System.Collections.Generic; +using NextGenSoftware.OASIS.API.ONode.Core.Interfaces.Objects; namespace NextGenSoftware.OASIS.API.ONode.Core.Objects { - public class PurchaseOlandResponse + public class PurchaseOlandResponse : IPurchaseOlandResponse { public string TransactionHash { get; set; } public List OlandIds { get; set; } public Guid OLandPurchaseId { get; set; } } -} +} \ No newline at end of file diff --git a/NextGenSoftware.OASIS.API.ONODE.WebAPI/Controllers/NftController.cs b/NextGenSoftware.OASIS.API.ONODE.WebAPI/Controllers/NftController.cs index faf5030d..2b7509ba 100644 --- a/NextGenSoftware.OASIS.API.ONODE.WebAPI/Controllers/NftController.cs +++ b/NextGenSoftware.OASIS.API.ONODE.WebAPI/Controllers/NftController.cs @@ -1,8 +1,11 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; using NextGenSoftware.OASIS.API.Core.Helpers; +using NextGenSoftware.OASIS.API.Core.Interfaces.NFT; +using NextGenSoftware.OASIS.API.Core.Objects; +using NextGenSoftware.OASIS.API.Core.Objects.Wallets; using NextGenSoftware.OASIS.API.ONode.Core.Managers; -using NextGenSoftware.OASIS.API.ONode.WebAPI.Interfaces; +using NextGenSoftware.OASIS.API.ONode.Core.Objects; namespace NextGenSoftware.OASIS.API.ONode.WebAPI.Controllers { @@ -11,13 +14,6 @@ namespace NextGenSoftware.OASIS.API.ONode.WebAPI.Controllers [Authorize] public class NftController : OASISControllerBase { - //private readonly INftService _nftService; - - //public NftController(INftService nftService) - //{ - // _nftService = nftService; - //} - public NftController() { @@ -25,7 +21,21 @@ public NftController() [HttpPost] [Route("CreateNftTransaction")] - public async Task> CreateNftTransaction(CreateNftTransactionRequest request) + public async Task> CreateNftTransaction(CreateNftTransactionRequest request) + { + return await NFTManager.Instance.CreateNftTransactionAsync(request); + } + + [HttpPost] + [Route("CreateNftTransaction")] + public async Task> CreateNftTransaction(NFTWalletTransaction request) + { + return await NFTManager.Instance.CreateNftTransactionAsync(request); + } + + [HttpPost] + [Route("MintNft")] + public async Task> MintNft(NFTWalletTransaction request) { return await NFTManager.Instance.CreateNftTransactionAsync(request); } diff --git a/NextGenSoftware.OASIS.API.ONODE.WebAPI/Interfaces/INftService.cs b/NextGenSoftware.OASIS.API.ONODE.WebAPI/Interfaces/INftService.cs index ff8bdc75..59509706 100644 --- a/NextGenSoftware.OASIS.API.ONODE.WebAPI/Interfaces/INftService.cs +++ b/NextGenSoftware.OASIS.API.ONODE.WebAPI/Interfaces/INftService.cs @@ -7,54 +7,54 @@ namespace NextGenSoftware.OASIS.API.ONode.WebAPI.Interfaces { - public interface INftService - { - Task> CreateNftTransaction(CreateNftTransactionRequest request); - Task> GetOlandPrice(int count, string couponCode); - Task> PurchaseOland(PurchaseOlandRequest request); - } - - public enum NftProvider - { - Cargo = 1, - Solana = 2 - } - - public class CreateNftTransactionRequest - { - public NftProvider NftProvider { get; set; } - public string MintWalletAddress { get; set; } - public string FromWalletAddress { get; set; } - public string ToWalletAddress { get; set; } - public int Amount { get; set; } - public string MemoText { get; set; } - - //public ExchangeTokenRequest SolanaExchange { get; set; } - //public PurchaseRequestModel CargoExchange { get; set; } - } - - public class NftTransactionRespone - { - public string TransactionResult { get; set; } - } - - public class PurchaseOlandResponse - { - public string PurchaseResult { get; set; } - - public PurchaseOlandResponse(string purchaseResult) - { - PurchaseResult = purchaseResult; - } - } - - public class PurchaseOlandRequest - { - public Guid OlandId { get; set; } - public Guid AvatarId { get; set; } - public string AvatarUsername { get; set; } - public string Tiles { get; set; } - public string WalletAddress { get; set; } - public string CargoSaleId { get; set; } - } + //public interface INftService + //{ + // Task> CreateNftTransaction(CreateNftTransactionRequest request); + // Task> GetOlandPrice(int count, string couponCode); + // Task> PurchaseOland(PurchaseOlandRequest request); + //} + + //public enum NftProvider + //{ + // Cargo = 1, + // Solana = 2 + //} + + //public class CreateNftTransactionRequest + //{ + // public NftProvider NftProvider { get; set; } + // public string MintWalletAddress { get; set; } + // public string FromWalletAddress { get; set; } + // public string ToWalletAddress { get; set; } + // public int Amount { get; set; } + // public string MemoText { get; set; } + + // //public ExchangeTokenRequest SolanaExchange { get; set; } + // //public PurchaseRequestModel CargoExchange { get; set; } + //} + + //public class NftTransactionRespone + //{ + // public string TransactionResult { get; set; } + //} + + //public class PurchaseOlandResponse + //{ + // public string PurchaseResult { get; set; } + + // public PurchaseOlandResponse(string purchaseResult) + // { + // PurchaseResult = purchaseResult; + // } + //} + + //public class PurchaseOlandRequest + //{ + // public Guid OlandId { get; set; } + // public Guid AvatarId { get; set; } + // public string AvatarUsername { get; set; } + // public string Tiles { get; set; } + // public string WalletAddress { get; set; } + // public string CargoSaleId { get; set; } + //} } \ No newline at end of file