ES Modulesに移行
This commit is contained in:
parent
0c3df4245d
commit
69212dd99a
105 changed files with 3154 additions and 3230 deletions
|
@ -1,8 +1,8 @@
|
|||
import {MisskeyError} from '../services/misskey';
|
||||
import {MisskeyError} from '../services/misskey.js';
|
||||
|
||||
export const errorToString = (e: Error) => {
|
||||
if (e instanceof MisskeyError) {
|
||||
return JSON.stringify(e.error);
|
||||
}
|
||||
return `${e.name}: ${e.message}\n${e.stack}`;
|
||||
if (e instanceof MisskeyError) {
|
||||
return JSON.stringify(e.error, null, ' ');
|
||||
}
|
||||
return `${e.name}: ${e.message}\n${e.stack}`;
|
||||
};
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
import rndstr from 'rndstr';
|
||||
import { UsedToken } from '../models/entities/used-token';
|
||||
import { UsedTokens } from '../models';
|
||||
import { UsedToken } from '../models/entities/used-token.js';
|
||||
import { UsedTokens } from '../models/index.js';
|
||||
|
||||
/**
|
||||
* トークンを生成します
|
||||
*/
|
||||
export const genToken = async (): Promise<string> => {
|
||||
let used: UsedToken | undefined = undefined;
|
||||
let token: string;
|
||||
do {
|
||||
token = rndstr(32);
|
||||
used = await UsedTokens.findOne({ token });
|
||||
} while (used !== undefined);
|
||||
return token;
|
||||
let used: UsedToken | undefined = undefined;
|
||||
let token: string;
|
||||
do {
|
||||
token = rndstr(32);
|
||||
used = await UsedTokens.findOne({ token });
|
||||
} while (used !== undefined);
|
||||
return token;
|
||||
};
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
import { User } from '../models/entities/user';
|
||||
import { toSignedString } from '../../common/functions/to-signed-string';
|
||||
import {Count} from '../models/count';
|
||||
import {api} from '../services/misskey';
|
||||
import {Score} from '../../common/types/score';
|
||||
import {MiUser} from './update-score';
|
||||
import { User } from '../models/entities/user.js';
|
||||
import { toSignedString } from '../../common/functions/to-signed-string.js';
|
||||
import {Count} from '../models/count.js';
|
||||
import {api} from '../services/misskey.js';
|
||||
import {Score} from '../../common/types/score.js';
|
||||
import {MiUser} from './update-score.js';
|
||||
|
||||
/**
|
||||
* ユーザーのスコアを取得します。
|
||||
|
@ -11,15 +11,15 @@ import {MiUser} from './update-score';
|
|||
* @returns ユーザーのスコア
|
||||
*/
|
||||
export const getScores = async (user: User): Promise<Score> => {
|
||||
// TODO 毎回取ってくるのも微妙なので、ある程度キャッシュしたいかも
|
||||
const miUser = await api<MiUser>(user.host, 'users/show', { username: user.username }, user.token);
|
||||
// TODO 毎回取ってくるのも微妙なので、ある程度キャッシュしたいかも
|
||||
const miUser = await api<MiUser>(user.host, 'users/show', { username: user.username }, user.token);
|
||||
|
||||
return {
|
||||
notesCount: miUser.notesCount,
|
||||
followingCount: miUser.followingCount,
|
||||
followersCount: miUser.followersCount,
|
||||
...getDelta(user, miUser),
|
||||
};
|
||||
return {
|
||||
notesCount: miUser.notesCount,
|
||||
followingCount: miUser.followingCount,
|
||||
followersCount: miUser.followersCount,
|
||||
...getDelta(user, miUser),
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -29,9 +29,9 @@ export const getScores = async (user: User): Promise<Score> => {
|
|||
* @returns ユーザーのスコア差分
|
||||
*/
|
||||
export const getDelta = (user: User, count: Count) => {
|
||||
return {
|
||||
notesDelta: toSignedString(count.notesCount - user.prevNotesCount),
|
||||
followingDelta: toSignedString(count.followingCount - user.prevFollowingCount),
|
||||
followersDelta: toSignedString(count.followersCount - user.prevFollowersCount),
|
||||
};
|
||||
return {
|
||||
notesDelta: toSignedString(count.notesCount - user.prevNotesCount),
|
||||
followingDelta: toSignedString(count.followingCount - user.prevFollowingCount),
|
||||
followersDelta: toSignedString(count.followersCount - user.prevFollowersCount),
|
||||
};
|
||||
};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import { Users } from '../models';
|
||||
import { User } from '../models/entities/user';
|
||||
import { Users } from '../models/index.js';
|
||||
import { User } from '../models/entities/user.js';
|
||||
|
||||
/**
|
||||
* ミス廃ランキングを取得する
|
||||
|
@ -7,15 +7,15 @@ import { User } from '../models/entities/user';
|
|||
* @returns ミス廃ランキング
|
||||
*/
|
||||
export const getRanking = async (limit?: number | null): Promise<User[]> => {
|
||||
const query = Users.createQueryBuilder('user')
|
||||
.where('"user"."useRanking" IS TRUE')
|
||||
.andWhere('"user"."bannedFromRanking" IS NOT TRUE')
|
||||
.andWhere('"user"."rating" <> \'NaN\'')
|
||||
.orderBy('"user".rating', 'DESC');
|
||||
const query = Users.createQueryBuilder('user')
|
||||
.where('"user"."useRanking" IS TRUE')
|
||||
.andWhere('"user"."bannedFromRanking" IS NOT TRUE')
|
||||
.andWhere('"user"."rating" <> \'NaN\'')
|
||||
.orderBy('"user".rating', 'DESC');
|
||||
|
||||
if (limit) {
|
||||
query.limit(limit);
|
||||
}
|
||||
if (limit) {
|
||||
query.limit(limit);
|
||||
}
|
||||
|
||||
return await query.getMany();
|
||||
return await query.getMany();
|
||||
};
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import dayjs from 'dayjs';
|
||||
|
||||
import { User } from '../models/entities/user';
|
||||
import { updateUser } from './users';
|
||||
import { MiUser } from './update-score';
|
||||
import { User } from '../models/entities/user.js';
|
||||
import { updateUser } from './users.js';
|
||||
import { MiUser } from './update-score.js';
|
||||
|
||||
/**
|
||||
* ユーザーのレーティングを更新します
|
||||
|
@ -10,9 +10,9 @@ import { MiUser } from './update-score';
|
|||
* @param miUser Misskeyのユーザー
|
||||
*/
|
||||
export const updateRating = async (user: User, miUser: MiUser): Promise<void> => {
|
||||
const elapsedDays = dayjs().diff(dayjs(miUser.createdAt), 'd') + 1;
|
||||
await updateUser(user.username, user.host, {
|
||||
prevRating: user.rating,
|
||||
rating: miUser.notesCount / elapsedDays,
|
||||
});
|
||||
const elapsedDays = dayjs().diff(dayjs(miUser.createdAt), 'd') + 1;
|
||||
await updateUser(user.username, user.host, {
|
||||
prevRating: user.rating,
|
||||
rating: miUser.notesCount / elapsedDays,
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
import { User } from '../models/entities/user';
|
||||
import { updateUser } from './users';
|
||||
import {Count} from '../models/count';
|
||||
import { User } from '../models/entities/user.js';
|
||||
import { updateUser } from './users.js';
|
||||
import {Count} from '../models/count.js';
|
||||
|
||||
/**
|
||||
* Misskeyのユーザーモデル
|
||||
*/
|
||||
export type MiUser = {
|
||||
notesCount: number,
|
||||
followingCount: number,
|
||||
followersCount: number,
|
||||
createdAt: string,
|
||||
notesCount: number,
|
||||
followingCount: number,
|
||||
followersCount: number,
|
||||
createdAt: string,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -18,9 +18,9 @@ export type MiUser = {
|
|||
* @param count 統計
|
||||
*/
|
||||
export const updateScore = async (user: User, count: Count): Promise<void> => {
|
||||
await updateUser(user.username, user.host, {
|
||||
prevNotesCount: count.notesCount ?? 0,
|
||||
prevFollowingCount: count.followingCount ?? 0,
|
||||
prevFollowersCount: count.followersCount ?? 0,
|
||||
});
|
||||
await updateUser(user.username, user.host, {
|
||||
prevNotesCount: count.notesCount ?? 0,
|
||||
prevFollowingCount: count.followingCount ?? 0,
|
||||
prevFollowersCount: count.followersCount ?? 0,
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
import { User } from '../models/entities/user';
|
||||
import { Users } from '../models';
|
||||
import { User } from '../models/entities/user.js';
|
||||
import { Users } from '../models/index.js';
|
||||
import { DeepPartial } from 'typeorm';
|
||||
import { genToken } from './gen-token';
|
||||
import { IUser } from '../../common/types/user';
|
||||
import { config } from '../../config';
|
||||
import { currentTokenVersion } from '../const';
|
||||
import { genToken } from './gen-token.js';
|
||||
import { IUser } from '../../common/types/user.js';
|
||||
import { config } from '../../config.js';
|
||||
import { currentTokenVersion } from '../const.js';
|
||||
|
||||
/**
|
||||
* IUser インターフェイスに変換します。
|
||||
*/
|
||||
const packUser = (user: User | undefined): IUser | undefined => {
|
||||
if (!user) return undefined;
|
||||
const { username: adminName, host: adminHost } = config.admin;
|
||||
if (!user) return undefined;
|
||||
const { username: adminName, host: adminHost } = config.admin;
|
||||
|
||||
return {
|
||||
...user,
|
||||
isAdmin: adminName === user.username && adminHost === user.host,
|
||||
};
|
||||
return {
|
||||
...user,
|
||||
isAdmin: adminName === user.username && adminHost === user.host,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -26,7 +26,7 @@ const packUser = (user: User | undefined): IUser | undefined => {
|
|||
* @returns ユーザー
|
||||
*/
|
||||
export const getUser = (username: string, host: string): Promise<IUser | undefined> => {
|
||||
return Users.findOne({ username, host }).then(packUser);
|
||||
return Users.findOne({ username, host }).then(packUser);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -35,13 +35,13 @@ export const getUser = (username: string, host: string): Promise<IUser | undefin
|
|||
* @returns ミス廃トークン
|
||||
*/
|
||||
export const updateUsersToolsToken = async (user: User | User['id']): Promise<string> => {
|
||||
const id = typeof user === 'number'
|
||||
? user
|
||||
: user.id;
|
||||
const id = typeof user === 'number'
|
||||
? user
|
||||
: user.id;
|
||||
|
||||
const misshaiToken = await genToken();
|
||||
Users.update(id, { misshaiToken });
|
||||
return misshaiToken;
|
||||
const misshaiToken = await genToken();
|
||||
Users.update(id, { misshaiToken });
|
||||
return misshaiToken;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -50,7 +50,7 @@ export const updateUsersToolsToken = async (user: User | User['id']): Promise<st
|
|||
* @returns ユーザー
|
||||
*/
|
||||
export const getUserByToolsToken = (token: string): Promise<IUser | undefined> => {
|
||||
return Users.findOne({ misshaiToken: token }).then(packUser);
|
||||
return Users.findOne({ misshaiToken: token }).then(packUser);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -60,13 +60,13 @@ export const getUserByToolsToken = (token: string): Promise<IUser | undefined> =
|
|||
* @param token トークン
|
||||
*/
|
||||
export const upsertUser = async (username: string, host: string, token: string): Promise<void> => {
|
||||
const u = await getUser(username, host);
|
||||
if (u) {
|
||||
await Users.update(u.id, { token, tokenVersion: currentTokenVersion });
|
||||
} else {
|
||||
const result = await Users.save({ username, host, token, tokenVersion: currentTokenVersion });
|
||||
await updateUsersToolsToken(result.id);
|
||||
}
|
||||
const u = await getUser(username, host);
|
||||
if (u) {
|
||||
await Users.update(u.id, { token, tokenVersion: currentTokenVersion });
|
||||
} else {
|
||||
const result = await Users.save({ username, host, token, tokenVersion: currentTokenVersion });
|
||||
await updateUsersToolsToken(result.id);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -76,7 +76,7 @@ export const upsertUser = async (username: string, host: string, token: string):
|
|||
* @param record 既存のユーザー情報
|
||||
*/
|
||||
export const updateUser = async (username: string, host: string, record: DeepPartial<User>): Promise<void> => {
|
||||
await Users.update({ username, host }, record);
|
||||
await Users.update({ username, host }, record);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -85,7 +85,7 @@ export const updateUser = async (username: string, host: string, record: DeepPar
|
|||
* @param host ホスト名
|
||||
*/
|
||||
export const deleteUser = async (username: string, host: string): Promise<void> => {
|
||||
await Users.delete({ username, host });
|
||||
await Users.delete({ username, host });
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -93,5 +93,5 @@ export const deleteUser = async (username: string, host: string): Promise<void>
|
|||
* @returns ユーザー数
|
||||
*/
|
||||
export const getUserCount = (): Promise<number> => {
|
||||
return Users.count();
|
||||
return Users.count();
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue