summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-10-21 16:54:07 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-10-21 16:54:07 +0900
commit4c180869c68e313531664e2e0bfbfb445ec27d4d (patch)
tree9103cbbd1f1a515dc4c0b73d82783de67a0f6969 /src
parentRefactor (diff)
downloadmisskey-4c180869c68e313531664e2e0bfbfb445ec27d4d.tar.gz
misskey-4c180869c68e313531664e2e0bfbfb445ec27d4d.tar.bz2
misskey-4c180869c68e313531664e2e0bfbfb445ec27d4d.zip
Imprement hashtag stats
Diffstat (limited to 'src')
-rw-r--r--src/services/register-hashtag.ts3
-rw-r--r--src/services/stats.ts46
2 files changed, 44 insertions, 5 deletions
diff --git a/src/services/register-hashtag.ts b/src/services/register-hashtag.ts
index ca6b74783b..58222c1f49 100644
--- a/src/services/register-hashtag.ts
+++ b/src/services/register-hashtag.ts
@@ -1,5 +1,6 @@
import { IUser } from '../models/user';
import Hashtag from '../models/hashtag';
+import { hashtagStats } from './stats';
export default async function(user: IUser, tag: string) {
tag = tag.toLowerCase();
@@ -25,4 +26,6 @@ export default async function(user: IUser, tag: string) {
mentionedUserIdsCount: 1
});
}
+
+ hashtagStats.update(tag, user._id);
}
diff --git a/src/services/stats.ts b/src/services/stats.ts
index f9acc8d94c..d64335e11e 100644
--- a/src/services/stats.ts
+++ b/src/services/stats.ts
@@ -87,7 +87,7 @@ abstract class Stats<T> {
}
@autobind
- private async getCurrentLog(span: Span, group?: Obj): Promise<Log<T>> {
+ private async getCurrentLog(span: Span, group?: any): Promise<Log<T>> {
const now = new Date();
const y = now.getFullYear();
const m = now.getMonth();
@@ -156,7 +156,7 @@ abstract class Stats<T> {
}
@autobind
- protected commit(query: Obj, group?: Obj, uniqueKey?: string, uniqueValue?: string): void {
+ protected commit(query: Obj, group?: any, uniqueKey?: string, uniqueValue?: string): void {
const update = (log: Log<T>) => {
// ユニークインクリメントの場合、指定のキーに指定の値が既に存在していたら弾く
if (
@@ -183,21 +183,21 @@ abstract class Stats<T> {
}
@autobind
- protected inc(inc: Partial<T>, group?: Obj): void {
+ protected inc(inc: Partial<T>, group?: any): void {
this.commit({
$inc: this.convertQuery(inc, 'data')
}, group);
}
@autobind
- protected incIfUnique(inc: Partial<T>, key: string, value: string, group?: Obj): void {
+ protected incIfUnique(inc: Partial<T>, key: string, value: string, group?: any): void {
this.commit({
$inc: this.convertQuery(inc, 'data')
}, group, key, value);
}
@autobind
- public async getChart(span: Span, range: number, group?: Obj): Promise<ArrayValue<T>> {
+ public async getChart(span: Span, range: number, group?: any): Promise<ArrayValue<T>> {
const promisedChart: Promise<T>[] = [];
const now = new Date();
@@ -730,3 +730,39 @@ class NetworkStats extends Stats<NetworkLog> {
export const networkStats = new NetworkStats();
//#endregion
+
+//#region Hashtag stats
+/**
+ * ハッシュタグに関する統計
+ */
+type HashtagLog = {
+ /**
+ * 投稿された数
+ */
+ count: number;
+};
+
+class HashtagStats extends Stats<HashtagLog> {
+ constructor() {
+ super('hashtag');
+ }
+
+ @autobind
+ protected async generateTemplate(init: boolean, latestLog?: HashtagLog): Promise<HashtagLog> {
+ return {
+ count: 0
+ };
+ }
+
+ @autobind
+ public async update(hashtag: string, userId: mongo.ObjectId) {
+ const inc: Partial<HashtagLog> = {
+ count: 1
+ };
+
+ await this.incIfUnique(inc, 'users', userId.toHexString(), hashtag);
+ }
+}
+
+export const hashtagStats = new HashtagStats();
+//#endregion