feat: add per user pv chart
This commit is contained in:
parent
4c4af2ae84
commit
969e9df889
13 changed files with 153 additions and 4 deletions
|
|
@ -0,0 +1,12 @@
|
|||
import Chart from '../../core.js';
|
||||
|
||||
export const name = 'perUserPv';
|
||||
|
||||
export const schema = {
|
||||
'upv.user': { uniqueIncrement: true, range: 'small' },
|
||||
'pv.user': { range: 'small' },
|
||||
'upv.visitor': { uniqueIncrement: true, range: 'small' },
|
||||
'pv.visitor': { range: 'small' },
|
||||
} as const;
|
||||
|
||||
export const entity = Chart.schemaToEntity(name, schema, true);
|
||||
51
packages/backend/src/core/chart/charts/per-user-pv.ts
Normal file
51
packages/backend/src/core/chart/charts/per-user-pv.ts
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
import { Injectable, Inject } from '@nestjs/common';
|
||||
import { DataSource } from 'typeorm';
|
||||
import type { User } from '@/models/entities/User.js';
|
||||
import { AppLockService } from '@/core/AppLockService.js';
|
||||
import { DI } from '@/di-symbols.js';
|
||||
import { bindThis } from '@/decorators.js';
|
||||
import Chart from '../core.js';
|
||||
import { ChartLoggerService } from '../ChartLoggerService.js';
|
||||
import { name, schema } from './entities/per-user-pv.js';
|
||||
import type { KVs } from '../core.js';
|
||||
|
||||
/**
|
||||
* ユーザーごとのプロフィール被閲覧数に関するチャート
|
||||
*/
|
||||
// eslint-disable-next-line import/no-default-export
|
||||
@Injectable()
|
||||
export default class PerUserPvChart extends Chart<typeof schema> {
|
||||
constructor(
|
||||
@Inject(DI.db)
|
||||
private db: DataSource,
|
||||
|
||||
private appLockService: AppLockService,
|
||||
private chartLoggerService: ChartLoggerService,
|
||||
) {
|
||||
super(db, (k) => appLockService.getChartInsertLock(k), chartLoggerService.logger, name, schema, true);
|
||||
}
|
||||
|
||||
protected async tickMajor(): Promise<Partial<KVs<typeof schema>>> {
|
||||
return {};
|
||||
}
|
||||
|
||||
protected async tickMinor(): Promise<Partial<KVs<typeof schema>>> {
|
||||
return {};
|
||||
}
|
||||
|
||||
@bindThis
|
||||
public async commitByUser(user: { id: User['id'] }, key: string): Promise<void> {
|
||||
await this.commit({
|
||||
'upv.user': [key],
|
||||
'pv.user': 1,
|
||||
}, user.id);
|
||||
}
|
||||
|
||||
@bindThis
|
||||
public async commitByVisitor(user: { id: User['id'] }, key: string): Promise<void> {
|
||||
await this.commit({
|
||||
'upv.visitor': [key],
|
||||
'pv.visitor': 1,
|
||||
}, user.id);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue