public async Task DeleteTransaction(ApiModels.Transaction transaction) { using (var connection = _mySqlConnectionFactory.CreateConnection()) { await connection.ExecuteAsync(DeleteTransactionQuery, new { transactionId = transaction.Id }); } }
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)); }
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(); } } }