20260704223529_ReplaceDanalWithTossPayments.cs 32 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727
  1. using System;
  2. using Microsoft.EntityFrameworkCore.Migrations;
  3. #nullable disable
  4. namespace Infrastructure.Migrations.AppDb
  5. {
  6. /// <inheritdoc />
  7. public partial class ReplaceDanalWithTossPayments : Migration
  8. {
  9. /// <inheritdoc />
  10. protected override void Up(MigrationBuilder migrationBuilder)
  11. {
  12. migrationBuilder.DropTable(
  13. name: "DanalCancel");
  14. migrationBuilder.DropTable(
  15. name: "DanalConfirm");
  16. migrationBuilder.DropTable(
  17. name: "DanalLog");
  18. migrationBuilder.DropColumn(
  19. name: "External_DanalLiveClientKeyEnc",
  20. table: "Config");
  21. migrationBuilder.DropColumn(
  22. name: "External_DanalLiveCpid",
  23. table: "Config");
  24. migrationBuilder.DropColumn(
  25. name: "Payment_DanalCardFeeAmount",
  26. table: "Config");
  27. migrationBuilder.DropColumn(
  28. name: "Payment_DanalCardFeeRate",
  29. table: "Config");
  30. migrationBuilder.DropColumn(
  31. name: "Payment_DanalKakaoPayFeeAmount",
  32. table: "Config");
  33. migrationBuilder.DropColumn(
  34. name: "Payment_DanalKakaoPayFeeRate",
  35. table: "Config");
  36. migrationBuilder.DropColumn(
  37. name: "Payment_DanalMobileFeeAmount",
  38. table: "Config");
  39. migrationBuilder.DropColumn(
  40. name: "Payment_DanalMobileFeeRate",
  41. table: "Config");
  42. migrationBuilder.DropColumn(
  43. name: "Payment_DanalNaverPayFeeAmount",
  44. table: "Config");
  45. migrationBuilder.DropColumn(
  46. name: "Payment_DanalNaverPayFeeRate",
  47. table: "Config");
  48. migrationBuilder.DropColumn(
  49. name: "Payment_DanalTransferFeeAmount",
  50. table: "Config");
  51. migrationBuilder.DropColumn(
  52. name: "Payment_DanalTransferFeeRate",
  53. table: "Config");
  54. migrationBuilder.DropColumn(
  55. name: "Payment_DanalVbankFeeAmount",
  56. table: "Config");
  57. migrationBuilder.DropColumn(
  58. name: "Payment_DanalVbankFeeRate",
  59. table: "Config");
  60. migrationBuilder.DropColumn(
  61. name: "Payment_IsCardEnabled",
  62. table: "Config");
  63. migrationBuilder.DropColumn(
  64. name: "Payment_IsKakaoPayEnabled",
  65. table: "Config");
  66. migrationBuilder.DropColumn(
  67. name: "Payment_IsMobileEnabled",
  68. table: "Config");
  69. migrationBuilder.DropColumn(
  70. name: "Payment_IsNaverPayEnabled",
  71. table: "Config");
  72. migrationBuilder.DropColumn(
  73. name: "Payment_IsTransferEnabled",
  74. table: "Config");
  75. migrationBuilder.DropColumn(
  76. name: "Payment_IsVirtualAccountEnabled",
  77. table: "Config");
  78. migrationBuilder.RenameColumn(
  79. name: "External_DanalTestSecretKeyEnc",
  80. table: "Config",
  81. newName: "External_TossTestSecretKeyEnc");
  82. migrationBuilder.RenameColumn(
  83. name: "External_DanalTestCpid",
  84. table: "Config",
  85. newName: "External_TossTestClientKeyEnc");
  86. migrationBuilder.RenameColumn(
  87. name: "External_DanalTestClientKeyEnc",
  88. table: "Config",
  89. newName: "External_TossPayMode");
  90. migrationBuilder.RenameColumn(
  91. name: "External_DanalPayMode",
  92. table: "Config",
  93. newName: "External_TossLiveSecretKeyEnc");
  94. migrationBuilder.RenameColumn(
  95. name: "External_DanalLiveSecretKeyEnc",
  96. table: "Config",
  97. newName: "External_TossLiveClientKeyEnc");
  98. migrationBuilder.AddColumn<Guid>(
  99. name: "PaymentCustomerKey",
  100. table: "Member",
  101. type: "uniqueidentifier",
  102. nullable: true);
  103. migrationBuilder.CreateTable(
  104. name: "TossCancel",
  105. columns: table => new
  106. {
  107. ID = table.Column<int>(type: "int", nullable: false)
  108. .Annotation("SqlServer:Identity", "1, 1"),
  109. MemberID = table.Column<int>(type: "int", nullable: false),
  110. PaymentOrderID = table.Column<int>(type: "int", nullable: false),
  111. PaymentKey = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  112. OrderID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
  113. CancelAmount = table.Column<int>(type: "int", nullable: false),
  114. CancelReason = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  115. CancelRequester = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  116. ResponseCode = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
  117. ResponseMessage = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  118. TransactionKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
  119. Status = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: true),
  120. CanceledAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  121. RawResponse = table.Column<string>(type: "nvarchar(max)", nullable: true),
  122. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  123. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true)
  124. },
  125. constraints: table =>
  126. {
  127. table.PrimaryKey("PK_TossCancel", x => x.ID);
  128. table.ForeignKey(
  129. name: "FK_TossCancel_Member_MemberID",
  130. column: x => x.MemberID,
  131. principalTable: "Member",
  132. principalColumn: "ID");
  133. table.ForeignKey(
  134. name: "FK_TossCancel_PaymentOrder_PaymentOrderID",
  135. column: x => x.PaymentOrderID,
  136. principalTable: "PaymentOrder",
  137. principalColumn: "ID");
  138. },
  139. comment: "토스페이먼츠 결제 취소 (요청+응답)");
  140. migrationBuilder.CreateTable(
  141. name: "TossConfirm",
  142. columns: table => new
  143. {
  144. ID = table.Column<int>(type: "int", nullable: false)
  145. .Annotation("SqlServer:Identity", "1, 1"),
  146. MemberID = table.Column<int>(type: "int", nullable: false),
  147. PaymentOrderID = table.Column<int>(type: "int", nullable: false),
  148. PaymentKey = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  149. OrderID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
  150. Amount = table.Column<int>(type: "int", nullable: false),
  151. ResponseCode = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
  152. ResponseMessage = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  153. Status = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: true),
  154. Method = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: true),
  155. TotalAmount = table.Column<int>(type: "int", nullable: true),
  156. ApprovedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  157. ReceiptUrl = table.Column<string>(type: "nvarchar(300)", maxLength: 300, nullable: true),
  158. RawResponse = table.Column<string>(type: "nvarchar(max)", nullable: true),
  159. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  160. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true)
  161. },
  162. constraints: table =>
  163. {
  164. table.PrimaryKey("PK_TossConfirm", x => x.ID);
  165. table.ForeignKey(
  166. name: "FK_TossConfirm_Member_MemberID",
  167. column: x => x.MemberID,
  168. principalTable: "Member",
  169. principalColumn: "ID");
  170. table.ForeignKey(
  171. name: "FK_TossConfirm_PaymentOrder_PaymentOrderID",
  172. column: x => x.PaymentOrderID,
  173. principalTable: "PaymentOrder",
  174. principalColumn: "ID");
  175. },
  176. comment: "토스페이먼츠 결제 승인 (요청+응답)");
  177. migrationBuilder.CreateTable(
  178. name: "TossLog",
  179. columns: table => new
  180. {
  181. ID = table.Column<int>(type: "int", nullable: false)
  182. .Annotation("SqlServer:Identity", "1, 1"),
  183. MemberID = table.Column<int>(type: "int", nullable: true),
  184. LogType = table.Column<int>(type: "int", nullable: false),
  185. Code = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
  186. Message = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
  187. PaymentKey = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
  188. OrderID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
  189. ExtraData = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
  190. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  191. },
  192. constraints: table =>
  193. {
  194. table.PrimaryKey("PK_TossLog", x => x.ID);
  195. table.ForeignKey(
  196. name: "FK_TossLog_Member_MemberID",
  197. column: x => x.MemberID,
  198. principalTable: "Member",
  199. principalColumn: "ID");
  200. },
  201. comment: "토스페이먼츠 결제 에러/실패/웹훅/대사 로그");
  202. migrationBuilder.CreateIndex(
  203. name: "IX_TossCancel_MemberID",
  204. table: "TossCancel",
  205. column: "MemberID");
  206. migrationBuilder.CreateIndex(
  207. name: "IX_TossCancel_OrderID",
  208. table: "TossCancel",
  209. column: "OrderID");
  210. migrationBuilder.CreateIndex(
  211. name: "IX_TossCancel_PaymentKey",
  212. table: "TossCancel",
  213. column: "PaymentKey");
  214. migrationBuilder.CreateIndex(
  215. name: "IX_TossCancel_PaymentOrderID",
  216. table: "TossCancel",
  217. column: "PaymentOrderID");
  218. migrationBuilder.CreateIndex(
  219. name: "IX_TossCancel_TransactionKey",
  220. table: "TossCancel",
  221. column: "TransactionKey");
  222. migrationBuilder.CreateIndex(
  223. name: "IX_TossConfirm_MemberID",
  224. table: "TossConfirm",
  225. column: "MemberID");
  226. migrationBuilder.CreateIndex(
  227. name: "IX_TossConfirm_OrderID",
  228. table: "TossConfirm",
  229. column: "OrderID",
  230. unique: true);
  231. migrationBuilder.CreateIndex(
  232. name: "IX_TossConfirm_PaymentKey",
  233. table: "TossConfirm",
  234. column: "PaymentKey",
  235. unique: true);
  236. migrationBuilder.CreateIndex(
  237. name: "IX_TossConfirm_PaymentOrderID",
  238. table: "TossConfirm",
  239. column: "PaymentOrderID");
  240. migrationBuilder.CreateIndex(
  241. name: "IX_TossConfirm_Status",
  242. table: "TossConfirm",
  243. column: "Status");
  244. migrationBuilder.CreateIndex(
  245. name: "IX_TossLog_Code",
  246. table: "TossLog",
  247. column: "Code");
  248. migrationBuilder.CreateIndex(
  249. name: "IX_TossLog_LogType",
  250. table: "TossLog",
  251. column: "LogType");
  252. migrationBuilder.CreateIndex(
  253. name: "IX_TossLog_MemberID",
  254. table: "TossLog",
  255. column: "MemberID");
  256. migrationBuilder.CreateIndex(
  257. name: "IX_TossLog_OrderID",
  258. table: "TossLog",
  259. column: "OrderID");
  260. migrationBuilder.CreateIndex(
  261. name: "IX_TossLog_PaymentKey",
  262. table: "TossLog",
  263. column: "PaymentKey");
  264. }
  265. /// <inheritdoc />
  266. protected override void Down(MigrationBuilder migrationBuilder)
  267. {
  268. migrationBuilder.DropTable(
  269. name: "TossCancel");
  270. migrationBuilder.DropTable(
  271. name: "TossConfirm");
  272. migrationBuilder.DropTable(
  273. name: "TossLog");
  274. migrationBuilder.DropColumn(
  275. name: "PaymentCustomerKey",
  276. table: "Member");
  277. migrationBuilder.RenameColumn(
  278. name: "External_TossTestSecretKeyEnc",
  279. table: "Config",
  280. newName: "External_DanalTestSecretKeyEnc");
  281. migrationBuilder.RenameColumn(
  282. name: "External_TossTestClientKeyEnc",
  283. table: "Config",
  284. newName: "External_DanalTestCpid");
  285. migrationBuilder.RenameColumn(
  286. name: "External_TossPayMode",
  287. table: "Config",
  288. newName: "External_DanalTestClientKeyEnc");
  289. migrationBuilder.RenameColumn(
  290. name: "External_TossLiveSecretKeyEnc",
  291. table: "Config",
  292. newName: "External_DanalPayMode");
  293. migrationBuilder.RenameColumn(
  294. name: "External_TossLiveClientKeyEnc",
  295. table: "Config",
  296. newName: "External_DanalLiveSecretKeyEnc");
  297. migrationBuilder.AddColumn<string>(
  298. name: "External_DanalLiveClientKeyEnc",
  299. table: "Config",
  300. type: "nvarchar(max)",
  301. nullable: true);
  302. migrationBuilder.AddColumn<string>(
  303. name: "External_DanalLiveCpid",
  304. table: "Config",
  305. type: "nvarchar(max)",
  306. nullable: true);
  307. migrationBuilder.AddColumn<decimal>(
  308. name: "Payment_DanalCardFeeAmount",
  309. table: "Config",
  310. type: "decimal(18,0)",
  311. precision: 18,
  312. nullable: true,
  313. comment: "신용카드 수수료(원)");
  314. migrationBuilder.AddColumn<decimal>(
  315. name: "Payment_DanalCardFeeRate",
  316. table: "Config",
  317. type: "decimal(5,2)",
  318. precision: 5,
  319. scale: 2,
  320. nullable: true,
  321. comment: "신용카드 수수료(%)");
  322. migrationBuilder.AddColumn<decimal>(
  323. name: "Payment_DanalKakaoPayFeeAmount",
  324. table: "Config",
  325. type: "decimal(18,0)",
  326. precision: 18,
  327. nullable: true,
  328. comment: "카카오페이 수수료(원)");
  329. migrationBuilder.AddColumn<decimal>(
  330. name: "Payment_DanalKakaoPayFeeRate",
  331. table: "Config",
  332. type: "decimal(5,2)",
  333. precision: 5,
  334. scale: 2,
  335. nullable: true,
  336. comment: "카카오페이 수수료(%)");
  337. migrationBuilder.AddColumn<decimal>(
  338. name: "Payment_DanalMobileFeeAmount",
  339. table: "Config",
  340. type: "decimal(18,0)",
  341. precision: 18,
  342. nullable: true,
  343. comment: "휴대폰 수수료(원)");
  344. migrationBuilder.AddColumn<decimal>(
  345. name: "Payment_DanalMobileFeeRate",
  346. table: "Config",
  347. type: "decimal(5,2)",
  348. precision: 5,
  349. scale: 2,
  350. nullable: true,
  351. comment: "휴대폰 수수료(%)");
  352. migrationBuilder.AddColumn<decimal>(
  353. name: "Payment_DanalNaverPayFeeAmount",
  354. table: "Config",
  355. type: "decimal(18,0)",
  356. precision: 18,
  357. nullable: true,
  358. comment: "네이버페이 수수료(원)");
  359. migrationBuilder.AddColumn<decimal>(
  360. name: "Payment_DanalNaverPayFeeRate",
  361. table: "Config",
  362. type: "decimal(5,2)",
  363. precision: 5,
  364. scale: 2,
  365. nullable: true,
  366. comment: "네이버페이 수수료(%)");
  367. migrationBuilder.AddColumn<decimal>(
  368. name: "Payment_DanalTransferFeeAmount",
  369. table: "Config",
  370. type: "decimal(18,0)",
  371. precision: 18,
  372. nullable: true,
  373. comment: "계좌이체 수수료(원)");
  374. migrationBuilder.AddColumn<decimal>(
  375. name: "Payment_DanalTransferFeeRate",
  376. table: "Config",
  377. type: "decimal(5,2)",
  378. precision: 5,
  379. scale: 2,
  380. nullable: true,
  381. comment: "계좌이체 수수료(%)");
  382. migrationBuilder.AddColumn<decimal>(
  383. name: "Payment_DanalVbankFeeAmount",
  384. table: "Config",
  385. type: "decimal(18,0)",
  386. precision: 18,
  387. nullable: true,
  388. comment: "가상계좌 수수료(원)");
  389. migrationBuilder.AddColumn<decimal>(
  390. name: "Payment_DanalVbankFeeRate",
  391. table: "Config",
  392. type: "decimal(5,2)",
  393. precision: 5,
  394. scale: 2,
  395. nullable: true,
  396. comment: "가상계좌 수수료(%)");
  397. migrationBuilder.AddColumn<bool>(
  398. name: "Payment_IsCardEnabled",
  399. table: "Config",
  400. type: "bit",
  401. nullable: false,
  402. defaultValue: false,
  403. comment: "신용카드 사용 여부");
  404. migrationBuilder.AddColumn<bool>(
  405. name: "Payment_IsKakaoPayEnabled",
  406. table: "Config",
  407. type: "bit",
  408. nullable: false,
  409. defaultValue: false,
  410. comment: "카카오페이 사용 여부");
  411. migrationBuilder.AddColumn<bool>(
  412. name: "Payment_IsMobileEnabled",
  413. table: "Config",
  414. type: "bit",
  415. nullable: false,
  416. defaultValue: false,
  417. comment: "휴대폰 사용 여부");
  418. migrationBuilder.AddColumn<bool>(
  419. name: "Payment_IsNaverPayEnabled",
  420. table: "Config",
  421. type: "bit",
  422. nullable: false,
  423. defaultValue: false,
  424. comment: "네이버페이 사용 여부");
  425. migrationBuilder.AddColumn<bool>(
  426. name: "Payment_IsTransferEnabled",
  427. table: "Config",
  428. type: "bit",
  429. nullable: false,
  430. defaultValue: false,
  431. comment: "계좌이체 사용 여부");
  432. migrationBuilder.AddColumn<bool>(
  433. name: "Payment_IsVirtualAccountEnabled",
  434. table: "Config",
  435. type: "bit",
  436. nullable: false,
  437. defaultValue: false,
  438. comment: "가상계좌 사용 여부");
  439. migrationBuilder.CreateTable(
  440. name: "DanalCancel",
  441. columns: table => new
  442. {
  443. ID = table.Column<int>(type: "int", nullable: false)
  444. .Annotation("SqlServer:Identity", "1, 1"),
  445. MemberID = table.Column<int>(type: "int", nullable: false),
  446. PaymentOrderID = table.Column<int>(type: "int", nullable: false),
  447. Amount = table.Column<int>(type: "int", nullable: false),
  448. ApprovalDateTime = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
  449. Balance = table.Column<int>(type: "int", nullable: true),
  450. CancelReason = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true),
  451. CancelRequester = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  452. CancelType = table.Column<int>(type: "int", nullable: false),
  453. CancelledAmount = table.Column<int>(type: "int", nullable: true),
  454. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  455. MerchantID = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
  456. Method = table.Column<int>(type: "int", nullable: false),
  457. OrderID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
  458. OriginalTransactionID = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  459. RemainedAmount = table.Column<int>(type: "int", nullable: true),
  460. ResponseCode = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  461. ResponseMessage = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  462. TransDate = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
  463. TransTime = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
  464. TransactionID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
  465. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true)
  466. },
  467. constraints: table =>
  468. {
  469. table.PrimaryKey("PK_DanalCancel", x => x.ID);
  470. table.ForeignKey(
  471. name: "FK_DanalCancel_Member_MemberID",
  472. column: x => x.MemberID,
  473. principalTable: "Member",
  474. principalColumn: "ID");
  475. table.ForeignKey(
  476. name: "FK_DanalCancel_PaymentOrder_PaymentOrderID",
  477. column: x => x.PaymentOrderID,
  478. principalTable: "PaymentOrder",
  479. principalColumn: "ID");
  480. },
  481. comment: "다날 결제 취소 (요청+응답)");
  482. migrationBuilder.CreateTable(
  483. name: "DanalConfirm",
  484. columns: table => new
  485. {
  486. ID = table.Column<int>(type: "int", nullable: false)
  487. .Annotation("SqlServer:Identity", "1, 1"),
  488. MemberID = table.Column<int>(type: "int", nullable: false),
  489. PaymentOrderID = table.Column<int>(type: "int", nullable: false),
  490. AccountNumber = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
  491. Amount = table.Column<int>(type: "int", nullable: false),
  492. ApprovalDateTime = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
  493. ApproveNo = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
  494. AuthKey = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
  495. BankCode = table.Column<string>(type: "nvarchar(3)", maxLength: 3, nullable: true),
  496. BankName = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  497. CardCode = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  498. CardName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
  499. CardNo = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
  500. CertificateToken = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: true),
  501. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  502. DiscountAmount = table.Column<int>(type: "int", nullable: true),
  503. ExpireDate = table.Column<string>(type: "nvarchar(10)", maxLength: 10, nullable: true),
  504. ExpireTime = table.Column<string>(type: "nvarchar(15)", maxLength: 15, nullable: true),
  505. InstallmentMonths = table.Column<byte>(type: "tinyint", nullable: true),
  506. MerchantID = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
  507. Method = table.Column<int>(type: "int", nullable: false),
  508. OrderID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
  509. OrderName = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  510. ResponseCode = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  511. ResponseMessage = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  512. TotalAmount = table.Column<int>(type: "int", nullable: true),
  513. TransDate = table.Column<string>(type: "nvarchar(8)", maxLength: 8, nullable: true),
  514. TransTime = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  515. TransactionID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false),
  516. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  517. UseCashReceipt = table.Column<string>(type: "nvarchar(1)", maxLength: 1, nullable: true),
  518. UserEmail = table.Column<string>(type: "nvarchar(60)", maxLength: 60, nullable: true),
  519. UserId = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  520. UserName = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: true),
  521. VirtualAccountNumber = table.Column<string>(type: "nvarchar(30)", maxLength: 30, nullable: true)
  522. },
  523. constraints: table =>
  524. {
  525. table.PrimaryKey("PK_DanalConfirm", x => x.ID);
  526. table.ForeignKey(
  527. name: "FK_DanalConfirm_Member_MemberID",
  528. column: x => x.MemberID,
  529. principalTable: "Member",
  530. principalColumn: "ID");
  531. table.ForeignKey(
  532. name: "FK_DanalConfirm_PaymentOrder_PaymentOrderID",
  533. column: x => x.PaymentOrderID,
  534. principalTable: "PaymentOrder",
  535. principalColumn: "ID");
  536. },
  537. comment: "다날 결제 승인 (요청+응답)");
  538. migrationBuilder.CreateTable(
  539. name: "DanalLog",
  540. columns: table => new
  541. {
  542. ID = table.Column<int>(type: "int", nullable: false)
  543. .Annotation("SqlServer:Identity", "1, 1"),
  544. MemberID = table.Column<int>(type: "int", nullable: false),
  545. Code = table.Column<string>(type: "nvarchar(20)", maxLength: 20, nullable: false),
  546. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  547. ExtraData = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true),
  548. LogType = table.Column<int>(type: "int", nullable: false),
  549. Message = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
  550. OrderID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
  551. TransactionID = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true)
  552. },
  553. constraints: table =>
  554. {
  555. table.PrimaryKey("PK_DanalLog", x => x.ID);
  556. table.ForeignKey(
  557. name: "FK_DanalLog_Member_MemberID",
  558. column: x => x.MemberID,
  559. principalTable: "Member",
  560. principalColumn: "ID");
  561. },
  562. comment: "다날 결제 에러/실패/웹훅 로그");
  563. migrationBuilder.CreateIndex(
  564. name: "IX_DanalCancel_CancelType",
  565. table: "DanalCancel",
  566. column: "CancelType");
  567. migrationBuilder.CreateIndex(
  568. name: "IX_DanalCancel_MemberID",
  569. table: "DanalCancel",
  570. column: "MemberID");
  571. migrationBuilder.CreateIndex(
  572. name: "IX_DanalCancel_Method",
  573. table: "DanalCancel",
  574. column: "Method");
  575. migrationBuilder.CreateIndex(
  576. name: "IX_DanalCancel_OrderID",
  577. table: "DanalCancel",
  578. column: "OrderID");
  579. migrationBuilder.CreateIndex(
  580. name: "IX_DanalCancel_PaymentOrderID",
  581. table: "DanalCancel",
  582. column: "PaymentOrderID");
  583. migrationBuilder.CreateIndex(
  584. name: "IX_DanalCancel_TransactionID",
  585. table: "DanalCancel",
  586. column: "TransactionID");
  587. migrationBuilder.CreateIndex(
  588. name: "IX_DanalConfirm_MemberID",
  589. table: "DanalConfirm",
  590. column: "MemberID");
  591. migrationBuilder.CreateIndex(
  592. name: "IX_DanalConfirm_Method",
  593. table: "DanalConfirm",
  594. column: "Method");
  595. migrationBuilder.CreateIndex(
  596. name: "IX_DanalConfirm_OrderID",
  597. table: "DanalConfirm",
  598. column: "OrderID",
  599. unique: true);
  600. migrationBuilder.CreateIndex(
  601. name: "IX_DanalConfirm_PaymentOrderID",
  602. table: "DanalConfirm",
  603. column: "PaymentOrderID");
  604. migrationBuilder.CreateIndex(
  605. name: "IX_DanalConfirm_TransactionID",
  606. table: "DanalConfirm",
  607. column: "TransactionID",
  608. unique: true);
  609. migrationBuilder.CreateIndex(
  610. name: "IX_DanalLog_Code",
  611. table: "DanalLog",
  612. column: "Code");
  613. migrationBuilder.CreateIndex(
  614. name: "IX_DanalLog_LogType",
  615. table: "DanalLog",
  616. column: "LogType");
  617. migrationBuilder.CreateIndex(
  618. name: "IX_DanalLog_MemberID",
  619. table: "DanalLog",
  620. column: "MemberID");
  621. migrationBuilder.CreateIndex(
  622. name: "IX_DanalLog_OrderID",
  623. table: "DanalLog",
  624. column: "OrderID");
  625. migrationBuilder.CreateIndex(
  626. name: "IX_DanalLog_TransactionID",
  627. table: "DanalLog",
  628. column: "TransactionID");
  629. }
  630. }
  631. }