Beispiel #1
0
        private async Task <int> SeedCountriesAsync(CancellationToken cancellationToken)
        {
            int itemsAdded = 0;
            var countries  = _fileService.ReadCSVFile <CountryCSV>("Data/Countries.csv");

            for (int i = 0; i < countries.Count; i++)
            {
                Countries.Add((i + 1), new Country {
                    CountryCode = countries[i].CountryCode, Name = countries[i].Name
                });
            }

            if (!_context.Countries.Any())
            {
                foreach (var item in Countries.Values)
                {
                    _context.Countries.Add(item);
                    itemsAdded++;
                }

                await _context.SaveChangesAsync(cancellationToken);
            }

            return(itemsAdded);
        }
        public async Task <UpdateProjectStatusResponse> Handle(UpdateProjectStatusRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateProjectStatusResponse();

            var project = await _context.Projects
                          .Where(x => x.ProjectID == request.ProjectID)
                          .SingleOrDefaultAsync(cancellationToken);

            if (project == null)
            {
                throw new NotFoundException(nameof(Project), request.ProjectID);
            }

            project.ProjectStatus = request.NewProjectStatus;

            await _context.SaveChangesAsync(cancellationToken);

            var projectStatusLog = new ProjectStatusLog
            {
                ProjectID     = project.ProjectID,
                ProjectStatus = project.ProjectStatus,
                Comment       = request.Comment
            };

            await _context.ProjectStatusLogs.AddAsync(projectStatusLog);

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful     = true;
            result.ProjectID        = project.ProjectID;
            result.NewProjectStatus = request.NewProjectStatus;

            return(result);
        }
Beispiel #3
0
        public async Task <UpdateProjectDocumentResponse> Handle(UpdateProjectDocumentRequest request, CancellationToken cancellationToken)
        {
            var result  = new UpdateProjectDocumentResponse();
            var options = _configuration.GetSection(FortifexOptions.RootSection).Get <FortifexOptions>();

            var projectDocument = await _context.ProjectDocuments
                                  .Where(x => x.ProjectDocumentID == request.ProjectDocumentID)
                                  .SingleOrDefaultAsync(cancellationToken);

            if (projectDocument != null)
            {
                result.ProjectID      = projectDocument.ProjectID;
                projectDocument.Title = request.Title;

                if (request.FormFileProjectDocument != null)
                {
                    var processFileResult = await _fileService.ProcessFile(request.FormFileProjectDocument);

                    if (processFileResult.IsSuccessful)
                    {
                        var originalFileName = WebUtility.HtmlEncode(request.FormFileProjectDocument.FileName);

                        var folderPath = Path.Combine(options.ProjectDocumentsRootFolderPath, projectDocument.ProjectID.ToString());
                        var trustedFileNameForFileStorage = $"{projectDocument.DocumentID}{Path.GetExtension(originalFileName)}";

                        var saveDocumentResult = await _fileService.SaveFile(processFileResult.FileContent, folderPath, trustedFileNameForFileStorage);

                        if (saveDocumentResult.IsSuccessful)
                        {
                            projectDocument.OriginalFileName = originalFileName;
                            await _context.SaveChangesAsync(cancellationToken);

                            result.IsSuccessful = true;
                        }
                        else
                        {
                            result.ErrorMessage = saveDocumentResult.ErrorMessage;
                        }
                    }
                    else
                    {
                        result.ErrorMessage = processFileResult.ErrorMessage;
                    }
                }
                else
                {
                    await _context.SaveChangesAsync(cancellationToken);

                    result.IsSuccessful = true;
                }
            }

            return(result);
        }
        public async Task <CreateProjectsResponse> Handle(CreateProjectsRequest request, CancellationToken cancellationToken)
        {
            var result = new CreateProjectsResponse()
            {
                IsSuccessful = false
            };

            #region Check if Member already have Project
            var member = await _context.Projects
                         .Where(x => x.MemberUsername == request.MemberUsername)
                         .FirstOrDefaultAsync(cancellationToken);

            if (member != null)
            {
                result.ProjectID = member.ProjectID;
                return(result);
            }
            #endregion

            #region Add New Project
            var project = new Project
            {
                BlockchainID   = request.BlockchainID,
                MemberUsername = request.MemberUsername,
                Name           = request.Name,
                Description    = request.Description,
                WalletAddress  = request.WalletAddress,
                ProjectStatus  = ProjectStatus.Draft
            };

            await _context.Projects.AddAsync(project);

            await _context.SaveChangesAsync(cancellationToken);

            #endregion

            var projectStatusLog = new ProjectStatusLog
            {
                ProjectID     = project.ProjectID,
                ProjectStatus = ProjectStatus.Draft,
                Comment       = "Project has been created"
            };

            await _context.ProjectStatusLogs.AddAsync(projectStatusLog);

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;
            result.ProjectID    = project.ProjectID;

            return(result);
        }
Beispiel #5
0
        public async Task <RejectInvitationResponse> Handle(RejectInvitationRequest query, CancellationToken cancellationToken)
        {
            var result = new RejectInvitationResponse();

            var contributor = await _context.Contributors
                              .Where(x => x.InvitationCode == new Guid(query.InvitationCode))
                              .SingleOrDefaultAsync();

            if (contributor != null)
            {
                if (contributor.InvitationStatus == InvitationStatus.Invited)
                {
                    contributor.InvitationStatus = InvitationStatus.Rejected;

                    await _context.SaveChangesAsync(cancellationToken);

                    result.IsSuccessful = true;
                }
            }
            else
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.ProjectNotFound;
            }

            return(result);
        }
        public async Task <UpdateContributorInvitationStatusResponse> Handle(UpdateContributorInvitationStatusRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateContributorInvitationStatusResponse()
            {
                IsSuccessful = false
            };

            var contributor = await _context.Contributors
                              .Where(x => x.ContributorID == request.ContributorID)
                              .SingleOrDefaultAsync(cancellationToken);

            if (contributor == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.ContributorNotFound;

                return(result);
            }

            contributor.InvitationStatus = request.InvitationStatus;

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
Beispiel #7
0
        public async Task <UpdateSyncResponse> Handle(UpdateSyncRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateSyncResponse();

            var transaction = await _context.Transactions
                              .Where(x => x.TransactionID == request.TransactionID)
                              .Include(y => y.Pocket)
                              .SingleOrDefaultAsync(cancellationToken);

            if (transaction == null)
            {
                throw new NotFoundException(nameof(Transaction), request.TransactionID);
            }

            transaction.UnitPriceInUSD = request.UnitPriceInUSD;

            if (transaction.TransactionType == TransactionType.SyncTransactionIN || transaction.TransactionType == TransactionType.SyncTransactionOUT)
            {
                transaction.PairWalletName = request.PairWalletName;
            }

            await _context.SaveChangesAsync(cancellationToken);

            result.WalletID     = transaction.Pocket.WalletID;
            result.IsSuccessful = true;

            return(result);
        }
        public async Task <UpdateDepositResponse> Handle(UpdateDepositRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateDepositResponse();

            var transaction = await _context.Transactions
                              .Where(x => x.TransactionID == request.TransactionID)
                              .Include(a => a.Pocket)
                              .SingleOrDefaultAsync(cancellationToken);

            if (transaction == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.TransactionNotFound;

                return(result);
            }

            transaction.Amount = request.Amount;
            transaction.TransactionDateTime = request.TransactionDateTime;
            transaction.LastModified        = _dateTimeOffset.Now;

            await _context.SaveChangesAsync(cancellationToken);

            result.WalletID     = transaction.Pocket.WalletID;
            result.IsSuccessful = true;

            return(result);
        }
Beispiel #9
0
        public async Task <DeleteOwnerResponse> Handle(DeleteOwnerRequest request, CancellationToken cancellationToken)
        {
            var result = new DeleteOwnerResponse();

            var owner = await _context.Owners
                        .Where(x => x.OwnerID == request.OwnerID)
                        .Include(a => a.Wallets)
                        .ThenInclude(b => b.Pockets)
                        .ThenInclude(c => c.Transactions)
                        .ThenInclude(d => d.FromInternalTransfers)
                        .ThenInclude(d => d.ToTransaction)
                        .Include(a => a.Wallets)
                        .ThenInclude(b => b.Pockets)
                        .ThenInclude(c => c.Transactions)
                        .ThenInclude(d => d.ToInternalTransfers)
                        .ThenInclude(d => d.FromTransaction)
                        .Include(a => a.Wallets)
                        .ThenInclude(b => b.Pockets)
                        .ThenInclude(c => c.Transactions)
                        .ThenInclude(d => d.FromTrades)
                        .Include(a => a.Wallets)
                        .ThenInclude(b => b.Pockets)
                        .ThenInclude(c => c.Transactions)
                        .ThenInclude(d => d.ToTrades)
                        .SingleOrDefaultAsync();

            if (owner == null)
            {
                result.IsSuccessful = false;
            }
            result.ErrorMessage = ErrorMessage.OwnerNotFound;

            foreach (var wallet in owner.Wallets)
            {
                foreach (var pocket in wallet.Pockets)
                {
                    foreach (var transaction in pocket.Transactions)
                    {
                        _context.InternalTransfers.RemoveRange(transaction.FromInternalTransfers);
                        _context.Transactions.RemoveRange(transaction.FromInternalTransfers.Select(x => x.ToTransaction));
                        _context.InternalTransfers.RemoveRange(transaction.ToInternalTransfers);
                        _context.Transactions.RemoveRange(transaction.ToInternalTransfers.Select(x => x.FromTransaction));
                        _context.Trades.RemoveRange(transaction.FromTrades);
                        _context.Trades.RemoveRange(transaction.ToTrades);
                    }

                    _context.Transactions.RemoveRange(pocket.Transactions);
                }

                _context.Pockets.RemoveRange(wallet.Pockets);
            }

            _context.Wallets.RemoveRange(owner.Wallets);
            _context.Owners.Remove(owner);
            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
        public async Task <CreateWithdrawalResponse> Handle(CreateWithdrawalRequest request, CancellationToken cancellationToken)
        {
            var result = new CreateWithdrawalResponse();

            Wallet walletForWithdrawal = await _context.Wallets
                                         .Where(x => x.WalletID == request.WalletID)
                                         .Include(x => x.Pockets)
                                         .SingleOrDefaultAsync(cancellationToken);

            if (walletForWithdrawal == null)
            {
                throw new NotFoundException(nameof(Wallet), request.WalletID);
            }

            Pocket pocketForWithdrawal = walletForWithdrawal.Pockets.Single(x => x.IsMain);

            Transaction transactionForWithdrawal = new Transaction
            {
                PocketID            = pocketForWithdrawal.PocketID,
                Amount              = -request.Amount,
                TransactionHash     = string.Empty,
                TransactionType     = TransactionType.Withdrawal,
                TransactionDateTime = request.TransactionDateTime
            };

            _context.Transactions.Add(transactionForWithdrawal);
            await _context.SaveChangesAsync(cancellationToken);

            result.TransactionID = transactionForWithdrawal.TransactionID;
            result.WalletID      = walletForWithdrawal.WalletID;

            return(result);
        }
Beispiel #11
0
        public async Task <DeleteDepositResponse> Handle(DeleteDepositRequest request, CancellationToken cancellationToken)
        {
            var result = new DeleteDepositResponse();

            var transaction = await _context.Transactions
                              .Where(x => x.TransactionID == request.TransactionID)
                              .Include(y => y.Pocket)
                              .SingleOrDefaultAsync(cancellationToken);

            if (transaction == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.TransactionNotFound;

                return(result);
            }

            result.WalletID = transaction.Pocket.WalletID;

            _context.Transactions.Remove(transaction);
            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
Beispiel #12
0
        public async Task <UpdateWithdrawalResponse> Handle(UpdateWithdrawalRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateWithdrawalResponse();

            var transaction = await _context.Transactions
                              .Where(x => x.TransactionID == request.TransactionID)
                              .Include(y => y.Pocket)
                              .SingleOrDefaultAsync(cancellationToken);

            if (transaction == null)
            {
                throw new NotFoundException(nameof(Transaction), request.TransactionID);
            }

            result.WalletID = transaction.Pocket.WalletID;

            transaction.Amount = -request.Amount;
            transaction.TransactionDateTime = request.TransactionDateTime;

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
        public async Task <UpdateFiatCurrencyNamesResponse> Handle(UpdateFiatCurrencyNamesRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateFiatCurrencyNamesResponse();

            var fiatCurrencyCollection = await _fiatService.GetFiatCurrencyCollectionAsync();

            foreach (var fiatCurrency in fiatCurrencyCollection.Currencies)
            {
                var existingFiatCurrency = await _context.Currencies
                                           .Where(x => x.Symbol == fiatCurrency.Symbol && x.CurrencyType == CurrencyType.Fiat)
                                           .SingleOrDefaultAsync(cancellationToken);

                if (existingFiatCurrency != null)
                {
                    existingFiatCurrency.Name = fiatCurrency.Name;

                    result.Currencies.Add(new CurrencyDTO
                    {
                        CurrencyID = existingFiatCurrency.CurrencyID,
                        Symbol     = existingFiatCurrency.Symbol,
                        Name       = existingFiatCurrency.Name
                    });
                }
            }

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
        public async Task <UpdateStartingBalanceResponse> Handle(UpdateStartingBalanceRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateStartingBalanceResponse();

            var transaction = await _context.Transactions
                              .Where(x => x.TransactionID == request.TransactionID)
                              .Include(y => y.Pocket)
                              .SingleOrDefaultAsync(cancellationToken);

            if (transaction == null)
            {
                throw new NotFoundException(nameof(Transaction), request.TransactionID);
            }

            transaction.Amount         = request.Amount;
            transaction.UnitPriceInUSD = request.UnitPriceInUSD;
            transaction.LastModified   = _dateTimeOffset.Now;

            await _context.SaveChangesAsync(cancellationToken);

            result.WalletID     = transaction.Pocket.WalletID;
            result.IsSuccessful = true;

            return(result);
        }
        public async Task <UpdatePreferredFiatCurrencyResponse> Handle(UpdatePreferredFiatCurrencyRequest request, CancellationToken cancellationToken)
        {
            var member = await _context.Members
                         .Where(x => x.MemberUsername == request.MemberUsername)
                         .SingleOrDefaultAsync(cancellationToken);

            if (member == null)
            {
                throw new NotFoundException(nameof(Member), request.MemberUsername);
            }

            var currency = await _context.Currencies
                           .Where(x => x.CurrencyID == request.PreferredFiatCurrencyID)
                           .SingleOrDefaultAsync(cancellationToken);

            if (currency == null)
            {
                throw new NotFoundException(nameof(Currency), request.PreferredFiatCurrencyID);
            }

            if (currency.CurrencyType != CurrencyType.Fiat)
            {
                throw new ArgumentException($"[{nameof(Currency)}] with key [{request.PreferredFiatCurrencyID}] is not a Fiat Currency");
            }

            member.PreferredFiatCurrencyID = request.PreferredFiatCurrencyID;

            await _context.SaveChangesAsync(cancellationToken);

            return(new UpdatePreferredFiatCurrencyResponse
            {
                IsSuccessful = true
            });
        }
Beispiel #16
0
        public async Task <UpdatePersonalWalletResponse> Handle(UpdatePersonalWalletRequest request, CancellationToken cancellationToken)
        {
            var wallet = await _context.Wallets.FindAsync(request.WalletID);

            if (wallet == null)
            {
                throw new NotFoundException(nameof(Wallet), request.WalletID);
            }

            wallet.Name = request.Name;

            // Property lain selain Name hanya bisa diubah kalau Wallet tidak synchronized
            if (!wallet.IsSynchronized)
            {
                wallet.Address = request.Address;

                var mainPocket = await _context.Pockets
                                 .Where(x => x.WalletID == wallet.WalletID && x.IsMain)
                                 .Include(a => a.Transactions)
                                 .SingleOrDefaultAsync(cancellationToken);

                mainPocket.Address = request.Address;

                // Kalau wallet ini mau ganti Blockchain
                if (wallet.BlockchainID != request.BlockchainID)
                {
                    bool hasInternalTransfers = mainPocket.Transactions.Any(x =>
                                                                            x.TransactionType == TransactionType.InternalTransferIN ||
                                                                            x.TransactionType == TransactionType.InternalTransferOUT);

                    // Boleh ganti Blockchain hanya jika belum pernah ada transaksi Internal Transfer
                    if (!hasInternalTransfers)
                    {
                        wallet.BlockchainID = request.BlockchainID;

                        var currency = await _context.Currencies
                                       .Where(x =>
                                              x.BlockchainID == request.BlockchainID &&
                                              x.CurrencyType == CurrencyType.Coin)
                                       .SingleOrDefaultAsync(cancellationToken);

                        mainPocket.CurrencyID = currency.CurrencyID;
                    }
                }
            }

            await _context.SaveChangesAsync(cancellationToken);

            return(new UpdatePersonalWalletResponse
            {
                IsSuccessful = true
            });
        }
Beispiel #17
0
        public async Task <DeleteInternalTransferResponse> Handle(DeleteInternalTransferRequest request, CancellationToken cancellationToken)
        {
            var result = new DeleteInternalTransferResponse
            {
                IsSuccessful = false
            };

            var internalTransfers = await _context.InternalTransfers
                                    .Where(x => x.InternalTransferID == request.InternalTransfersID)
                                    .SingleOrDefaultAsync();

            if (internalTransfers == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.InternalTransferNotFound;

                return(result);
            }

            _context.InternalTransfers.Remove(internalTransfers);
            await _context.SaveChangesAsync(cancellationToken);

            var fromTransaction = await _context.Transactions
                                  .Where(x => x.TransactionID == internalTransfers.FromTransactionID)
                                  .SingleOrDefaultAsync();

            _context.Transactions.Remove(fromTransaction);
            await _context.SaveChangesAsync(cancellationToken);

            var toTransaction = await _context.Transactions
                                .Where(x => x.TransactionID == internalTransfers.ToTransactionID)
                                .SingleOrDefaultAsync();

            _context.Transactions.Remove(toTransaction);
            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
        public async Task <DeleteTradeResponse> Handle(DeleteTradeRequest request, CancellationToken cancellationToken)
        {
            var result = new DeleteTradeResponse
            {
                IsSuccessful = false
            };

            var trade = await _context.Trades
                        .Where(x => x.TradeID == request.TradeID)
                        .SingleOrDefaultAsync();

            if (trade == null)
            {
                throw new NotFoundException(nameof(Trade), request.TradeID);
            }

            // Delete Trade
            _context.Trades.Remove(trade);
            await _context.SaveChangesAsync(cancellationToken);

            // Delete source Transactions
            var sourceTransaction = await _context.Transactions
                                    .Where(x => x.TransactionID == trade.FromTransactionID)
                                    .SingleOrDefaultAsync();

            _context.Transactions.Remove(sourceTransaction);
            await _context.SaveChangesAsync(cancellationToken);

            // Delete destination Transactions
            var destinationTransaction = await _context.Transactions
                                         .Where(x => x.TransactionID == trade.ToTransactionID)
                                         .SingleOrDefaultAsync();

            _context.Transactions.Remove(destinationTransaction);
            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
Beispiel #19
0
        public async Task <DeleteWalletResponse> Handle(DeleteWalletRequest request, CancellationToken cancellationToken)
        {
            var wallet = await _context.Wallets
                         .Where(x => x.WalletID == request.WalletID)
                         .Include(a => a.Pockets)
                         .ThenInclude(b => b.Transactions)
                         .ThenInclude(c => c.FromInternalTransfers)
                         .ThenInclude(d => d.ToTransaction)
                         .Include(a => a.Pockets)
                         .ThenInclude(b => b.Transactions)
                         .ThenInclude(c => c.ToInternalTransfers)
                         .ThenInclude(d => d.FromTransaction)
                         .Include(a => a.Pockets)
                         .ThenInclude(b => b.Transactions)
                         .ThenInclude(c => c.FromTrades)
                         .ThenInclude(d => d.ToTransaction)
                         .Include(a => a.Pockets)
                         .ThenInclude(b => b.Transactions)
                         .ThenInclude(c => c.ToTrades)
                         .ThenInclude(d => d.FromTransaction)
                         .SingleOrDefaultAsync();

            if (wallet == null)
            {
                throw new NotFoundException(nameof(Wallet), request.WalletID);
            }

            //Deleting Transactions
            foreach (var pocket in wallet.Pockets)
            {
                foreach (var transaction in pocket.Transactions)
                {
                    _context.InternalTransfers.RemoveRange(transaction.FromInternalTransfers);
                    _context.Transactions.RemoveRange(transaction.FromInternalTransfers.Select(x => x.ToTransaction));
                    _context.InternalTransfers.RemoveRange(transaction.ToInternalTransfers);
                    _context.Transactions.RemoveRange(transaction.ToInternalTransfers.Select(x => x.FromTransaction));
                    _context.Trades.RemoveRange(transaction.FromTrades);
                    _context.Trades.RemoveRange(transaction.ToTrades);
                }

                _context.Transactions.RemoveRange(pocket.Transactions);
            }

            _context.Pockets.RemoveRange(wallet.Pockets);
            _context.Wallets.Remove(wallet);
            await _context.SaveChangesAsync(cancellationToken);

            return(new DeleteWalletResponse
            {
                IsSuccessful = true
            });
        }
        public async Task <CreateExternalTransferResponse> Handle(CreateExternalTransferRequest request, CancellationToken cancellationToken)
        {
            var result = new CreateExternalTransferResponse();

            Wallet wallet = await _context.Wallets
                            .Where(x => x.WalletID == request.WalletID)
                            .Include(x => x.Pockets)
                            .SingleOrDefaultAsync(cancellationToken);

            if (wallet == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.WalletNotFound;

                return(result);
            }

            Pocket mainPocket = wallet.Pockets.Single(x => x.IsMain);

            decimal         amount          = request.Amount;
            TransactionType transactionType = TransactionType.ExternalTransferIN;

            if (request.TransferDirection == TransferDirection.OUT)
            {
                amount          = -request.Amount;
                transactionType = TransactionType.ExternalTransferOUT;
            }

            Transaction transactionForExternalTransfer = new Transaction
            {
                PocketID            = mainPocket.PocketID,
                Amount              = amount,
                UnitPriceInUSD      = request.UnitPriceInUSD,
                TransactionHash     = string.Empty,
                PairWalletName      = string.IsNullOrEmpty(request.PairWalletName) ? "External Wallet" : request.PairWalletName,
                PairWalletAddress   = string.IsNullOrEmpty(request.PairWalletAddress) ? "External Wallet Address" : request.PairWalletAddress,
                TransactionType     = transactionType,
                TransactionDateTime = request.TransactionDateTime,
                Created             = _dateTimeOffset.Now,
                LastModified        = _dateTimeOffset.Now
            };

            _context.Transactions.Add(transactionForExternalTransfer);
            await _context.SaveChangesAsync(cancellationToken);

            result.TransactionID = transactionForExternalTransfer.TransactionID;
            result.IsSuccessful  = true;

            return(result);
        }
        public async Task <SeedFiatCurrenciesResponse> Handle(SeedFiatCurrenciesRequest request, CancellationToken cancellationToken)
        {
            var result = new SeedFiatCurrenciesResponse();

            var fiatCurrencyMapJSON = _fileService.ReadJSONFile <FiatCurrencyMapJSON>(FilePath.FiatCurrencyMapJSON);

            if (fiatCurrencyMapJSON.status.error_code == 0)
            {
                Blockchain fiatBlockchain = new Blockchain
                {
                    BlockchainID = BlockchainID.Fiat,
                    Symbol       = BlockchainSymbol.Fiat,
                    Name         = BlockchainName.Fiat
                };

                foreach (var fiatCurrencyJSON in fiatCurrencyMapJSON.data)
                {
                    fiatBlockchain.Currencies.Add(new Currency
                    {
                        BlockchainID         = fiatBlockchain.BlockchainID,
                        Symbol               = fiatCurrencyJSON.symbol,
                        Name                 = fiatCurrencyJSON.name,
                        CoinMarketCapID      = fiatCurrencyJSON.id,
                        Rank                 = 0,
                        CurrencyType         = CurrencyType.Fiat,
                        IsShownInTradePair   = fiatCurrencyJSON.symbol == CurrencySymbol.USD,
                        IsForPreferredOption = true
                    });
                }

                if (!_context.Blockchains.Any(x => x.BlockchainID == BlockchainID.Fiat))
                {
                    _context.Blockchains.Add(fiatBlockchain);
                    await _context.SaveChangesAsync(cancellationToken);

                    result.FiatCurrenciesAdded = fiatBlockchain.Currencies.Count;
                }

                result.IsSuccessful = true;
            }
            else
            {
                result.IsSuccessful = false;
                result.ErrorMessage = fiatCurrencyMapJSON.status.error_message;
            }

            return(result);
        }
Beispiel #22
0
        public async Task <UpdateExternalTransferResponse> Handle(UpdateExternalTransferRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateExternalTransferResponse();

            var transaction = await _context.Transactions
                              .Where(x => x.TransactionID == request.TransactionID)
                              .Include(y => y.Pocket)
                              .SingleOrDefaultAsync(cancellationToken);

            if (transaction == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.TransactionNotFound;

                return(result);
            }

            TransactionType transactionType = TransactionType.ExternalTransferIN;
            decimal         amount          = request.Amount;

            if (request.TransferDirection == TransferDirection.OUT)
            {
                transactionType = TransactionType.ExternalTransferOUT;

                if (amount > 0)
                {
                    amount = -request.Amount;
                }
            }

            transaction.PairWalletName    = string.IsNullOrEmpty(request.PairWalletName) ? "External Wallet" : request.PairWalletName;
            transaction.PairWalletAddress = string.IsNullOrEmpty(request.PairWalletAddress) ? "External Wallet Address" : request.PairWalletAddress;

            transaction.TransactionType     = transactionType;
            transaction.Amount              = amount;
            transaction.UnitPriceInUSD      = request.UnitPriceInUSD;
            transaction.TransactionDateTime = request.TransactionDateTime;
            transaction.LastModified        = _dateTimeOffset.Now;

            await _context.SaveChangesAsync(cancellationToken);

            result.WalletID     = transaction.Pocket.WalletID;
            result.IsSuccessful = true;

            return(result);
        }
        public async Task <UpdateTradeResponse> Handle(UpdateTradeRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateTradeResponse
            {
                IsSuccessful = false
            };

            var trade = await _context.Trades
                        .Where(x => x.TradeID == request.TradeID)
                        .Include(a => a.FromTransaction)
                        .Include(a => a.ToTransaction)
                        .SingleOrDefaultAsync(cancellationToken);

            if (trade == null)
            {
                throw new NotFoundException(nameof(Trade), request.TradeID);
            }

            decimal unitPrice  = decimal.Round(request.UnitPrice, 4);
            decimal totalPrice = request.Amount * unitPrice;

            trade.UnitPrice = unitPrice;
            trade.FromTransaction.TransactionDateTime = request.TransactionDateTime;
            trade.FromTransaction.UnitPriceInUSD      = request.UnitPriceInUSD;
            trade.ToTransaction.TransactionDateTime   = request.TransactionDateTime;
            trade.ToTransaction.UnitPriceInUSD        = request.UnitPriceInUSD;

            if (request.TradeType == TradeType.Buy)
            {
                trade.FromTransaction.Amount = request.Amount;
                trade.ToTransaction.Amount   = trade.IsWithholding ? -totalPrice : 0m;
            }
            else if (request.TradeType == TradeType.Sell)
            {
                trade.FromTransaction.Amount = -request.Amount;
                trade.ToTransaction.Amount   = trade.IsWithholding ? totalPrice : 0m;
            }

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
        public async Task <ActivateMemberResponse> Handle(ActivateMemberRequest query, CancellationToken cancellationToken)
        {
            var result = new ActivateMemberResponse();

            var member = await _context.Members
                         .Where(x => x.ActivationCode == query.ActivationCode)
                         .SingleOrDefaultAsync(cancellationToken);

            if (member != null)
            {
                member.ActivationStatus = ActivationStatus.Active;

                await _context.SaveChangesAsync(cancellationToken);

                result.MemberUsername = member.MemberUsername;
            }

            return(result);
        }
        public async Task <UpdatePreferredTimeFrameResponse> Handle(UpdatePreferredTimeFrameRequest request, CancellationToken cancellationToken)
        {
            var member = await _context.Members
                         .Where(x => x.MemberUsername == request.MemberUsername)
                         .SingleOrDefaultAsync(cancellationToken);

            if (member == null)
            {
                throw new NotFoundException(nameof(Member), request.MemberUsername);
            }

            member.PreferredTimeFrameID = request.PreferredTimeFrameID;

            await _context.SaveChangesAsync(cancellationToken);

            return(new UpdatePreferredTimeFrameResponse
            {
                IsSuccessful = true
            });
        }
Beispiel #26
0
        public async Task <UpdateInternalTransferResponse> Handle(UpdateInternalTransferRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateInternalTransferResponse
            {
                IsSuccessful = false
            };

            var internalTransfer = await _context.InternalTransfers
                                   .Where(x => x.InternalTransferID == request.InternalTransferID)
                                   .SingleOrDefaultAsync(cancellationToken);

            if (internalTransfer == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.InternalTransferNotFound;

                return(result);
            }

            decimal amount = request.Amount;

            var fromTransaction = await _context.Transactions
                                  .Where(x => x.TransactionID == internalTransfer.FromTransactionID)
                                  .SingleOrDefaultAsync(cancellationToken);

            fromTransaction.Amount = -amount;
            fromTransaction.TransactionDateTime = request.TransactionDateTime;

            var toTransaction = await _context.Transactions
                                .Where(x => x.TransactionID == internalTransfer.ToTransactionID)
                                .SingleOrDefaultAsync(cancellationToken);

            toTransaction.Amount = amount;
            toTransaction.TransactionDateTime = request.TransactionDateTime;

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
        public async Task <RemoveAllTransactionsResponse> Handle(RemoveAllTransactionsRequest request, CancellationToken cancellationToken)
        {
            int transactionsRemoved = await _context.Transactions.CountAsync(cancellationToken);

            //var wallets = await _context.Wallets
            //    .Include(a => a.Pockets)
            //        .ThenInclude(b => b.Transactions)
            //        .ThenInclude(c => c.FromInternalTransfers)
            //    .Include(a => a.Pockets)
            //        .ThenInclude(b => b.Transactions)
            //        .ThenInclude(c => c.FromTrades)
            //    .ToListAsync(cancellationToken);

            //foreach (var wallet in wallets)
            //{
            //    foreach (var pocket in wallet.Pockets)
            //    {
            //        foreach (var transaction in pocket.Transactions)
            //        {
            //            _context.InternalTransfers.RemoveRange(transaction.FromInternalTransfers);
            //            _context.Trades.RemoveRange(transaction.FromTrades);
            //            _context.Trades.RemoveRange(transaction.ToTrades);
            //        }

            //        transactionsRemoved += pocket.Transactions.Count;
            //        _context.Transactions.RemoveRange(pocket.Transactions);
            //    }
            //}

            _context.InternalTransfers.RemoveRange(_context.InternalTransfers);
            _context.Trades.RemoveRange(_context.Trades);
            _context.Transactions.RemoveRange(_context.Transactions);
            await _context.SaveChangesAsync(cancellationToken);

            return(new RemoveAllTransactionsResponse
            {
                IsSuccessful = true,
                TransactionsRemoved = transactionsRemoved
            });
        }
        public async Task <UpdateExchangeOwnerResponse> Handle(UpdateExchangeOwnerRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateExchangeOwnerResponse();

            var owner = await _context.Owners
                        .Where(x => x.OwnerID == request.OwnerID)
                        .SingleOrDefaultAsync(cancellationToken);

            if (owner == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.OwnerNotFound;
            }

            owner.ProviderID = request.ProviderID;

            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }
        public async Task <UpdateFiatCurrencyCoinMarketCapIDsResponse> Handle(UpdateFiatCurrencyCoinMarketCapIDsRequest request, CancellationToken cancellationToken)
        {
            var result = new UpdateFiatCurrencyCoinMarketCapIDsResponse();

            var fiatCurrencyMapJSON = _fileService.ReadJSONFile <FiatCurrencyMapJSON>(FilePath.FiatCurrencyMapJSON);

            if (fiatCurrencyMapJSON.status.error_code == 0)
            {
                foreach (var fiatCurrencyJSON in fiatCurrencyMapJSON.data)
                {
                    string symbol = !string.IsNullOrEmpty(fiatCurrencyJSON.symbol) ? fiatCurrencyJSON.symbol : fiatCurrencyJSON.code;

                    var currency = await _context.Currencies
                                   .Where(x =>
                                          x.CurrencyType == CurrencyType.Fiat &&
                                          x.Symbol == symbol)
                                   .SingleOrDefaultAsync(cancellationToken);

                    if (currency != null)
                    {
                        currency.CoinMarketCapID = fiatCurrencyJSON.id;

                        await _context.SaveChangesAsync(cancellationToken);

                        result.Currencies.Add(new CurrencyDTO
                        {
                            CurrencyID      = currency.CurrencyID,
                            Symbol          = symbol,
                            CoinMarketCapID = fiatCurrencyJSON.id
                        });
                    }
                }
            }

            result.IsSuccessful = true;

            return(result);
        }
Beispiel #30
0
        public async Task <DeleteContributorResponse> Handle(DeleteContributorRequest request, CancellationToken cancellationToken)
        {
            var result = new DeleteContributorResponse();

            var contributor = await _context.Contributors
                              .Where(x => x.ContributorID == request.ContributorID)
                              .SingleOrDefaultAsync();

            if (contributor == null)
            {
                result.IsSuccessful = false;
                result.ErrorMessage = ErrorMessage.ContributorNotFound;

                return(result);
            }

            _context.Contributors.Remove(contributor);
            await _context.SaveChangesAsync(cancellationToken);

            result.IsSuccessful = true;

            return(result);
        }