Exemplo n.º 1
0
 public async Task DeleteTransaction(ApiModels.Transaction transaction)
 {
     using (var connection = _mySqlConnectionFactory.CreateConnection())
     {
         await connection.ExecuteAsync(DeleteTransactionQuery, new { transactionId = transaction.Id });
     }
 }
Exemplo n.º 2
0
        public IActionResult AddTransaction([FromBody] AddTransactionDto addTransactionDto)
        {
            // TODO validation, should be a single transaction scope
            var response = new AddTransactionResponse();

            if (addTransactionDto.Vendor.Id == null) // todo to be moved
            {
                var vendor = new Vendor()
                {
                    Name = addTransactionDto.Vendor.Name,
                    DefaultSubcategoryId = addTransactionDto.SubcategoryId
                };
                _vendorStore.SaveVendor(vendor);
                addTransactionDto.Vendor.Id = vendor.Id;
                addTransactionDto.Vendor.DefaultSubcategoryId = addTransactionDto.SubcategoryId;
                response.NewVendor = addTransactionDto.Vendor;
            }

            foreach (var newTag in addTransactionDto.Tags.Where(x => x.Id is null))
            {
                var tag = new Tag()
                {
                    Name = newTag.Name,
                };
                _tagStore.SaveTag(tag);
                newTag.Id = tag.Id;

                response.NewTags.Add(newTag);
            }

            var createdTransaction = new ApiModels.Transaction()
            {
                Amount          = addTransactionDto.Amount,
                CreatedDate     = DateTime.UtcNow,
                CreatedBy       = "API",
                Description     = addTransactionDto.Description,
                IsExpense       = true,
                ModifiedDate    = DateTime.UtcNow,
                SubcategoryId   = addTransactionDto.SubcategoryId,
                TagIds          = addTransactionDto.Tags.Select(x => x.Id.Value).ToList(),
                TransactionDate = addTransactionDto.TransactionDate,
                VendorId        = addTransactionDto.Vendor.Id.Value
            };

            _transactionStore.SaveTransaction(createdTransaction);

            response.Transaction = createdTransaction;

            return(StatusCode(StatusCodes.Status201Created, response));
        }
Exemplo n.º 3
0
        public async Task UpdateTransaction(ApiModels.Transaction transaction)
        {
            using (var connection = _mySqlConnectionFactory.CreateConnection())
            {
                connection.Open();
                await using (var dbTransaction = await connection.BeginTransactionAsync())
                {
                    await connection.ExecuteAsync(UpdateTransactionQuery, transaction, dbTransaction);

                    await connection.ExecuteAsync(DeleteTransactionTags, new { transactionId = transaction.Id }, dbTransaction);

                    await connection.ExecuteAsync(SaveTransactionTags,
                                                  transaction.TagIds.Select(x => new { transactionId = transaction.Id, tagId = x }), dbTransaction);

                    await dbTransaction.CommitAsync();
                }
            }
        }