summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-10-23 09:59:43 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-10-23 09:59:43 +0900
commit11c5d257f2394a8a9dcfc7fe15c9e57684dfd11e (patch)
treebb01289dceb1472924910a9593a36ae36b5059ed
parent:art: (diff)
downloadsharkey-11c5d257f2394a8a9dcfc7fe15c9e57684dfd11e.tar.gz
sharkey-11c5d257f2394a8a9dcfc7fe15c9e57684dfd11e.tar.bz2
sharkey-11c5d257f2394a8a9dcfc7fe15c9e57684dfd11e.zip
ハッシュタグチャートでローカルとリモートを分離するように
-rw-r--r--src/chart/hashtag.ts39
-rw-r--r--src/client/app/desktop/views/pages/deck/deck.hashtag-column.vue19
-rw-r--r--src/services/register-hashtag.ts2
3 files changed, 40 insertions, 20 deletions
diff --git a/src/chart/hashtag.ts b/src/chart/hashtag.ts
index 976fd0c84b..5b03d8ba34 100644
--- a/src/chart/hashtag.ts
+++ b/src/chart/hashtag.ts
@@ -1,36 +1,55 @@
import autobind from 'autobind-decorator';
-import * as mongo from 'mongodb';
-import Chart, { Partial } from './';
+import Chart, { Obj } from './';
+import { IUser, isLocalUser } from '../models/user';
+import db from '../db/mongodb';
/**
* ハッシュタグに関するチャート
*/
type HashtagLog = {
- /**
- * 投稿された数
- */
- count: number;
+ local: {
+ /**
+ * 投稿された数
+ */
+ count: number;
+ };
+
+ remote: HashtagLog['local'];
};
class HashtagChart extends Chart<HashtagLog> {
constructor() {
super('hashtag', true);
+
+ // 後方互換性のため
+ db.get('chart.hashtag').findOne().then(doc => {
+ if (doc != null && doc.data.local == null) {
+ db.get('chart.hashtag').drop();
+ }
+ });
}
@autobind
protected async getTemplate(init: boolean, latest?: HashtagLog): Promise<HashtagLog> {
return {
- count: 0
+ local: {
+ count: 0
+ },
+ remote: {
+ count: 0
+ }
};
}
@autobind
- public async update(hashtag: string, userId: mongo.ObjectId) {
- const inc: Partial<HashtagLog> = {
+ public async update(hashtag: string, user: IUser) {
+ const update: Obj = {
count: 1
};
- await this.incIfUnique(inc, 'users', userId.toHexString(), hashtag);
+ await this.incIfUnique({
+ [isLocalUser(user) ? 'local' : 'remote']: update
+ }, 'users', user._id.toHexString(), hashtag);
}
}
diff --git a/src/client/app/desktop/views/pages/deck/deck.hashtag-column.vue b/src/client/app/desktop/views/pages/deck/deck.hashtag-column.vue
index 6006146164..2b5bf14b27 100644
--- a/src/client/app/desktop/views/pages/deck/deck.hashtag-column.vue
+++ b/src/client/app/desktop/views/pages/deck/deck.hashtag-column.vue
@@ -16,7 +16,6 @@ import Vue from 'vue';
import XColumn from './deck.column.vue';
import XHashtagTl from './deck.hashtag-tl.vue';
import * as ApexCharts from 'apexcharts';
-import * as tinycolor from 'tinycolor2';
export default Vue.extend({
components: {
@@ -45,7 +44,8 @@ export default Vue.extend({
span: 'hour',
limit: 24
}).then(stats => {
- const data = [];
+ const local = [];
+ const remote = [];
const now = new Date();
const y = now.getFullYear();
@@ -55,11 +55,10 @@ export default Vue.extend({
for (let i = 0; i < 24; i++) {
const x = new Date(y, m, d, h - i);
- data.push([x, stats.count[i]]);
+ local.push([x, stats.local.count[i]]);
+ remote.push([x, stats.remote.count[i]]);
}
- const color = tinycolor(getComputedStyle(document.documentElement).getPropertyValue('--primary'));
-
const chart = new ApexCharts(this.$refs.chart, {
chart: {
type: 'area',
@@ -82,13 +81,15 @@ export default Vue.extend({
width: 2
},
series: [{
- name: 'count',
- data: data
+ name: 'Local',
+ data: local
+ }, {
+ name: 'Remote',
+ data: remote
}],
xaxis: {
type: 'datetime',
- },
- colors: [`#${color.clone().toHex()}`]
+ }
});
chart.render();
diff --git a/src/services/register-hashtag.ts b/src/services/register-hashtag.ts
index 106df377b7..57ba2080f2 100644
--- a/src/services/register-hashtag.ts
+++ b/src/services/register-hashtag.ts
@@ -27,5 +27,5 @@ export default async function(user: IUser, tag: string) {
});
}
- hashtagChart.update(tag, user._id);
+ hashtagChart.update(tag, user);
}