diff --git a/src/app/http/controllers/api/Blockchain.controller.ts b/src/app/http/controllers/api/Blockchain.controller.ts index 97006cf..c5171c4 100644 --- a/src/app/http/controllers/api/Blockchain.controller.ts +++ b/src/app/http/controllers/api/Blockchain.controller.ts @@ -22,6 +22,20 @@ export class Blockchain extends Controller { @Inject() protected readonly firebase!: FirebaseUnit + + public async retrieve(minTime: number) { + if (!minTime) { + minTime = (new Date).getTime() - this.config.get('app.defaultTime') + } + + const snapshot = await ( this.make(BlockResource)).ref() + .orderByChild('timestamp') + .startAt(minTime) + .once('value') + + let blocks = (Object.values(snapshot.val()) as BlockResourceItem[]) + return blocks + } /** * Read the version of the blockchain held by this host, as it currently exists. */ @@ -86,19 +100,28 @@ export class Blockchain extends Controller { return one(item) } - public async check() { - let minTime = this.request.input('minTime') - if (!minTime) { - minTime = (new Date).getTime() - this.config.get('app.defaultTime') + /** + * Get exposure notification from blockchain from timerange + */ + public async getExposure() { + let date = this.request.input('date') + let minTime = Date.now() - date + let blocks = await this.retrieve(minTime) + let exposed: string[] = [] + for (const block of blocks) { + let transactions = block.transactions + for (const item of transactions) { + if ((item as ExposureResourceItem).clientID) { + exposed.push((item as ExposureResourceItem).clientID) + } + } } + return many(exposed) + } - const snapshot = await ( this.make(BlockResource)).ref() - .orderByChild('timestamp') - .startAt(minTime) - .once('value') - - let blocks = (Object.values(snapshot.val()) as BlockResourceItem[]) - return many(blocks) + public async check() { + let minTime = this.request.input('minTime') + return many(await this.retrieve(minTime)) } public async peer() { diff --git a/src/app/http/routes/app.routes.ts b/src/app/http/routes/app.routes.ts index 9e474b7..cf32e12 100644 --- a/src/app/http/routes/app.routes.ts +++ b/src/app/http/routes/app.routes.ts @@ -23,4 +23,7 @@ Route.group('/api/v1', () => { .pre('DebugOnly') Route.get('/chain/submit', 'api:Blockchain.readBlockchainSubmission') + + Route.get('/exposure', 'api:Blockchain.getExposure') + .pre('api:FirebaseUserOnly') })