Working Transactions

Transactions
dan 2019-07-05 20:46:55 -06:00
parent a81aa76bf0
commit dae8ca0616
6 changed files with 120 additions and 23 deletions

View File

@ -5,6 +5,7 @@ import { Contribution } from './contribution';
import { FormBuilder, FormGroup, Validators, FormArray } from '@angular/forms';
import { checkNumberValidator } from './check-number-validator';
import { contributorValidator } from './contributor-validator';
import { TransactionService } from 'src/app/services/transaction.service';
@Component({
selector: 'app-add-transaction-page',
@ -26,7 +27,7 @@ export class AddTransactionPageComponent implements OnInit {
constructor(private userService: UserService, private formBuilder: FormBuilder) {
constructor(private userService: UserService, private formBuilder: FormBuilder, private transactionService: TransactionService) {
this.form = this.formBuilder.group({
contributions: this.formBuilder.array([this.getContribution()])
});
@ -148,7 +149,10 @@ export class AddTransactionPageComponent implements OnInit {
}
}
console.log(transactions);
this.transactionService.createFromArray(transactions).subscribe(x =>{
this.submitButtonText = 'Submit';
this.submitButtonDisabled = false;
}, e => console.log(e));
}
}

View File

@ -5,6 +5,7 @@ import { Observable, Subject, throwError, of } from 'rxjs';
import { catchError, map, tap, first } from 'rxjs/operators';
import { TRANSACTION_CREATE_URL } from '../constants/urls';
import { Transaction } from '../components/add-transaction-page/transaction';
@Injectable()
export class TransactionService {
@ -17,6 +18,14 @@ export class TransactionService {
};
}
createFromArray(transactions: Transaction[]) {
const body = {
transactions: transactions
};
return this.httpClient.post(TRANSACTION_CREATE_URL, body, this.options)
.pipe(tap(res => console.log(res)), catchError(this.handleError));
}
create(date: Date, typeId: number, fundId: number, contributorId: number, description: string, amount: number, taxYear: number) {
const body = {
date: date,

View File

@ -1,5 +1,7 @@
var connection = require('./connection');
let inTransaction = false;
exports.query = function(sql, args) {
return new Promise(function(resolve, reject){
connection.query(sql,args,function(error,rows,fields){
@ -23,3 +25,71 @@ exports.nonQuery = function(sql, args) {
});
});
}
exports.beginTransaction = function() {
const self = this;
if (self.inTransaction === true) {
throw 'Already in a transaction';
}
self.inTransaction = true;
return new Promise(function(resolve, reject){
connection.beginTransaction(function(err){
if (err) {
self.inTransaction = false;
reject(err);
} else {
resolve(self);
}
})
});
}
exports.rollback = function() {
const self = this;
return new Promise(function(resolve, reject){
if (self.inTransaction === true) {
resolve();
return;
}
connection.rollback(function(err){
self.inTransaction = false;
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
exports.commit = function() {
const self = this;
return new Promise(function(resolve, reject){
if (self.inTransaction === false) {
resolve();
return;
}
connection.commit(function(err){
self.inTransaction = false;
if (err) {
reject(err);
} else {
resolve();
}
});
});
}
exports.end = function(){
return new Promise(function(resolve, reject){
connection.end(function(err){
if (err) {
reject(err);
} else {
resolve();
}
});
});
}

View File

@ -22,7 +22,29 @@ exports.getAll = async function() {
return result;
}
exports.add = async function(date, typeId, check, contributorId, fundId, description, amount, taxYear) {
exports.addArray = async function(transactions) {
let conn = null;
try {
conn = await connectionAsync.beginTransaction();
} catch (ex) {
throw ex;
}
const results = [];
try {
for(let i = 0; i < transactions.length; i++) {
const t = transactions[i];
const newTrans = getTransaction(t.date, t.typeId, t.check, t.contributorId, t.fundId, t.description, t.amount, t.taxYear);
const result = await conn.nonQuery('INSERT INTO Transactions Set ?', newTrans);
results.push(result);
}
await conn.commit();
} catch (ex) {
throw ex;
}
return results;
}
function getTransaction(date, typeId, check, contributorId, fundId, description, amount, taxYear) {
const newTrans = {
Date: date,
TypeId: typeId,
@ -33,6 +55,11 @@ exports.add = async function(date, typeId, check, contributorId, fundId, descrip
Amount: amount,
TaxYear: taxYear
};
return newTrans;
}
exports.add = async function(date, typeId, check, contributorId, fundId, description, amount, taxYear) {
const newTrans = getTransaction(date, typeId, check, contributorId, fundId, description, amount, taxYear);
const newTransResult = await connectionAsync.nonQuery('INSERT INTO Transactions Set ?', newTrans);
return newTransResult;
}

View File

@ -45,7 +45,7 @@ router.use(upload.single('file'),function(req,res,next){
token.id = +req.signedCookies.tokenId;
token.value = req.signedCookies.tokenValue;
auth.verifyToken(token,function(error,isValid){
auth.verifyToken(token,function(error,isValid,user){
if (error){
removeFile(filename);
res.status(400).json({"status":400,"message":"error validating token"});

View File

@ -3,28 +3,15 @@ var router = express.Router();
var dbTransactions = require("../../database/transactions");
router.post("/a/",async function(req,res) {
if (!res.locals.user || !res.locals.user.canDo || !res.locals.user.canDo('transactions_add')) {
if (!res.locals.user || !res.locals.user.canDo || !res.locals.user.canDo('user_add')) {
res.status(401).json({"status":401,"message":"you are not authorized to add a transaction"});
return;
}
const result = await dbTransactions.add(req.body.date, req.body.typeId, req.body.check, req.body.contributorId, req.body.fundId, req.body.descriptions, req.body.amount, req.body.taxYear);
console.log(result);
console.log("new user");
console.log(req.body);
console.log(res.locals.user);
console.log(res.locals.user.canDo('sermons_add'));
console.log(res.locals.user.canDo('sermons_addd'));
return;
if (!req.body.lastName){
res.status(400).json({"status":400,"message":"last name is required fields in the body"});
return;
}
try {
var newUser = await dbUsers.createUser(req.body.firstName, req.body.lastName, req.body.street, req.body.city, req.body.state, req.body.zip, req.body.country);
res.status(201).json({"status":201,"message":"user created","user":newUser});
} catch (ex) {
res.status(500).json({"status":500,"message":ex});
if (!req.body.transactions || !req.body.transactions.length || req.body.transactions.length === 0) {
res.status(400).json({"status":400,"message":"must pass an array of transactions in the body"});
}
const result = await dbTransactions.addArray(req.body.transactions);
res.status(200).json({"status":200,"message":"transactions added","result":result});
});
module.exports = router;