mirror of
https://github.com/hackku21/loc-chain-backend.git
synced 2024-10-27 20:34:03 +00:00
Add API endpoint for testing transaction
This commit is contained in:
parent
5ae20e945f
commit
7e15291806
@ -2,7 +2,7 @@ import {Inject, Injectable} from "@extollo/di"
|
||||
import {Collection, Iterable} from "@extollo/util"
|
||||
import {FirebaseUnit, RTDBRef} from "./units/FirebaseUnit"
|
||||
import * as firebase from "firebase-admin"
|
||||
import {Application} from "@extollo/lib";
|
||||
import {Application} from "@extollo/lib"
|
||||
|
||||
/**
|
||||
* Base interface for an item in a Firebase RTDB collection.
|
||||
|
29
src/app/http/controllers/api/Blockchain.controller.ts
Normal file
29
src/app/http/controllers/api/Blockchain.controller.ts
Normal file
@ -0,0 +1,29 @@
|
||||
import {Controller} from "@extollo/lib"
|
||||
import {Inject, Injectable} from "@extollo/di"
|
||||
import {TransactionResource, TransactionResourceItem} from "../../../rtdb/TransactionResource"
|
||||
import {one} from "@extollo/util"
|
||||
|
||||
/**
|
||||
* Blockchain Controller
|
||||
* ------------------------------------
|
||||
* Route handlers for API endpoints.
|
||||
*/
|
||||
@Injectable()
|
||||
export class Blockchain extends Controller {
|
||||
|
||||
public async postTransaction() {
|
||||
const item: TransactionResourceItem = {
|
||||
firebaseID: '',
|
||||
seqID: -1,
|
||||
combinedHash: String(this.request.input('combinedHash')),
|
||||
timestamp: parseInt(String(this.request.input('timestamp'))),
|
||||
encodedGPSLocation: String(this.request.input('encodedGPSLocation')),
|
||||
partnerPublicKey: String(this.request.input('partnerPublicKey')),
|
||||
validationSignature: String(this.request.input('validationSignature')),
|
||||
}
|
||||
|
||||
await (<TransactionResource> this.make(TransactionResource)).push(item)
|
||||
return one(item)
|
||||
}
|
||||
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
import {Controller, view, Session} from '@extollo/lib';
|
||||
import {Inject, Injectable} from "@extollo/di";
|
||||
|
||||
@Injectable()
|
||||
export class Home extends Controller {
|
||||
@Inject()
|
||||
protected readonly session!: Session;
|
||||
|
||||
public welcome() {
|
||||
this.session.set('app_visits', this.session.get('app_visits', 0) + 1)
|
||||
|
||||
return view('welcome', {
|
||||
app_visits: this.session.get('app_visits'),
|
||||
})
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
import {error, Middleware} from "@extollo/lib"
|
||||
import {Injectable} from "@extollo/di"
|
||||
import {HTTPStatus} from "@extollo/util";
|
||||
|
||||
/**
|
||||
* ValidateEncounterTransaction Middleware
|
||||
* --------------------------------------------
|
||||
* Put some description here.
|
||||
*/
|
||||
@Injectable()
|
||||
export class ValidateEncounterTransaction extends Middleware {
|
||||
public async apply() {
|
||||
const required: string[] = [
|
||||
'combinedHash',
|
||||
'encodedGPSLocation',
|
||||
'partnerPublicKey',
|
||||
'validationSignature',
|
||||
'timestamp',
|
||||
]
|
||||
|
||||
for ( const field of required ) {
|
||||
if ( !this.request.input(field) ) {
|
||||
return error(`Missing required field: ${field}`, HTTPStatus.BAD_REQUEST, 'json')
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,3 +1,6 @@
|
||||
import {Route} from "@extollo/lib"
|
||||
|
||||
Route.get('/', 'main:Home.welcome')
|
||||
Route.group('/api/v1', () => {
|
||||
Route.post('/encounter', 'api:Blockchain.postTransaction')
|
||||
.pre('api:ValidateEncounterTransaction')
|
||||
})
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {FirebaseResource, FirebaseResourceItem} from "../FirebaseResource"
|
||||
import {Injectable} from "@extollo/di"
|
||||
import {RTDBRef} from "../units/FirebaseUnit"
|
||||
import {AsyncCollection} from "@extollo/util";
|
||||
import {AsyncCollection} from "@extollo/util"
|
||||
|
||||
/**
|
||||
* Interface representing a client-submitted encounter transaction.
|
||||
|
Loading…
Reference in New Issue
Block a user