Skip to content
Snippets Groups Projects
Unverified Commit 11c5d257 authored by syuilo's avatar syuilo
Browse files

ハッシュタグチャートでローカルとリモートを分離するように

parent cee1a273
No related branches found
No related tags found
No related merge requests found
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);
}
}
......
......@@ -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();
......
......@@ -27,5 +27,5 @@ export default async function(user: IUser, tag: string) {
});
}
hashtagChart.update(tag, user._id);
hashtagChart.update(tag, user);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment