Пример #1
0
        public UserModule(IUsersStore userStore, IEventStore eventStore) : base("/users")
        {
            _userStore = userStore;
            Post("/", _ =>
            {
                var newUser = this.Bind <LoyalProgramUser>();
                AddRegisteredUser(newUser);
                eventStore.PutEvent("UserAdded", newUser);
                return(CreatedResponse(newUser));
            });

            Put("/{userId:int}", parameter =>
            {
                int userId      = parameter.userId;
                var updatedUser = this.Bind <LoyalProgramUser>();
                _userStore.UpdateUser(userId, updatedUser);
                eventStore.PutEvent("UserUpdated", updatedUser);
                return(updatedUser);
            });

            Get("/{userId:int}", parameter =>
            {
                var userId = parameter.userId;
                var user   = _userStore.GetUser(userId);
                return(user != null ? user : HttpStatusCode.NotFound);
            });
        }
        public async Task <TransactionsSummary> BuildAsync(string userIdentifier, DateTime from, DateTime to)
        {
            var accountTransactions = transactionStore.GetTransactions(usersStore.GetUser(userIdentifier), from, to);

            if (accountTransactions.Count == 0)
            {
                // TODO: Should this class do the import? Currently it does.
                await transactionsImporter.ImportTransactionsAsync(userIdentifier);

                accountTransactions = transactionStore.GetTransactions(usersStore.GetUser(userIdentifier), from, to);
            }

            // TODO: Need to improve it and make it more readable.
            var categories = accountTransactions.SelectMany(at => at.Value, (at, t) => new { AccountIdentifier = at.Key, Transaction = t })
                             .GroupBy(at => new { at.AccountIdentifier, at.Transaction.Category }) // Calcuate summary based on account and category
                             .Select(g => new { g.Key.AccountIdentifier, g.Key.Category, Summary = BuildAccountSummary(g.Key.AccountIdentifier, g.Key.Category, g.Select(at => at.Transaction)) })
                             .GroupBy(accountSummary => accountSummary.Category)                   // Group again on category
                             .Select(g => new CategorySummary(g.Key, g.Select(accountSummary => accountSummary.Summary).ToList()))
                             .ToList();

            return(new TransactionsSummary(from, to, categories));
        }
Пример #3
0
        public async Task <TransactionsImportResult> ImportTransactionsAsync(string userIdentifier)
        {
            var user = usersStore.GetUser(userIdentifier);
            TransactionsImportResult result = new TransactionsImportResult();
            var accounts = await bankDataProvider.GetUserAccountsAsync(user);

            foreach (var account in accounts)
            {
                transactionsStore.AddAccount(user, account);
                result.AccountsImported.Add(await ImportAcountTransactions(user, account));
            }

            return(result);
        }