refactor: tweak variable name
This commit is contained in:
parent
843f1aed4f
commit
ebc6437977
@ -11,9 +11,9 @@ import type Logger from '@/logger.js';
|
|||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
import type { Repository, DataSource } from 'typeorm';
|
import type { Repository, DataSource } from 'typeorm';
|
||||||
|
|
||||||
const columnPrefix = '___' as const;
|
const COLUMN_PREFIX = '___' as const;
|
||||||
const uniqueTempColumnPrefix = 'unique_temp___' as const;
|
const UNIQUE_TEMP_COLUMN_PREFIX = 'unique_temp___' as const;
|
||||||
const columnDot = '_' as const;
|
const COLUMN_DELIMITER = '_' as const;
|
||||||
|
|
||||||
type Schema = Record<string, {
|
type Schema = Record<string, {
|
||||||
uniqueIncrement?: boolean;
|
uniqueIncrement?: boolean;
|
||||||
@ -26,14 +26,14 @@ type Schema = Record<string, {
|
|||||||
accumulate?: boolean;
|
accumulate?: boolean;
|
||||||
}>;
|
}>;
|
||||||
|
|
||||||
type KeyToColumnName<T extends string> = T extends `${infer R1}.${infer R2}` ? `${R1}${typeof columnDot}${KeyToColumnName<R2>}` : T;
|
type KeyToColumnName<T extends string> = T extends `${infer R1}.${infer R2}` ? `${R1}${typeof COLUMN_DELIMITER}${KeyToColumnName<R2>}` : T;
|
||||||
|
|
||||||
type Columns<S extends Schema> = {
|
type Columns<S extends Schema> = {
|
||||||
[K in keyof S as `${typeof columnPrefix}${KeyToColumnName<string & K>}`]: number;
|
[K in keyof S as `${typeof COLUMN_PREFIX}${KeyToColumnName<string & K>}`]: number;
|
||||||
};
|
};
|
||||||
|
|
||||||
type TempColumnsForUnique<S extends Schema> = {
|
type TempColumnsForUnique<S extends Schema> = {
|
||||||
[K in keyof S as `${typeof uniqueTempColumnPrefix}${KeyToColumnName<string & K>}`]: S[K]['uniqueIncrement'] extends true ? string[] : never;
|
[K in keyof S as `${typeof UNIQUE_TEMP_COLUMN_PREFIX}${KeyToColumnName<string & K>}`]: S[K]['uniqueIncrement'] extends true ? string[] : never;
|
||||||
};
|
};
|
||||||
|
|
||||||
type RawRecord<S extends Schema> = {
|
type RawRecord<S extends Schema> = {
|
||||||
@ -138,20 +138,20 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
private static convertSchemaToColumnDefinitions(schema: Schema): Record<string, { type: string; array?: boolean; default?: any; }> {
|
private static convertSchemaToColumnDefinitions(schema: Schema): Record<string, { type: string; array?: boolean; default?: any; }> {
|
||||||
const columns = {} as Record<string, { type: string; array?: boolean; default?: any; }>;
|
const columns = {} as Record<string, { type: string; array?: boolean; default?: any; }>;
|
||||||
for (const [k, v] of Object.entries(schema)) {
|
for (const [k, v] of Object.entries(schema)) {
|
||||||
const name = k.replaceAll('.', columnDot);
|
const name = k.replaceAll('.', COLUMN_DELIMITER);
|
||||||
const type = v.range === 'big' ? 'bigint' : v.range === 'small' ? 'smallint' : 'integer';
|
const type = v.range === 'big' ? 'bigint' : v.range === 'small' ? 'smallint' : 'integer';
|
||||||
if (v.uniqueIncrement) {
|
if (v.uniqueIncrement) {
|
||||||
columns[uniqueTempColumnPrefix + name] = {
|
columns[UNIQUE_TEMP_COLUMN_PREFIX + name] = {
|
||||||
type: 'varchar',
|
type: 'varchar',
|
||||||
array: true,
|
array: true,
|
||||||
default: '{}',
|
default: '{}',
|
||||||
};
|
};
|
||||||
columns[columnPrefix + name] = {
|
columns[COLUMN_PREFIX + name] = {
|
||||||
type,
|
type,
|
||||||
default: 0,
|
default: 0,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
columns[columnPrefix + name] = {
|
columns[COLUMN_PREFIX + name] = {
|
||||||
type,
|
type,
|
||||||
default: 0,
|
default: 0,
|
||||||
};
|
};
|
||||||
@ -253,8 +253,8 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
@bindThis
|
@bindThis
|
||||||
private convertRawRecord(x: RawRecord<T>): KVs<T> {
|
private convertRawRecord(x: RawRecord<T>): KVs<T> {
|
||||||
const kvs = {} as Record<string, number>;
|
const kvs = {} as Record<string, number>;
|
||||||
for (const k of Object.keys(x).filter((k) => k.startsWith(columnPrefix)) as (keyof Columns<T>)[]) {
|
for (const k of Object.keys(x).filter((k) => k.startsWith(COLUMN_PREFIX)) as (keyof Columns<T>)[]) {
|
||||||
kvs[(k as string).substr(columnPrefix.length).split(columnDot).join('.')] = x[k] as unknown as number;
|
kvs[(k as string).substr(COLUMN_PREFIX.length).split(COLUMN_DELIMITER).join('.')] = x[k] as unknown as number;
|
||||||
}
|
}
|
||||||
return kvs as KVs<T>;
|
return kvs as KVs<T>;
|
||||||
}
|
}
|
||||||
@ -357,8 +357,8 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
|
|
||||||
const columns = {} as Record<string, number | unknown[]>;
|
const columns = {} as Record<string, number | unknown[]>;
|
||||||
for (const [k, v] of Object.entries(data)) {
|
for (const [k, v] of Object.entries(data)) {
|
||||||
const name = k.replaceAll('.', columnDot);
|
const name = k.replaceAll('.', COLUMN_DELIMITER);
|
||||||
columns[columnPrefix + name] = v;
|
columns[COLUMN_PREFIX + name] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新規ログ挿入
|
// 新規ログ挿入
|
||||||
@ -419,13 +419,13 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
const queryForDay: Record<keyof RawRecord<T>, number | (() => string)> = {} as any;
|
const queryForDay: Record<keyof RawRecord<T>, number | (() => string)> = {} as any;
|
||||||
for (const [k, v] of Object.entries(finalDiffs)) {
|
for (const [k, v] of Object.entries(finalDiffs)) {
|
||||||
if (typeof v === 'number') {
|
if (typeof v === 'number') {
|
||||||
const name = columnPrefix + k.replaceAll('.', columnDot) as string & keyof Columns<T>;
|
const name = COLUMN_PREFIX + k.replaceAll('.', COLUMN_DELIMITER) as string & keyof Columns<T>;
|
||||||
if (v > 0) queryForHour[name] = () => `"${name}" + ${v}`;
|
if (v > 0) queryForHour[name] = () => `"${name}" + ${v}`;
|
||||||
if (v < 0) queryForHour[name] = () => `"${name}" - ${Math.abs(v)}`;
|
if (v < 0) queryForHour[name] = () => `"${name}" - ${Math.abs(v)}`;
|
||||||
if (v > 0) queryForDay[name] = () => `"${name}" + ${v}`;
|
if (v > 0) queryForDay[name] = () => `"${name}" + ${v}`;
|
||||||
if (v < 0) queryForDay[name] = () => `"${name}" - ${Math.abs(v)}`;
|
if (v < 0) queryForDay[name] = () => `"${name}" - ${Math.abs(v)}`;
|
||||||
} else if (Array.isArray(v) && v.length > 0) { // ユニークインクリメント
|
} else if (Array.isArray(v) && v.length > 0) { // ユニークインクリメント
|
||||||
const tempColumnName = uniqueTempColumnPrefix + k.replaceAll('.', columnDot) as string & keyof TempColumnsForUnique<T>;
|
const tempColumnName = UNIQUE_TEMP_COLUMN_PREFIX + k.replaceAll('.', COLUMN_DELIMITER) as string & keyof TempColumnsForUnique<T>;
|
||||||
// TODO: item をSQLエスケープ
|
// TODO: item をSQLエスケープ
|
||||||
const itemsForHour = v.filter(item => !(logHour[tempColumnName] as unknown as string[]).includes(item)).map(item => `"${item}"`);
|
const itemsForHour = v.filter(item => !(logHour[tempColumnName] as unknown as string[]).includes(item)).map(item => `"${item}"`);
|
||||||
const itemsForDay = v.filter(item => !(logDay[tempColumnName] as unknown as string[]).includes(item)).map(item => `"${item}"`);
|
const itemsForDay = v.filter(item => !(logDay[tempColumnName] as unknown as string[]).includes(item)).map(item => `"${item}"`);
|
||||||
@ -437,8 +437,8 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
// bake unique count
|
// bake unique count
|
||||||
for (const [k, v] of Object.entries(finalDiffs)) {
|
for (const [k, v] of Object.entries(finalDiffs)) {
|
||||||
if (this.schema[k].uniqueIncrement) {
|
if (this.schema[k].uniqueIncrement) {
|
||||||
const name = columnPrefix + k.replaceAll('.', columnDot) as keyof Columns<T>;
|
const name = COLUMN_PREFIX + k.replaceAll('.', COLUMN_DELIMITER) as keyof Columns<T>;
|
||||||
const tempColumnName = uniqueTempColumnPrefix + k.replaceAll('.', columnDot) as keyof TempColumnsForUnique<T>;
|
const tempColumnName = UNIQUE_TEMP_COLUMN_PREFIX + k.replaceAll('.', COLUMN_DELIMITER) as keyof TempColumnsForUnique<T>;
|
||||||
queryForHour[name] = new Set([...(v as string[]), ...(logHour[tempColumnName] as unknown as string[])]).size;
|
queryForHour[name] = new Set([...(v as string[]), ...(logHour[tempColumnName] as unknown as string[])]).size;
|
||||||
queryForDay[name] = new Set([...(v as string[]), ...(logDay[tempColumnName] as unknown as string[])]).size;
|
queryForDay[name] = new Set([...(v as string[]), ...(logDay[tempColumnName] as unknown as string[])]).size;
|
||||||
}
|
}
|
||||||
@ -449,15 +449,15 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
for (const [k, v] of Object.entries(this.schema)) {
|
for (const [k, v] of Object.entries(this.schema)) {
|
||||||
const intersection = v.intersection;
|
const intersection = v.intersection;
|
||||||
if (intersection) {
|
if (intersection) {
|
||||||
const name = columnPrefix + k.replaceAll('.', columnDot) as keyof Columns<T>;
|
const name = COLUMN_PREFIX + k.replaceAll('.', COLUMN_DELIMITER) as keyof Columns<T>;
|
||||||
const firstKey = intersection[0];
|
const firstKey = intersection[0];
|
||||||
const firstTempColumnName = uniqueTempColumnPrefix + firstKey.replaceAll('.', columnDot) as keyof TempColumnsForUnique<T>;
|
const firstTempColumnName = UNIQUE_TEMP_COLUMN_PREFIX + firstKey.replaceAll('.', COLUMN_DELIMITER) as keyof TempColumnsForUnique<T>;
|
||||||
const firstValues = finalDiffs[firstKey] as string[] | undefined;
|
const firstValues = finalDiffs[firstKey] as string[] | undefined;
|
||||||
const currentValuesForHour = new Set([...(firstValues ?? []), ...(logHour[firstTempColumnName] as unknown as string[])]);
|
const currentValuesForHour = new Set([...(firstValues ?? []), ...(logHour[firstTempColumnName] as unknown as string[])]);
|
||||||
const currentValuesForDay = new Set([...(firstValues ?? []), ...(logDay[firstTempColumnName] as unknown as string[])]);
|
const currentValuesForDay = new Set([...(firstValues ?? []), ...(logDay[firstTempColumnName] as unknown as string[])]);
|
||||||
for (let i = 1; i < intersection.length; i++) {
|
for (let i = 1; i < intersection.length; i++) {
|
||||||
const targetKey = intersection[i];
|
const targetKey = intersection[i];
|
||||||
const targetTempColumnName = uniqueTempColumnPrefix + targetKey.replaceAll('.', columnDot) as keyof TempColumnsForUnique<T>;
|
const targetTempColumnName = UNIQUE_TEMP_COLUMN_PREFIX + targetKey.replaceAll('.', COLUMN_DELIMITER) as keyof TempColumnsForUnique<T>;
|
||||||
const targetValues = finalDiffs[targetKey] as string[] | undefined;
|
const targetValues = finalDiffs[targetKey] as string[] | undefined;
|
||||||
const targetValuesForHour = new Set([...(targetValues ?? []), ...(logHour[targetTempColumnName] as unknown as string[])]);
|
const targetValuesForHour = new Set([...(targetValues ?? []), ...(logHour[targetTempColumnName] as unknown as string[])]);
|
||||||
const targetValuesForDay = new Set([...(targetValues ?? []), ...(logDay[targetTempColumnName] as unknown as string[])]);
|
const targetValuesForDay = new Set([...(targetValues ?? []), ...(logDay[targetTempColumnName] as unknown as string[])]);
|
||||||
@ -510,7 +510,7 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
|
|
||||||
const columns = {} as Record<keyof Columns<T>, number>;
|
const columns = {} as Record<keyof Columns<T>, number>;
|
||||||
for (const [k, v] of Object.entries(data) as ([keyof typeof data, number])[]) {
|
for (const [k, v] of Object.entries(data) as ([keyof typeof data, number])[]) {
|
||||||
const name = columnPrefix + (k as string).replaceAll('.', columnDot) as keyof Columns<T>;
|
const name = COLUMN_PREFIX + (k as string).replaceAll('.', COLUMN_DELIMITER) as keyof Columns<T>;
|
||||||
columns[name] = v;
|
columns[name] = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -556,7 +556,7 @@ export default abstract class Chart<T extends Schema> {
|
|||||||
const columns = {} as Record<keyof TempColumnsForUnique<T>, []>;
|
const columns = {} as Record<keyof TempColumnsForUnique<T>, []>;
|
||||||
for (const [k, v] of Object.entries(this.schema)) {
|
for (const [k, v] of Object.entries(this.schema)) {
|
||||||
if (v.uniqueIncrement) {
|
if (v.uniqueIncrement) {
|
||||||
const name = uniqueTempColumnPrefix + k.replaceAll('.', columnDot) as keyof TempColumnsForUnique<T>;
|
const name = UNIQUE_TEMP_COLUMN_PREFIX + k.replaceAll('.', COLUMN_DELIMITER) as keyof TempColumnsForUnique<T>;
|
||||||
columns[name] = [];
|
columns[name] = [];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user