feat: 데이터 가져오기(복구) — 엑셀 백업으로 전체 교체 (트랜잭션)
CI / build (push) Failing after 12m39s

- POST /api/account/restore: 기존 데이터 전부 삭제 후 이름 기준 재생성
  (계좌→태그→분류(대/소)→내역→고정→예산→자주내역), 한 트랜잭션(실패 시 롤백)
- 빈 데이터 안전장치, 투자 종목/매매는 복구 대상 외(삭제됨)
- BackupMapper(deleteByMember), RestoreRequest DTO, BackupService/Controller

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ByungCheol
2026-06-28 08:38:21 +09:00
parent bf6fb97ed8
commit 3b46d2ba09
5 changed files with 350 additions and 0 deletions
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.sb.web.account.mapper.BackupMapper">
<delete id="deleteEntryTags">
DELETE FROM account_entry_tag
WHERE entry_id IN (SELECT id FROM account_entry WHERE member_id = #{memberId})
</delete>
<delete id="deleteEntries">
DELETE FROM account_entry WHERE member_id = #{memberId}
</delete>
<delete id="deleteRecurrings">
DELETE FROM recurring WHERE member_id = #{memberId}
</delete>
<delete id="deleteBudgets">
DELETE FROM budget WHERE member_id = #{memberId}
</delete>
<delete id="deleteBudgetIncome">
DELETE FROM budget_income WHERE member_id = #{memberId}
</delete>
<delete id="deleteQuickEntries">
DELETE FROM quick_entry WHERE member_id = #{memberId}
</delete>
<delete id="deleteInvestTrades">
DELETE FROM invest_trade WHERE member_id = #{memberId}
</delete>
<delete id="deleteInvestHoldings">
DELETE FROM invest_holding WHERE member_id = #{memberId}
</delete>
<delete id="deleteCategories">
DELETE FROM account_category WHERE member_id = #{memberId}
</delete>
<delete id="deleteTags">
DELETE FROM account_tag WHERE member_id = #{memberId}
</delete>
<delete id="deleteWallets">
DELETE FROM wallet WHERE member_id = #{memberId}
</delete>
</mapper>