20260323135411_AddDonation.cs 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147
  1. using System;
  2. using Microsoft.EntityFrameworkCore.Migrations;
  3. #nullable disable
  4. namespace Infrastructure.Persistence.Migrations
  5. {
  6. /// <inheritdoc />
  7. public partial class AddDonation : Migration
  8. {
  9. /// <inheritdoc />
  10. protected override void Up(MigrationBuilder migrationBuilder)
  11. {
  12. migrationBuilder.AlterTable(
  13. name: "Channel",
  14. comment: "� ����",
  15. oldComment: "채널 정보");
  16. migrationBuilder.AlterColumn<string>(
  17. name: "YouTubeUrl",
  18. table: "Channel",
  19. type: "nvarchar(255)",
  20. maxLength: 255,
  21. nullable: false,
  22. comment: "YouTube � URL",
  23. oldClrType: typeof(string),
  24. oldType: "nvarchar(255)",
  25. oldMaxLength: 255,
  26. oldComment: "YouTube 채널 URL");
  27. migrationBuilder.AlterColumn<DateTime>(
  28. name: "UpdatedAt",
  29. table: "Channel",
  30. type: "datetime2",
  31. nullable: true,
  32. comment: "���� �Ͻ�",
  33. oldClrType: typeof(DateTime),
  34. oldType: "datetime2",
  35. oldNullable: true,
  36. oldComment: "수정 일시");
  37. migrationBuilder.AlterColumn<string>(
  38. name: "SID",
  39. table: "Channel",
  40. type: "nvarchar(24)",
  41. maxLength: 24,
  42. nullable: false,
  43. comment: "� ID",
  44. oldClrType: typeof(string),
  45. oldType: "nvarchar(24)",
  46. oldMaxLength: 24,
  47. oldComment: "채널 ID");
  48. migrationBuilder.AlterColumn<decimal>(
  49. name: "PlatformFeeRate",
  50. table: "Channel",
  51. type: "decimal(5,2)",
  52. precision: 5,
  53. scale: 2,
  54. nullable: false,
  55. comment: "������(%)",
  56. oldClrType: typeof(decimal),
  57. oldType: "decimal(5,2)",
  58. oldPrecision: 5,
  59. oldScale: 2,
  60. oldComment: "수수료(%)");
  61. migrationBuilder.AlterColumn<string>(
  62. name: "Name",
  63. table: "Channel",
  64. type: "nvarchar(200)",
  65. maxLength: 200,
  66. nullable: false,
  67. comment: "ä�� �̸�",
  68. oldClrType: typeof(string),
  69. oldType: "nvarchar(200)",
  70. oldMaxLength: 200,
  71. oldComment: "채널 이름");
  72. migrationBuilder.AlterColumn<int>(
  73. name: "MemberID",
  74. table: "Channel",
  75. type: "int",
  76. nullable: false,
  77. comment: "ȸ�� ID",
  78. oldClrType: typeof(int),
  79. oldType: "int",
  80. oldComment: "회원 ID");
  81. migrationBuilder.AlterColumn<bool>(
  82. name: "IsVerified",
  83. table: "Channel",
  84. type: "bit",
  85. nullable: false,
  86. comment: "���� ����",
  87. oldClrType: typeof(bool),
  88. oldType: "bit",
  89. oldComment: "인증 여부");
  90. migrationBuilder.AlterColumn<bool>(
  91. name: "IsActive",
  92. table: "Channel",
  93. type: "bit",
  94. nullable: false,
  95. comment: "Ȱ�� ����",
  96. oldClrType: typeof(bool),
  97. oldType: "bit",
  98. oldComment: "활성 여부");
  99. migrationBuilder.AlterColumn<string>(
  100. name: "Handle",
  101. table: "Channel",
  102. type: "nvarchar(30)",
  103. maxLength: 30,
  104. nullable: true,
  105. comment: "�ڵ�",
  106. oldClrType: typeof(string),
  107. oldType: "nvarchar(30)",
  108. oldMaxLength: 30,
  109. oldNullable: true,
  110. oldComment: "핸들");
  111. migrationBuilder.AlterColumn<DateTime>(
  112. name: "CreatedAt",
  113. table: "Channel",
  114. type: "datetime2",
  115. nullable: false,
  116. comment: "��� �Ͻ�",
  117. oldClrType: typeof(DateTime),
  118. oldType: "datetime2",
  119. oldComment: "등록 일시");
  120. migrationBuilder.CreateTable(
  121. name: "Crew",
  122. columns: table => new
  123. {
  124. ID = table.Column<int>(type: "int", nullable: false)
  125. .Annotation("SqlServer:Identity", "1, 1"),
  126. ChannelID = table.Column<int>(type: "int", nullable: false),
  127. MemberID = table.Column<int>(type: "int", nullable: false),
  128. Name = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
  129. Description = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  130. MinAmount = table.Column<int>(type: "int", nullable: true),
  131. IsActive = table.Column<bool>(type: "bit", nullable: false),
  132. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  133. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  134. },
  135. constraints: table =>
  136. {
  137. table.PrimaryKey("PK_Crew", x => x.ID);
  138. table.ForeignKey(
  139. name: "FK_Crew_Channel_ChannelID",
  140. column: x => x.ChannelID,
  141. principalTable: "Channel",
  142. principalColumn: "ID",
  143. onDelete: ReferentialAction.Cascade);
  144. table.ForeignKey(
  145. name: "FK_Crew_Member_MemberID",
  146. column: x => x.MemberID,
  147. principalTable: "Member",
  148. principalColumn: "ID");
  149. },
  150. comment: "크루");
  151. migrationBuilder.CreateTable(
  152. name: "DonationAlertConfig",
  153. columns: table => new
  154. {
  155. ID = table.Column<int>(type: "int", nullable: false)
  156. .Annotation("SqlServer:Identity", "1, 1"),
  157. ChannelID = table.Column<int>(type: "int", nullable: false),
  158. MemberID = table.Column<int>(type: "int", nullable: false),
  159. Title = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  160. Amount = table.Column<int>(type: "int", nullable: false),
  161. Sound = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  162. Message = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  163. PlayDelaySec = table.Column<double>(type: "float", nullable: false),
  164. DisplayDurationSec = table.Column<double>(type: "float", nullable: false),
  165. EnableThumbnail = table.Column<bool>(type: "bit", nullable: false),
  166. ThumbnailUrl = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  167. IsActive = table.Column<bool>(type: "bit", nullable: false),
  168. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  169. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  170. },
  171. constraints: table =>
  172. {
  173. table.PrimaryKey("PK_DonationAlertConfig", x => x.ID);
  174. table.ForeignKey(
  175. name: "FK_DonationAlertConfig_Channel_ChannelID",
  176. column: x => x.ChannelID,
  177. principalTable: "Channel",
  178. principalColumn: "ID",
  179. onDelete: ReferentialAction.Cascade);
  180. table.ForeignKey(
  181. name: "FK_DonationAlertConfig_Member_MemberID",
  182. column: x => x.MemberID,
  183. principalTable: "Member",
  184. principalColumn: "ID");
  185. },
  186. comment: "후원 알림 위젯 설정");
  187. migrationBuilder.CreateTable(
  188. name: "DonationGoalConfig",
  189. columns: table => new
  190. {
  191. ID = table.Column<int>(type: "int", nullable: false)
  192. .Annotation("SqlServer:Identity", "1, 1"),
  193. ChannelID = table.Column<int>(type: "int", nullable: false),
  194. MemberID = table.Column<int>(type: "int", nullable: false),
  195. Title = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
  196. Style = table.Column<int>(type: "int", nullable: false),
  197. StartAmount = table.Column<int>(type: "int", nullable: false),
  198. TargetAmount = table.Column<int>(type: "int", nullable: false),
  199. StartAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  200. EndAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  201. IsShowPercent = table.Column<bool>(type: "bit", nullable: false),
  202. BarColor = table.Column<string>(type: "nvarchar(9)", maxLength: 9, nullable: false),
  203. BarBackgroundColor = table.Column<string>(type: "nvarchar(9)", maxLength: 9, nullable: false),
  204. BarHeightPx = table.Column<int>(type: "int", nullable: false),
  205. TitleFontSizePx = table.Column<int>(type: "int", nullable: false),
  206. TitleFontColor = table.Column<string>(type: "nvarchar(9)", maxLength: 9, nullable: false),
  207. AmountFontSizePx = table.Column<int>(type: "int", nullable: false),
  208. AmountFontColor = table.Column<string>(type: "nvarchar(9)", maxLength: 9, nullable: false),
  209. IsActive = table.Column<bool>(type: "bit", nullable: false),
  210. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  211. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  212. },
  213. constraints: table =>
  214. {
  215. table.PrimaryKey("PK_DonationGoalConfig", x => x.ID);
  216. table.ForeignKey(
  217. name: "FK_DonationGoalConfig_Channel_ChannelID",
  218. column: x => x.ChannelID,
  219. principalTable: "Channel",
  220. principalColumn: "ID",
  221. onDelete: ReferentialAction.Cascade);
  222. table.ForeignKey(
  223. name: "FK_DonationGoalConfig_Member_MemberID",
  224. column: x => x.MemberID,
  225. principalTable: "Member",
  226. principalColumn: "ID");
  227. },
  228. comment: "후원 목표 위젯 설정");
  229. migrationBuilder.CreateTable(
  230. name: "DonationMeta",
  231. columns: table => new
  232. {
  233. ID = table.Column<int>(type: "int", nullable: false)
  234. .Annotation("SqlServer:Identity", "1, 1"),
  235. ChannelID = table.Column<int>(type: "int", nullable: false),
  236. MemberID = table.Column<int>(type: "int", nullable: false),
  237. MinAmount = table.Column<int>(type: "int", nullable: false),
  238. IsPaused = table.Column<bool>(type: "bit", nullable: false),
  239. IsAccepting = table.Column<bool>(type: "bit", nullable: false),
  240. IsAudioOnly = table.Column<bool>(type: "bit", nullable: false),
  241. IsVideoOnly = table.Column<bool>(type: "bit", nullable: false),
  242. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  243. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  244. },
  245. constraints: table =>
  246. {
  247. table.PrimaryKey("PK_DonationMeta", x => x.ID);
  248. table.ForeignKey(
  249. name: "FK_DonationMeta_Channel_ChannelID",
  250. column: x => x.ChannelID,
  251. principalTable: "Channel",
  252. principalColumn: "ID",
  253. onDelete: ReferentialAction.Cascade);
  254. table.ForeignKey(
  255. name: "FK_DonationMeta_Member_MemberID",
  256. column: x => x.MemberID,
  257. principalTable: "Member",
  258. principalColumn: "ID");
  259. },
  260. comment: "후원 공통 설정");
  261. migrationBuilder.CreateTable(
  262. name: "DonationRankConfig",
  263. columns: table => new
  264. {
  265. ID = table.Column<int>(type: "int", nullable: false)
  266. .Annotation("SqlServer:Identity", "1, 1"),
  267. ChannelID = table.Column<int>(type: "int", nullable: false),
  268. MemberID = table.Column<int>(type: "int", nullable: false),
  269. Title = table.Column<string>(type: "nvarchar(300)", maxLength: 300, nullable: false),
  270. Theme = table.Column<int>(type: "int", nullable: false),
  271. Period = table.Column<int>(type: "int", nullable: false),
  272. StartAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  273. EndAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  274. IsShowAmount = table.Column<bool>(type: "bit", nullable: false),
  275. MaxRankCount = table.Column<int>(type: "int", nullable: false),
  276. NameMode = table.Column<bool>(type: "bit", nullable: true),
  277. IsActive = table.Column<bool>(type: "bit", nullable: false),
  278. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  279. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  280. },
  281. constraints: table =>
  282. {
  283. table.PrimaryKey("PK_DonationRankConfig", x => x.ID);
  284. table.ForeignKey(
  285. name: "FK_DonationRankConfig_Channel_ChannelID",
  286. column: x => x.ChannelID,
  287. principalTable: "Channel",
  288. principalColumn: "ID",
  289. onDelete: ReferentialAction.Cascade);
  290. table.ForeignKey(
  291. name: "FK_DonationRankConfig_Member_MemberID",
  292. column: x => x.MemberID,
  293. principalTable: "Member",
  294. principalColumn: "ID");
  295. },
  296. comment: "후원 순위 위젯 설정");
  297. migrationBuilder.CreateTable(
  298. name: "DonationRanking",
  299. columns: table => new
  300. {
  301. ID = table.Column<int>(type: "int", nullable: false)
  302. .Annotation("SqlServer:Identity", "1, 1"),
  303. ChannelID = table.Column<int>(type: "int", nullable: false),
  304. SponsorMemberID = table.Column<int>(type: "int", nullable: false),
  305. PeriodType = table.Column<int>(type: "int", nullable: false),
  306. PeriodStart = table.Column<DateTime>(type: "datetime2", nullable: false),
  307. PeriodEnd = table.Column<DateTime>(type: "datetime2", nullable: true),
  308. Rank = table.Column<int>(type: "int", nullable: false),
  309. TotalAmount = table.Column<int>(type: "int", nullable: false),
  310. DonationCount = table.Column<int>(type: "int", nullable: false),
  311. SponsorName = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: false),
  312. IsActive = table.Column<bool>(type: "bit", nullable: false),
  313. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  314. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  315. },
  316. constraints: table =>
  317. {
  318. table.PrimaryKey("PK_DonationRanking", x => x.ID);
  319. table.ForeignKey(
  320. name: "FK_DonationRanking_Channel_ChannelID",
  321. column: x => x.ChannelID,
  322. principalTable: "Channel",
  323. principalColumn: "ID",
  324. onDelete: ReferentialAction.Cascade);
  325. table.ForeignKey(
  326. name: "FK_DonationRanking_Member_SponsorMemberID",
  327. column: x => x.SponsorMemberID,
  328. principalTable: "Member",
  329. principalColumn: "ID");
  330. },
  331. comment: "후원 순위");
  332. migrationBuilder.CreateTable(
  333. name: "MemberOAuthToken",
  334. columns: table => new
  335. {
  336. ID = table.Column<long>(type: "bigint", nullable: false)
  337. .Annotation("SqlServer:Identity", "1, 1"),
  338. MemberID = table.Column<int>(type: "int", nullable: false),
  339. Provider = table.Column<string>(type: "nvarchar(32)", maxLength: 32, nullable: false),
  340. AccessTokenEnc = table.Column<string>(type: "nvarchar(2048)", maxLength: 2048, nullable: false),
  341. RefreshTokenEnc = table.Column<string>(type: "nvarchar(2048)", maxLength: 2048, nullable: true),
  342. ExpiresAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  343. Scopes = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: false),
  344. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  345. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  346. },
  347. constraints: table =>
  348. {
  349. table.PrimaryKey("PK_MemberOAuthToken", x => x.ID);
  350. table.ForeignKey(
  351. name: "FK_MemberOAuthToken_Member_MemberID",
  352. column: x => x.MemberID,
  353. principalTable: "Member",
  354. principalColumn: "ID",
  355. onDelete: ReferentialAction.Cascade);
  356. },
  357. comment: "회원 OAuth 토큰");
  358. migrationBuilder.CreateTable(
  359. name: "Note",
  360. columns: table => new
  361. {
  362. ID = table.Column<int>(type: "int", nullable: false)
  363. .Annotation("SqlServer:Identity", "1, 1"),
  364. SenderMemberID = table.Column<int>(type: "int", nullable: false),
  365. ReceiverMemberID = table.Column<int>(type: "int", nullable: false),
  366. Title = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  367. Content = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: false),
  368. IsRead = table.Column<bool>(type: "bit", nullable: false),
  369. IsDeletedBySender = table.Column<bool>(type: "bit", nullable: false),
  370. IsDeletedByReceiver = table.Column<bool>(type: "bit", nullable: false),
  371. IsSystem = table.Column<bool>(type: "bit", nullable: false),
  372. RelatedType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
  373. RelatedID = table.Column<int>(type: "int", nullable: true),
  374. ReadAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  375. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  376. },
  377. constraints: table =>
  378. {
  379. table.PrimaryKey("PK_Note", x => x.ID);
  380. table.ForeignKey(
  381. name: "FK_Note_Member_ReceiverMemberID",
  382. column: x => x.ReceiverMemberID,
  383. principalTable: "Member",
  384. principalColumn: "ID");
  385. table.ForeignKey(
  386. name: "FK_Note_Member_SenderMemberID",
  387. column: x => x.SenderMemberID,
  388. principalTable: "Member",
  389. principalColumn: "ID");
  390. },
  391. comment: "쪽지");
  392. migrationBuilder.CreateTable(
  393. name: "Notification",
  394. columns: table => new
  395. {
  396. ID = table.Column<int>(type: "int", nullable: false)
  397. .Annotation("SqlServer:Identity", "1, 1"),
  398. MemberID = table.Column<int>(type: "int", nullable: false),
  399. Type = table.Column<int>(type: "int", nullable: false),
  400. Title = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  401. Message = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: false),
  402. IsRead = table.Column<bool>(type: "bit", nullable: false),
  403. ActionUrl = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  404. RelatedType = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
  405. RelatedID = table.Column<int>(type: "int", nullable: true),
  406. ImageUrl = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true),
  407. ReadAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  408. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  409. },
  410. constraints: table =>
  411. {
  412. table.PrimaryKey("PK_Notification", x => x.ID);
  413. table.ForeignKey(
  414. name: "FK_Notification_Member_MemberID",
  415. column: x => x.MemberID,
  416. principalTable: "Member",
  417. principalColumn: "ID",
  418. onDelete: ReferentialAction.Cascade);
  419. },
  420. comment: "알림");
  421. migrationBuilder.CreateTable(
  422. name: "Settlement",
  423. columns: table => new
  424. {
  425. ID = table.Column<int>(type: "int", nullable: false)
  426. .Annotation("SqlServer:Identity", "1, 1"),
  427. ChannelID = table.Column<int>(type: "int", nullable: false),
  428. MemberID = table.Column<int>(type: "int", nullable: false),
  429. PeriodStart = table.Column<DateTime>(type: "datetime2", nullable: false),
  430. PeriodEnd = table.Column<DateTime>(type: "datetime2", nullable: false),
  431. GrossAmount = table.Column<int>(type: "int", nullable: false),
  432. FeeAmount = table.Column<int>(type: "int", nullable: false),
  433. NetAmount = table.Column<int>(type: "int", nullable: false),
  434. Status = table.Column<int>(type: "int", nullable: false),
  435. RequestedAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  436. ApprovedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  437. PaidAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  438. AdminMemo = table.Column<string>(type: "nvarchar(500)", maxLength: 500, nullable: true)
  439. },
  440. constraints: table =>
  441. {
  442. table.PrimaryKey("PK_Settlement", x => x.ID);
  443. table.ForeignKey(
  444. name: "FK_Settlement_Channel_ChannelID",
  445. column: x => x.ChannelID,
  446. principalTable: "Channel",
  447. principalColumn: "ID");
  448. table.ForeignKey(
  449. name: "FK_Settlement_Member_MemberID",
  450. column: x => x.MemberID,
  451. principalTable: "Member",
  452. principalColumn: "ID");
  453. },
  454. comment: "정산");
  455. migrationBuilder.CreateTable(
  456. name: "CrewMember",
  457. columns: table => new
  458. {
  459. ID = table.Column<int>(type: "int", nullable: false)
  460. .Annotation("SqlServer:Identity", "1, 1"),
  461. CrewID = table.Column<int>(type: "int", nullable: false),
  462. MemberID = table.Column<int>(type: "int", nullable: false),
  463. ChannelID = table.Column<int>(type: "int", nullable: true),
  464. Nickname = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: false),
  465. Role = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
  466. SortOrder = table.Column<int>(type: "int", nullable: false),
  467. IsActive = table.Column<bool>(type: "bit", nullable: false),
  468. JoinedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  469. },
  470. constraints: table =>
  471. {
  472. table.PrimaryKey("PK_CrewMember", x => x.ID);
  473. table.ForeignKey(
  474. name: "FK_CrewMember_Channel_ChannelID",
  475. column: x => x.ChannelID,
  476. principalTable: "Channel",
  477. principalColumn: "ID");
  478. table.ForeignKey(
  479. name: "FK_CrewMember_Crew_CrewID",
  480. column: x => x.CrewID,
  481. principalTable: "Crew",
  482. principalColumn: "ID",
  483. onDelete: ReferentialAction.Cascade);
  484. table.ForeignKey(
  485. name: "FK_CrewMember_Member_MemberID",
  486. column: x => x.MemberID,
  487. principalTable: "Member",
  488. principalColumn: "ID");
  489. },
  490. comment: "크루원");
  491. migrationBuilder.CreateTable(
  492. name: "CrewSession",
  493. columns: table => new
  494. {
  495. ID = table.Column<int>(type: "int", nullable: false)
  496. .Annotation("SqlServer:Identity", "1, 1"),
  497. CrewID = table.Column<int>(type: "int", nullable: false),
  498. Title = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false),
  499. Status = table.Column<int>(type: "int", nullable: false),
  500. StartedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  501. EndedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  502. TotalAmount = table.Column<int>(type: "int", nullable: false),
  503. TotalDonationCount = table.Column<int>(type: "int", nullable: false),
  504. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  505. },
  506. constraints: table =>
  507. {
  508. table.PrimaryKey("PK_CrewSession", x => x.ID);
  509. table.ForeignKey(
  510. name: "FK_CrewSession_Crew_CrewID",
  511. column: x => x.CrewID,
  512. principalTable: "Crew",
  513. principalColumn: "ID",
  514. onDelete: ReferentialAction.Cascade);
  515. },
  516. comment: "크루 후원 방송 세션");
  517. migrationBuilder.CreateTable(
  518. name: "CrewDonationSummary",
  519. columns: table => new
  520. {
  521. ID = table.Column<int>(type: "int", nullable: false)
  522. .Annotation("SqlServer:Identity", "1, 1"),
  523. CrewSessionID = table.Column<int>(type: "int", nullable: false),
  524. CrewMemberID = table.Column<int>(type: "int", nullable: false),
  525. TotalAmount = table.Column<int>(type: "int", nullable: false),
  526. DonationCount = table.Column<int>(type: "int", nullable: false),
  527. ContributionRate = table.Column<decimal>(type: "decimal(5,2)", precision: 5, scale: 2, nullable: false),
  528. Rank = table.Column<int>(type: "int", nullable: false),
  529. UpdatedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  530. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  531. },
  532. constraints: table =>
  533. {
  534. table.PrimaryKey("PK_CrewDonationSummary", x => x.ID);
  535. table.ForeignKey(
  536. name: "FK_CrewDonationSummary_CrewMember_CrewMemberID",
  537. column: x => x.CrewMemberID,
  538. principalTable: "CrewMember",
  539. principalColumn: "ID");
  540. table.ForeignKey(
  541. name: "FK_CrewDonationSummary_CrewSession_CrewSessionID",
  542. column: x => x.CrewSessionID,
  543. principalTable: "CrewSession",
  544. principalColumn: "ID",
  545. onDelete: ReferentialAction.Cascade);
  546. },
  547. comment: "크루원 후원 집계");
  548. migrationBuilder.CreateTable(
  549. name: "CrewSessionConsent",
  550. columns: table => new
  551. {
  552. ID = table.Column<int>(type: "int", nullable: false)
  553. .Annotation("SqlServer:Identity", "1, 1"),
  554. CrewSessionID = table.Column<int>(type: "int", nullable: false),
  555. CrewMemberID = table.Column<int>(type: "int", nullable: false),
  556. IsConsented = table.Column<bool>(type: "bit", nullable: false),
  557. ConsentedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  558. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  559. },
  560. constraints: table =>
  561. {
  562. table.PrimaryKey("PK_CrewSessionConsent", x => x.ID);
  563. table.ForeignKey(
  564. name: "FK_CrewSessionConsent_CrewMember_CrewMemberID",
  565. column: x => x.CrewMemberID,
  566. principalTable: "CrewMember",
  567. principalColumn: "ID");
  568. table.ForeignKey(
  569. name: "FK_CrewSessionConsent_CrewSession_CrewSessionID",
  570. column: x => x.CrewSessionID,
  571. principalTable: "CrewSession",
  572. principalColumn: "ID",
  573. onDelete: ReferentialAction.Cascade);
  574. },
  575. comment: "크루원 방송 동의");
  576. migrationBuilder.CreateTable(
  577. name: "Donation",
  578. columns: table => new
  579. {
  580. ID = table.Column<int>(type: "int", nullable: false)
  581. .Annotation("SqlServer:Identity", "1, 1"),
  582. SponsorMemberID = table.Column<int>(type: "int", nullable: false),
  583. ReceiverMemberID = table.Column<int>(type: "int", nullable: false),
  584. ChannelID = table.Column<int>(type: "int", nullable: false),
  585. CrewSessionID = table.Column<int>(type: "int", nullable: true),
  586. CrewMemberID = table.Column<int>(type: "int", nullable: true),
  587. Amount = table.Column<int>(type: "int", nullable: false),
  588. FeeRate = table.Column<decimal>(type: "decimal(5,2)", precision: 5, scale: 2, nullable: false),
  589. FeeAmount = table.Column<int>(type: "int", nullable: false),
  590. NetAmount = table.Column<int>(type: "int", nullable: false),
  591. Message = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: true),
  592. SendName = table.Column<string>(type: "nvarchar(100)", maxLength: 100, nullable: false),
  593. IsTest = table.Column<bool>(type: "bit", nullable: false),
  594. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  595. },
  596. constraints: table =>
  597. {
  598. table.PrimaryKey("PK_Donation", x => x.ID);
  599. table.ForeignKey(
  600. name: "FK_Donation_Channel_ChannelID",
  601. column: x => x.ChannelID,
  602. principalTable: "Channel",
  603. principalColumn: "ID");
  604. table.ForeignKey(
  605. name: "FK_Donation_CrewMember_CrewMemberID",
  606. column: x => x.CrewMemberID,
  607. principalTable: "CrewMember",
  608. principalColumn: "ID");
  609. table.ForeignKey(
  610. name: "FK_Donation_CrewSession_CrewSessionID",
  611. column: x => x.CrewSessionID,
  612. principalTable: "CrewSession",
  613. principalColumn: "ID");
  614. table.ForeignKey(
  615. name: "FK_Donation_Member_ReceiverMemberID",
  616. column: x => x.ReceiverMemberID,
  617. principalTable: "Member",
  618. principalColumn: "ID");
  619. table.ForeignKey(
  620. name: "FK_Donation_Member_SponsorMemberID",
  621. column: x => x.SponsorMemberID,
  622. principalTable: "Member",
  623. principalColumn: "ID");
  624. },
  625. comment: "후원 내역");
  626. migrationBuilder.CreateTable(
  627. name: "DonationAlert",
  628. columns: table => new
  629. {
  630. ID = table.Column<int>(type: "int", nullable: false)
  631. .Annotation("SqlServer:Identity", "1, 1"),
  632. DonationID = table.Column<int>(type: "int", nullable: false),
  633. SponsorMemberID = table.Column<int>(type: "int", nullable: false),
  634. ReceiverMemberID = table.Column<int>(type: "int", nullable: false),
  635. Status = table.Column<int>(type: "int", nullable: false),
  636. CorrelationID = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
  637. StartAt = table.Column<DateTime>(type: "datetime2", nullable: false),
  638. ArrivedAt = table.Column<DateTime>(type: "datetime2", nullable: true),
  639. TotalDelayMs = table.Column<double>(type: "float", nullable: true),
  640. IpAddress = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: true),
  641. UserAgent = table.Column<string>(type: "nvarchar(255)", maxLength: 255, nullable: true),
  642. CreatedAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  643. },
  644. constraints: table =>
  645. {
  646. table.PrimaryKey("PK_DonationAlert", x => x.ID);
  647. table.ForeignKey(
  648. name: "FK_DonationAlert_Donation_DonationID",
  649. column: x => x.DonationID,
  650. principalTable: "Donation",
  651. principalColumn: "ID",
  652. onDelete: ReferentialAction.Cascade);
  653. table.ForeignKey(
  654. name: "FK_DonationAlert_Member_ReceiverMemberID",
  655. column: x => x.ReceiverMemberID,
  656. principalTable: "Member",
  657. principalColumn: "ID");
  658. table.ForeignKey(
  659. name: "FK_DonationAlert_Member_SponsorMemberID",
  660. column: x => x.SponsorMemberID,
  661. principalTable: "Member",
  662. principalColumn: "ID");
  663. },
  664. comment: "후원 알림 추적");
  665. migrationBuilder.CreateTable(
  666. name: "DonationAlertAttempt",
  667. columns: table => new
  668. {
  669. ID = table.Column<int>(type: "int", nullable: false)
  670. .Annotation("SqlServer:Identity", "1, 1"),
  671. DonationID = table.Column<int>(type: "int", nullable: false),
  672. DonationAlertID = table.Column<int>(type: "int", nullable: false),
  673. IpAddress = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true),
  674. UserAgent = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: true),
  675. SentAt = table.Column<DateTime>(type: "datetime2", nullable: false)
  676. },
  677. constraints: table =>
  678. {
  679. table.PrimaryKey("PK_DonationAlertAttempt", x => x.ID);
  680. table.ForeignKey(
  681. name: "FK_DonationAlertAttempt_DonationAlert_DonationAlertID",
  682. column: x => x.DonationAlertID,
  683. principalTable: "DonationAlert",
  684. principalColumn: "ID",
  685. onDelete: ReferentialAction.Cascade);
  686. table.ForeignKey(
  687. name: "FK_DonationAlertAttempt_Donation_DonationID",
  688. column: x => x.DonationID,
  689. principalTable: "Donation",
  690. principalColumn: "ID");
  691. },
  692. comment: "후원 알림 재시도 기록");
  693. migrationBuilder.CreateIndex(
  694. name: "IX_Crew_ChannelID_IsActive",
  695. table: "Crew",
  696. columns: new[] { "ChannelID", "IsActive" });
  697. migrationBuilder.CreateIndex(
  698. name: "IX_Crew_MemberID",
  699. table: "Crew",
  700. column: "MemberID");
  701. migrationBuilder.CreateIndex(
  702. name: "IX_CrewDonationSummary_CrewMemberID",
  703. table: "CrewDonationSummary",
  704. column: "CrewMemberID");
  705. migrationBuilder.CreateIndex(
  706. name: "IX_CrewDonationSummary_CrewSessionID_CrewMemberID",
  707. table: "CrewDonationSummary",
  708. columns: new[] { "CrewSessionID", "CrewMemberID" },
  709. unique: true);
  710. migrationBuilder.CreateIndex(
  711. name: "IX_CrewDonationSummary_CrewSessionID_Rank",
  712. table: "CrewDonationSummary",
  713. columns: new[] { "CrewSessionID", "Rank" });
  714. migrationBuilder.CreateIndex(
  715. name: "IX_CrewMember_ChannelID",
  716. table: "CrewMember",
  717. column: "ChannelID");
  718. migrationBuilder.CreateIndex(
  719. name: "IX_CrewMember_CrewID_MemberID",
  720. table: "CrewMember",
  721. columns: new[] { "CrewID", "MemberID" },
  722. unique: true);
  723. migrationBuilder.CreateIndex(
  724. name: "IX_CrewMember_MemberID",
  725. table: "CrewMember",
  726. column: "MemberID");
  727. migrationBuilder.CreateIndex(
  728. name: "IX_CrewSession_CrewID_StartedAt",
  729. table: "CrewSession",
  730. columns: new[] { "CrewID", "StartedAt" });
  731. migrationBuilder.CreateIndex(
  732. name: "IX_CrewSession_CrewID_Status",
  733. table: "CrewSession",
  734. columns: new[] { "CrewID", "Status" });
  735. migrationBuilder.CreateIndex(
  736. name: "IX_CrewSessionConsent_CrewMemberID",
  737. table: "CrewSessionConsent",
  738. column: "CrewMemberID");
  739. migrationBuilder.CreateIndex(
  740. name: "IX_CrewSessionConsent_CrewSessionID_CrewMemberID",
  741. table: "CrewSessionConsent",
  742. columns: new[] { "CrewSessionID", "CrewMemberID" },
  743. unique: true);
  744. migrationBuilder.CreateIndex(
  745. name: "IX_Donation_ChannelID",
  746. table: "Donation",
  747. column: "ChannelID");
  748. migrationBuilder.CreateIndex(
  749. name: "IX_Donation_ChannelID_CreatedAt",
  750. table: "Donation",
  751. columns: new[] { "ChannelID", "CreatedAt" });
  752. migrationBuilder.CreateIndex(
  753. name: "IX_Donation_CrewMemberID",
  754. table: "Donation",
  755. column: "CrewMemberID");
  756. migrationBuilder.CreateIndex(
  757. name: "IX_Donation_CrewSessionID",
  758. table: "Donation",
  759. column: "CrewSessionID");
  760. migrationBuilder.CreateIndex(
  761. name: "IX_Donation_ReceiverMemberID",
  762. table: "Donation",
  763. column: "ReceiverMemberID");
  764. migrationBuilder.CreateIndex(
  765. name: "IX_Donation_SponsorMemberID",
  766. table: "Donation",
  767. column: "SponsorMemberID");
  768. migrationBuilder.CreateIndex(
  769. name: "IX_Donation_SponsorMemberID_ReceiverMemberID",
  770. table: "Donation",
  771. columns: new[] { "SponsorMemberID", "ReceiverMemberID" });
  772. migrationBuilder.CreateIndex(
  773. name: "IX_DonationAlert_CorrelationID",
  774. table: "DonationAlert",
  775. column: "CorrelationID",
  776. unique: true);
  777. migrationBuilder.CreateIndex(
  778. name: "IX_DonationAlert_DonationID",
  779. table: "DonationAlert",
  780. column: "DonationID",
  781. unique: true);
  782. migrationBuilder.CreateIndex(
  783. name: "IX_DonationAlert_ReceiverMemberID_Status_CreatedAt",
  784. table: "DonationAlert",
  785. columns: new[] { "ReceiverMemberID", "Status", "CreatedAt" },
  786. descending: new[] { false, false, true });
  787. migrationBuilder.CreateIndex(
  788. name: "IX_DonationAlert_SponsorMemberID",
  789. table: "DonationAlert",
  790. column: "SponsorMemberID");
  791. migrationBuilder.CreateIndex(
  792. name: "IX_DonationAlert_Status",
  793. table: "DonationAlert",
  794. column: "Status");
  795. migrationBuilder.CreateIndex(
  796. name: "IX_DonationAlertAttempt_DonationAlertID",
  797. table: "DonationAlertAttempt",
  798. column: "DonationAlertID");
  799. migrationBuilder.CreateIndex(
  800. name: "IX_DonationAlertAttempt_DonationID_DonationAlertID",
  801. table: "DonationAlertAttempt",
  802. columns: new[] { "DonationID", "DonationAlertID" });
  803. migrationBuilder.CreateIndex(
  804. name: "IX_DonationAlertConfig_ChannelID_IsActive",
  805. table: "DonationAlertConfig",
  806. columns: new[] { "ChannelID", "IsActive" });
  807. migrationBuilder.CreateIndex(
  808. name: "IX_DonationAlertConfig_ChannelID_MemberID_Amount",
  809. table: "DonationAlertConfig",
  810. columns: new[] { "ChannelID", "MemberID", "Amount" });
  811. migrationBuilder.CreateIndex(
  812. name: "IX_DonationAlertConfig_MemberID",
  813. table: "DonationAlertConfig",
  814. column: "MemberID");
  815. migrationBuilder.CreateIndex(
  816. name: "IX_DonationGoalConfig_ChannelID_IsActive",
  817. table: "DonationGoalConfig",
  818. columns: new[] { "ChannelID", "IsActive" });
  819. migrationBuilder.CreateIndex(
  820. name: "IX_DonationGoalConfig_ChannelID_MemberID",
  821. table: "DonationGoalConfig",
  822. columns: new[] { "ChannelID", "MemberID" });
  823. migrationBuilder.CreateIndex(
  824. name: "IX_DonationGoalConfig_MemberID",
  825. table: "DonationGoalConfig",
  826. column: "MemberID");
  827. migrationBuilder.CreateIndex(
  828. name: "IX_DonationMeta_ChannelID_MemberID",
  829. table: "DonationMeta",
  830. columns: new[] { "ChannelID", "MemberID" },
  831. unique: true);
  832. migrationBuilder.CreateIndex(
  833. name: "IX_DonationMeta_MemberID",
  834. table: "DonationMeta",
  835. column: "MemberID");
  836. migrationBuilder.CreateIndex(
  837. name: "IX_DonationRankConfig_ChannelID_MemberID",
  838. table: "DonationRankConfig",
  839. columns: new[] { "ChannelID", "MemberID" },
  840. unique: true);
  841. migrationBuilder.CreateIndex(
  842. name: "IX_DonationRankConfig_MemberID",
  843. table: "DonationRankConfig",
  844. column: "MemberID");
  845. migrationBuilder.CreateIndex(
  846. name: "IX_DonationRanking_ChannelID_PeriodType_PeriodStart_Rank",
  847. table: "DonationRanking",
  848. columns: new[] { "ChannelID", "PeriodType", "PeriodStart", "Rank" });
  849. migrationBuilder.CreateIndex(
  850. name: "IX_DonationRanking_ChannelID_SponsorMemberID_PeriodType_PeriodStart",
  851. table: "DonationRanking",
  852. columns: new[] { "ChannelID", "SponsorMemberID", "PeriodType", "PeriodStart" },
  853. unique: true);
  854. migrationBuilder.CreateIndex(
  855. name: "IX_DonationRanking_SponsorMemberID",
  856. table: "DonationRanking",
  857. column: "SponsorMemberID");
  858. migrationBuilder.CreateIndex(
  859. name: "IX_MemberOAuthToken_MemberID_Provider",
  860. table: "MemberOAuthToken",
  861. columns: new[] { "MemberID", "Provider" },
  862. unique: true);
  863. migrationBuilder.CreateIndex(
  864. name: "IX_Note_ReceiverMemberID_IsDeletedByReceiver_IsRead_CreatedAt",
  865. table: "Note",
  866. columns: new[] { "ReceiverMemberID", "IsDeletedByReceiver", "IsRead", "CreatedAt" },
  867. descending: new[] { false, false, false, true });
  868. migrationBuilder.CreateIndex(
  869. name: "IX_Note_SenderMemberID_IsDeletedBySender_CreatedAt",
  870. table: "Note",
  871. columns: new[] { "SenderMemberID", "IsDeletedBySender", "CreatedAt" },
  872. descending: new[] { false, false, true });
  873. migrationBuilder.CreateIndex(
  874. name: "IX_Notification_MemberID_IsRead_CreatedAt",
  875. table: "Notification",
  876. columns: new[] { "MemberID", "IsRead", "CreatedAt" },
  877. descending: new[] { false, false, true });
  878. migrationBuilder.CreateIndex(
  879. name: "IX_Notification_MemberID_Type_CreatedAt",
  880. table: "Notification",
  881. columns: new[] { "MemberID", "Type", "CreatedAt" },
  882. descending: new[] { false, false, true });
  883. migrationBuilder.CreateIndex(
  884. name: "IX_Settlement_ChannelID_PeriodStart_PeriodEnd",
  885. table: "Settlement",
  886. columns: new[] { "ChannelID", "PeriodStart", "PeriodEnd" });
  887. migrationBuilder.CreateIndex(
  888. name: "IX_Settlement_MemberID",
  889. table: "Settlement",
  890. column: "MemberID");
  891. migrationBuilder.CreateIndex(
  892. name: "IX_Settlement_Status",
  893. table: "Settlement",
  894. column: "Status");
  895. }
  896. /// <inheritdoc />
  897. protected override void Down(MigrationBuilder migrationBuilder)
  898. {
  899. migrationBuilder.DropTable(
  900. name: "CrewDonationSummary");
  901. migrationBuilder.DropTable(
  902. name: "CrewSessionConsent");
  903. migrationBuilder.DropTable(
  904. name: "DonationAlertAttempt");
  905. migrationBuilder.DropTable(
  906. name: "DonationAlertConfig");
  907. migrationBuilder.DropTable(
  908. name: "DonationGoalConfig");
  909. migrationBuilder.DropTable(
  910. name: "DonationMeta");
  911. migrationBuilder.DropTable(
  912. name: "DonationRankConfig");
  913. migrationBuilder.DropTable(
  914. name: "DonationRanking");
  915. migrationBuilder.DropTable(
  916. name: "MemberOAuthToken");
  917. migrationBuilder.DropTable(
  918. name: "Note");
  919. migrationBuilder.DropTable(
  920. name: "Notification");
  921. migrationBuilder.DropTable(
  922. name: "Settlement");
  923. migrationBuilder.DropTable(
  924. name: "DonationAlert");
  925. migrationBuilder.DropTable(
  926. name: "Donation");
  927. migrationBuilder.DropTable(
  928. name: "CrewMember");
  929. migrationBuilder.DropTable(
  930. name: "CrewSession");
  931. migrationBuilder.DropTable(
  932. name: "Crew");
  933. migrationBuilder.AlterTable(
  934. name: "Channel",
  935. comment: "채널 정보",
  936. oldComment: "� ����");
  937. migrationBuilder.AlterColumn<string>(
  938. name: "YouTubeUrl",
  939. table: "Channel",
  940. type: "nvarchar(255)",
  941. maxLength: 255,
  942. nullable: false,
  943. comment: "YouTube 채널 URL",
  944. oldClrType: typeof(string),
  945. oldType: "nvarchar(255)",
  946. oldMaxLength: 255,
  947. oldComment: "YouTube � URL");
  948. migrationBuilder.AlterColumn<DateTime>(
  949. name: "UpdatedAt",
  950. table: "Channel",
  951. type: "datetime2",
  952. nullable: true,
  953. comment: "수정 일시",
  954. oldClrType: typeof(DateTime),
  955. oldType: "datetime2",
  956. oldNullable: true,
  957. oldComment: "���� �Ͻ�");
  958. migrationBuilder.AlterColumn<string>(
  959. name: "SID",
  960. table: "Channel",
  961. type: "nvarchar(24)",
  962. maxLength: 24,
  963. nullable: false,
  964. comment: "채널 ID",
  965. oldClrType: typeof(string),
  966. oldType: "nvarchar(24)",
  967. oldMaxLength: 24,
  968. oldComment: "� ID");
  969. migrationBuilder.AlterColumn<decimal>(
  970. name: "PlatformFeeRate",
  971. table: "Channel",
  972. type: "decimal(5,2)",
  973. precision: 5,
  974. scale: 2,
  975. nullable: false,
  976. comment: "수수료(%)",
  977. oldClrType: typeof(decimal),
  978. oldType: "decimal(5,2)",
  979. oldPrecision: 5,
  980. oldScale: 2,
  981. oldComment: "������(%)");
  982. migrationBuilder.AlterColumn<string>(
  983. name: "Name",
  984. table: "Channel",
  985. type: "nvarchar(200)",
  986. maxLength: 200,
  987. nullable: false,
  988. comment: "채널 이름",
  989. oldClrType: typeof(string),
  990. oldType: "nvarchar(200)",
  991. oldMaxLength: 200,
  992. oldComment: "ä�� �̸�");
  993. migrationBuilder.AlterColumn<int>(
  994. name: "MemberID",
  995. table: "Channel",
  996. type: "int",
  997. nullable: false,
  998. comment: "회원 ID",
  999. oldClrType: typeof(int),
  1000. oldType: "int",
  1001. oldComment: "ȸ�� ID");
  1002. migrationBuilder.AlterColumn<bool>(
  1003. name: "IsVerified",
  1004. table: "Channel",
  1005. type: "bit",
  1006. nullable: false,
  1007. comment: "인증 여부",
  1008. oldClrType: typeof(bool),
  1009. oldType: "bit",
  1010. oldComment: "���� ����");
  1011. migrationBuilder.AlterColumn<bool>(
  1012. name: "IsActive",
  1013. table: "Channel",
  1014. type: "bit",
  1015. nullable: false,
  1016. comment: "활성 여부",
  1017. oldClrType: typeof(bool),
  1018. oldType: "bit",
  1019. oldComment: "Ȱ�� ����");
  1020. migrationBuilder.AlterColumn<string>(
  1021. name: "Handle",
  1022. table: "Channel",
  1023. type: "nvarchar(30)",
  1024. maxLength: 30,
  1025. nullable: true,
  1026. comment: "핸들",
  1027. oldClrType: typeof(string),
  1028. oldType: "nvarchar(30)",
  1029. oldMaxLength: 30,
  1030. oldNullable: true,
  1031. oldComment: "�ڵ�");
  1032. migrationBuilder.AlterColumn<DateTime>(
  1033. name: "CreatedAt",
  1034. table: "Channel",
  1035. type: "datetime2",
  1036. nullable: false,
  1037. comment: "등록 일시",
  1038. oldClrType: typeof(DateTime),
  1039. oldType: "datetime2",
  1040. oldComment: "��� �Ͻ�");
  1041. }
  1042. }
  1043. }