1.
우선 현재 테이블 구조를 유지하고 쿼리로 묶는다.
SELECT id,
user_id AS "userId",
type,
icon_type AS "iconType",
icon_id AS "iconId",
route,
title,
description,
amount_money AS "amountMoney",
(CASE
WHEN sum IS NULL THEN amount_bolt
ELSE sum
END) AS "amountBolt",
created_at AS "createdAt",
base_type AS "baseType",
base_id AS "baseId",
data
FROM (
SELECT DISTINCT ON (
type,
base_type,
base_id,
grp) *,
sum(amount_bolt)
FILTER (WHERE type = 'bolt_used' AND base_type = 'boost')
OVER (PARTITION BY type, base_type, base_id, grp) AS sum
FROM (
SELECT row_number()
OVER (ORDER BY created_at) -
row_number()
OVER (PARTITION BY type, base_type, base_id ORDER BY created_at) AS grp,
*
FROM activity
WHERE user_id = $1
) AS t1
) AS t2
${formattedLastDate && lastId ? `WHERE created_at < '${formattedLastDate}' AND id < ${lastId}` : ''}
ORDER BY created_at DESC
${take ? `LIMIT ${take}` : ''}
JSON
복사
2.
볼트 히스토리도 묶어주는 작업이 필요하기 때문에 추후 테이블 구조를 groupBy가 용이한 형태로 수정한다. (컬럼 추가 등)
2022/05/26 api-server 에 알파 배포한 것이 문제가 생길 경우 롤백 가이드
•
기존에 있던 함수를 수정한 것이 아니라 새로 함수를 추가해서 controller 단에서만 갈아끼워줬기 때문에 원래 쓰던 함수로 다시 고쳐주면 그만이다.
◦
현재 알파에 배포되어있는 버전
// ActivityController.ts
public async activities(ctx: Context & { user: ActiveUser }) {
...
const activityService = Container.get(ActivityService);
const result = await activityService.getActivityList(input);
success(ctx, { activities: result });
}
JSON
복사
◦
롤백 시 아래와 같이 변경
// ActivityController.ts
public async activities(ctx: Context & { user: ActiveUser }) {
...
const activityService = Container.get(ActivityService);
const result = await activityService.getActivities(input);
success(ctx, { activities: result });
}
JSON
복사