12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import { Injectable } from "@angular/core";
- import Gun from "gun/gun";
- import "gun/lib/then";
- /*
- Generated class for the P2pDatabaseGunProvider provider.
- See https://angular.io/guide/dependency-injection for more info on providers
- and Angular DI.
- */
- @Injectable()
- export class P2pDatabaseGunProvider {
- private gun;
- osnPrefix: string = "hybridOSN-";
- constructor() {
- this.gun = Gun();
- }
- public storeLastTweetHashForUser(userId, hash, timestamp): void {
- const tweet = this.gun
- .get(timestamp)
- .put({ hash: hash, created_at: timestamp });
- this.gun
- .get(this.osnPrefix + userId)
- .get("tweets")
- .set(tweet);
- }
- public async getLastTweetFromUser(userId) {
- return new Promise(resolve =>
- this.gun
- .get(this.osnPrefix + userId)
- .get("tweets")
- .once(resolve)
- );
- }
- public async fetchPrivateTweetHashsForUserInInterval(
- userId,
- intervalStart,
- intervalEnd
- ): Promise<string[]> {
- const gunIds = await this.gun
- .get(this.osnPrefix + userId)
- .get("tweets")
- .then();
- if (gunIds) {
- const entries = await Promise.all(
- Object.keys(gunIds)
- .filter(key => key !== "_")
- .map(key => this.gun.get(key).then())
- );
- return entries
- .filter(
- entry =>
- new Date(entry["created_at"]) < intervalStart &&
- new Date(entry["created_at"]) >= intervalEnd
- )
- .map(entry => entry["hash"]);
- } else {
- return [];
- }
- }
- }
|