mirror of
				https://github.com/hackku21/loc-chain-backend.git
				synced 2025-06-13 12:53:59 +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