20260323135411_AddDonation.cs 49 KB

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