Improve API performance

This commit is contained in:
syuilo 2021-03-18 10:19:30 +09:00
parent 43dd6b687d
commit 1dea826fb5

View file

@ -3,12 +3,18 @@ import { User } from '../../models/entities/user';
import { Users, AccessTokens, Apps } from '../../models'; import { Users, AccessTokens, Apps } from '../../models';
import { AccessToken } from '../../models/entities/access-token'; import { AccessToken } from '../../models/entities/access-token';
const cache = {} as Record<string, User>;
export default async (token: string): Promise<[User | null | undefined, AccessToken | null | undefined]> => { export default async (token: string): Promise<[User | null | undefined, AccessToken | null | undefined]> => {
if (token == null) { if (token == null) {
return [null, null]; return [null, null];
} }
if (isNativeToken(token)) { if (isNativeToken(token)) {
if (cache[token]) { // TODO: キャッシュされてから一定時間経過していたら破棄する
return [cache[token], null];
}
// Fetch user // Fetch user
const user = await Users const user = await Users
.findOne({ token }); .findOne({ token });
@ -17,8 +23,11 @@ export default async (token: string): Promise<[User | null | undefined, AccessTo
throw new Error('user not found'); throw new Error('user not found');
} }
cache[token] = user;
return [user, null]; return [user, null];
} else { } else {
// TODO: cache
const accessToken = await AccessTokens.findOne({ const accessToken = await AccessTokens.findOne({
where: [{ where: [{
hash: token.toLowerCase() // app hash: token.toLowerCase() // app