579 lines
28 KiB
C#
579 lines
28 KiB
C#
using System;
|
|
using Microsoft.EntityFrameworkCore.Migrations;
|
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|
|
|
#nullable disable
|
|
|
|
namespace UniVerse.Infrastructure.Data.Migrations
|
|
{
|
|
/// <inheritdoc />
|
|
public partial class Initial : Migration
|
|
{
|
|
/// <inheritdoc />
|
|
protected override void Up(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.AlterDatabase()
|
|
.Annotation("Npgsql:Enum:coin_transaction_type.coin_transaction_type", "review_reward,achievement_reward,attendance_reward,admin_adjustment")
|
|
.Annotation("Npgsql:Enum:review_llm_status.review_llm_status", "pending,analyzed,rejected")
|
|
.Annotation("Npgsql:Enum:review_sentiment.review_sentiment", "positive,neutral,negative")
|
|
.Annotation("Npgsql:Enum:tag_type.tag_type", "institute,faculty,subject,organization,topic,other")
|
|
.Annotation("Npgsql:Enum:user_role.user_role", "student,teacher,admin");
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "achievements",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
name = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
|
|
description = table.Column<string>(type: "text", nullable: true),
|
|
icon_url = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
|
xp_reward = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
|
|
coin_reward = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
|
|
condition = table.Column<string>(type: "text", nullable: true),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_achievements", x => x.id);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "courses",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
name = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: false),
|
|
description = table.Column<string>(type: "text", nullable: true),
|
|
external_id = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
is_synced = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()"),
|
|
updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_courses", x => x.id);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "locations",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
name = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
|
|
building = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
room = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: true),
|
|
address = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
|
external_id = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_locations", x => x.id);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "tags",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
name = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
|
|
type = table.Column<int>(type: "integer", nullable: false),
|
|
parent_id = table.Column<int>(type: "integer", nullable: true),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_tags", x => x.id);
|
|
table.ForeignKey(
|
|
name: "FK_tags_tags_parent_id",
|
|
column: x => x.parent_id,
|
|
principalTable: "tags",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.SetNull);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "users",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
email = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: false),
|
|
display_name = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
avatar_url = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
|
role = table.Column<int>(type: "integer", nullable: false),
|
|
is_active = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
|
|
microsoft_id = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
xp = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
|
|
coins = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()"),
|
|
updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_users", x => x.id);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "course_tags",
|
|
columns: table => new
|
|
{
|
|
course_id = table.Column<int>(type: "integer", nullable: false),
|
|
tag_id = table.Column<int>(type: "integer", nullable: false),
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_course_tags", x => new { x.course_id, x.tag_id });
|
|
table.ForeignKey(
|
|
name: "FK_course_tags_courses_course_id",
|
|
column: x => x.course_id,
|
|
principalTable: "courses",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
table.ForeignKey(
|
|
name: "FK_course_tags_tags_tag_id",
|
|
column: x => x.tag_id,
|
|
principalTable: "tags",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "lectures",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
course_id = table.Column<int>(type: "integer", nullable: false),
|
|
teacher_id = table.Column<int>(type: "integer", nullable: true),
|
|
location_id = table.Column<int>(type: "integer", nullable: true),
|
|
title = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: false),
|
|
description = table.Column<string>(type: "text", nullable: true),
|
|
format = table.Column<int>(type: "integer", nullable: false),
|
|
starts_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
|
ends_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
|
is_open = table.Column<bool>(type: "boolean", nullable: false, defaultValue: true),
|
|
max_enrollments = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
|
|
external_id = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
online_url = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()"),
|
|
updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_lectures", x => x.id);
|
|
table.ForeignKey(
|
|
name: "FK_lectures_courses_course_id",
|
|
column: x => x.course_id,
|
|
principalTable: "courses",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
table.ForeignKey(
|
|
name: "FK_lectures_locations_location_id",
|
|
column: x => x.location_id,
|
|
principalTable: "locations",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.SetNull);
|
|
table.ForeignKey(
|
|
name: "FK_lectures_users_teacher_id",
|
|
column: x => x.teacher_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.SetNull);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "refresh_tokens",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
user_id = table.Column<int>(type: "integer", nullable: false),
|
|
token = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: false),
|
|
expires_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()"),
|
|
revoked_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: true)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_refresh_tokens", x => x.id);
|
|
table.ForeignKey(
|
|
name: "FK_refresh_tokens_users_user_id",
|
|
column: x => x.user_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "student_profiles",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
user_id = table.Column<int>(type: "integer", nullable: false),
|
|
student_id = table.Column<string>(type: "character varying(50)", maxLength: 50, nullable: true),
|
|
group_name = table.Column<string>(type: "character varying(100)", maxLength: 100, nullable: true),
|
|
enrollment_year = table.Column<int>(type: "integer", nullable: true),
|
|
faculty = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
specialty = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_student_profiles", x => x.id);
|
|
table.ForeignKey(
|
|
name: "FK_student_profiles_users_user_id",
|
|
column: x => x.user_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "teacher_profiles",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
user_id = table.Column<int>(type: "integer", nullable: false),
|
|
department = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
title = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true),
|
|
bio = table.Column<string>(type: "text", nullable: true),
|
|
modeus_id = table.Column<string>(type: "character varying(255)", maxLength: 255, nullable: true)
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_teacher_profiles", x => x.id);
|
|
table.ForeignKey(
|
|
name: "FK_teacher_profiles_users_user_id",
|
|
column: x => x.user_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "user_achievements",
|
|
columns: table => new
|
|
{
|
|
user_id = table.Column<int>(type: "integer", nullable: false),
|
|
achievement_id = table.Column<int>(type: "integer", nullable: false),
|
|
id = table.Column<int>(type: "integer", nullable: false),
|
|
awarded_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_user_achievements", x => new { x.user_id, x.achievement_id });
|
|
table.ForeignKey(
|
|
name: "FK_user_achievements_achievements_achievement_id",
|
|
column: x => x.achievement_id,
|
|
principalTable: "achievements",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
table.ForeignKey(
|
|
name: "FK_user_achievements_users_user_id",
|
|
column: x => x.user_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "lecture_enrollments",
|
|
columns: table => new
|
|
{
|
|
lecture_id = table.Column<int>(type: "integer", nullable: false),
|
|
user_id = table.Column<int>(type: "integer", nullable: false),
|
|
id = table.Column<int>(type: "integer", nullable: false),
|
|
attended = table.Column<bool>(type: "boolean", nullable: false, defaultValue: false),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_lecture_enrollments", x => new { x.lecture_id, x.user_id });
|
|
table.ForeignKey(
|
|
name: "FK_lecture_enrollments_lectures_lecture_id",
|
|
column: x => x.lecture_id,
|
|
principalTable: "lectures",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
table.ForeignKey(
|
|
name: "FK_lecture_enrollments_users_user_id",
|
|
column: x => x.user_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "reviews",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
lecture_id = table.Column<int>(type: "integer", nullable: false),
|
|
user_id = table.Column<int>(type: "integer", nullable: false),
|
|
rating = table.Column<int>(type: "integer", nullable: false),
|
|
text = table.Column<string>(type: "text", nullable: true),
|
|
llm_status = table.Column<int>(type: "integer", nullable: false, defaultValue: 0),
|
|
sentiment = table.Column<int>(type: "integer", nullable: true),
|
|
quality_score = table.Column<double>(type: "double precision", nullable: true),
|
|
is_informative = table.Column<bool>(type: "boolean", nullable: true),
|
|
llm_tags = table.Column<string[]>(type: "text[]", nullable: true),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()"),
|
|
updated_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_reviews", x => x.id);
|
|
table.ForeignKey(
|
|
name: "FK_reviews_lectures_lecture_id",
|
|
column: x => x.lecture_id,
|
|
principalTable: "lectures",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
table.ForeignKey(
|
|
name: "FK_reviews_users_user_id",
|
|
column: x => x.user_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateTable(
|
|
name: "coin_transactions",
|
|
columns: table => new
|
|
{
|
|
id = table.Column<int>(type: "integer", nullable: false)
|
|
.Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
|
|
user_id = table.Column<int>(type: "integer", nullable: false),
|
|
amount = table.Column<int>(type: "integer", nullable: false),
|
|
type = table.Column<int>(type: "integer", nullable: false),
|
|
review_id = table.Column<int>(type: "integer", nullable: true),
|
|
achievement_id = table.Column<int>(type: "integer", nullable: true),
|
|
description = table.Column<string>(type: "character varying(500)", maxLength: 500, nullable: true),
|
|
created_at = table.Column<DateTime>(type: "timestamp with time zone", nullable: false, defaultValueSql: "NOW()")
|
|
},
|
|
constraints: table =>
|
|
{
|
|
table.PrimaryKey("PK_coin_transactions", x => x.id);
|
|
table.ForeignKey(
|
|
name: "FK_coin_transactions_achievements_achievement_id",
|
|
column: x => x.achievement_id,
|
|
principalTable: "achievements",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.SetNull);
|
|
table.ForeignKey(
|
|
name: "FK_coin_transactions_reviews_review_id",
|
|
column: x => x.review_id,
|
|
principalTable: "reviews",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.SetNull);
|
|
table.ForeignKey(
|
|
name: "FK_coin_transactions_users_user_id",
|
|
column: x => x.user_id,
|
|
principalTable: "users",
|
|
principalColumn: "id",
|
|
onDelete: ReferentialAction.Cascade);
|
|
});
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_coin_transactions_achievement_id",
|
|
table: "coin_transactions",
|
|
column: "achievement_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_coin_transactions_review_id",
|
|
table: "coin_transactions",
|
|
column: "review_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_coin_transactions_user_id",
|
|
table: "coin_transactions",
|
|
column: "user_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_course_tags_course_id_tag_id",
|
|
table: "course_tags",
|
|
columns: new[] { "course_id", "tag_id" },
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_course_tags_tag_id",
|
|
table: "course_tags",
|
|
column: "tag_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_courses_external_id",
|
|
table: "courses",
|
|
column: "external_id",
|
|
unique: true,
|
|
filter: "external_id IS NOT NULL");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_lecture_enrollments_lecture_id_user_id",
|
|
table: "lecture_enrollments",
|
|
columns: new[] { "lecture_id", "user_id" },
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_lecture_enrollments_user_id",
|
|
table: "lecture_enrollments",
|
|
column: "user_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_lectures_course_id",
|
|
table: "lectures",
|
|
column: "course_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_lectures_external_id",
|
|
table: "lectures",
|
|
column: "external_id",
|
|
unique: true,
|
|
filter: "external_id IS NOT NULL");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_lectures_location_id",
|
|
table: "lectures",
|
|
column: "location_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_lectures_starts_at",
|
|
table: "lectures",
|
|
column: "starts_at");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_lectures_teacher_id",
|
|
table: "lectures",
|
|
column: "teacher_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_locations_external_id",
|
|
table: "locations",
|
|
column: "external_id",
|
|
unique: true,
|
|
filter: "external_id IS NOT NULL");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_refresh_tokens_token",
|
|
table: "refresh_tokens",
|
|
column: "token",
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_refresh_tokens_user_id",
|
|
table: "refresh_tokens",
|
|
column: "user_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_reviews_lecture_id_user_id",
|
|
table: "reviews",
|
|
columns: new[] { "lecture_id", "user_id" },
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_reviews_llm_status",
|
|
table: "reviews",
|
|
column: "llm_status");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_reviews_user_id",
|
|
table: "reviews",
|
|
column: "user_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_student_profiles_user_id",
|
|
table: "student_profiles",
|
|
column: "user_id",
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_tags_parent_id",
|
|
table: "tags",
|
|
column: "parent_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_teacher_profiles_user_id",
|
|
table: "teacher_profiles",
|
|
column: "user_id",
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_user_achievements_achievement_id",
|
|
table: "user_achievements",
|
|
column: "achievement_id");
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_user_achievements_user_id_achievement_id",
|
|
table: "user_achievements",
|
|
columns: new[] { "user_id", "achievement_id" },
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_users_email",
|
|
table: "users",
|
|
column: "email",
|
|
unique: true);
|
|
|
|
migrationBuilder.CreateIndex(
|
|
name: "IX_users_microsoft_id",
|
|
table: "users",
|
|
column: "microsoft_id",
|
|
unique: true,
|
|
filter: "microsoft_id IS NOT NULL");
|
|
}
|
|
|
|
/// <inheritdoc />
|
|
protected override void Down(MigrationBuilder migrationBuilder)
|
|
{
|
|
migrationBuilder.DropTable(
|
|
name: "coin_transactions");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "course_tags");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "lecture_enrollments");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "refresh_tokens");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "student_profiles");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "teacher_profiles");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "user_achievements");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "reviews");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "tags");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "achievements");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "lectures");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "courses");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "locations");
|
|
|
|
migrationBuilder.DropTable(
|
|
name: "users");
|
|
}
|
|
}
|
|
}
|