12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import { Injectable } from "@angular/core";
- import Gun from "gun/gun";
- import "gun/lib/then";
- @Injectable()
- export class P2pDatabaseGunProvider {
- private gun;
- osnPrefix: string = "hybridOSN-beta003";
- constructor() {
- this.gun = Gun(["https://hybrid-osn.herokuapp.com/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);
- }
- /**
- * Hashtags are stored without reference to the users to provide these information on an extra dashboard to twitter
- * @param hashtagEntity extracted hashtags
- */
- public publishHashtags(hashtagEntity): void {
- const timestamp = Date.now();
- const hashtagsCommaSeparated = hashtagEntity
- .map(el => el.hashtag)
- .sort()
- .join("|");
- const hashtags = this.gun.get(timestamp).put({
- hashtags: hashtagsCommaSeparated,
- created_at: timestamp
- });
- this.gun.get(this.osnPrefix + "/hashtags").set(hashtags);
- }
- 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<object[]> {
- 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
- );
- } else {
- return [];
- }
- }
- }
|