Add exposure check endpoint and made check blocks external

This commit is contained in:
QiTao Weng 2021-04-11 06:55:15 +00:00
parent 27c6619d8a
commit a701d4c3b9
2 changed files with 37 additions and 11 deletions

View File

@ -22,6 +22,20 @@ export class Blockchain extends Controller {
@Inject() @Inject()
protected readonly firebase!: FirebaseUnit protected readonly firebase!: FirebaseUnit
public async retrieve(minTime: number) {
if (!minTime) {
minTime = (new Date).getTime() - this.config.get('app.defaultTime')
}
const snapshot = await (<BlockResource> 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. * 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) return one(item)
} }
public async check() { /**
let minTime = this.request.input('minTime') * Get exposure notification from blockchain from timerange
if (!minTime) { */
minTime = (new Date).getTime() - this.config.get('app.defaultTime') 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 (<BlockResource> this.make(BlockResource)).ref() public async check() {
.orderByChild('timestamp') let minTime = this.request.input('minTime')
.startAt(minTime) return many(await this.retrieve(minTime))
.once('value')
let blocks = (Object.values(snapshot.val()) as BlockResourceItem[])
return many(blocks)
} }
public async peer() { public async peer() {

View File

@ -23,4 +23,7 @@ Route.group('/api/v1', () => {
.pre('DebugOnly') .pre('DebugOnly')
Route.get('/chain/submit', 'api:Blockchain.readBlockchainSubmission') Route.get('/chain/submit', 'api:Blockchain.readBlockchainSubmission')
Route.get('/exposure', 'api:Blockchain.getExposure')
.pre('api:FirebaseUserOnly')
}) })