From 00bf9efb6f8875f5ec1c87757617863f96640a1a Mon Sep 17 00:00:00 2001
From: David Schimmel <schimmel@itc.rwth-aachen.de>
Date: Wed, 10 Jul 2019 10:36:54 +0200
Subject: [PATCH] Update: Added migration for user profiles
 (issues/coscine#156)

---
 .../Migration201907100900UserProfilesApi.cs   | 91 +++++++++++++++++++
 src/Migrator/Migrator.csproj                  |  1 +
 2 files changed, 92 insertions(+)
 create mode 100644 src/Migrator/Migrations/Migration201907100900UserProfilesApi.cs

diff --git a/src/Migrator/Migrations/Migration201907100900UserProfilesApi.cs b/src/Migrator/Migrations/Migration201907100900UserProfilesApi.cs
new file mode 100644
index 0000000..8deb1de
--- /dev/null
+++ b/src/Migrator/Migrations/Migration201907100900UserProfilesApi.cs
@@ -0,0 +1,91 @@
+using FluentMigrator;
+namespace Coscine.Database.Migration.Migrations
+{
+    //yyyymmddhhmm
+    [Migration(201907100900)]
+    public class Migration201907100900UserProfilesApi : FluentMigrator.Migration
+    {
+        public override void Down()
+        {
+            #region Foreign Keys
+            Delete.ForeignKey()
+                .FromTable("GroupMemberships").ForeignColumn("UserId")
+                .ToTable("Users").PrimaryColumn("Id");
+
+            Delete.ForeignKey()
+                .FromTable("GroupMemberships").ForeignColumn("GroupId")
+                .ToTable("Groups").PrimaryColumn("Id");
+
+            Delete.ForeignKey()
+                .FromTable("ExternalIds").ForeignColumn("UserId")
+                .ToTable("Users").PrimaryColumn("Id");
+
+            Delete.ForeignKey()
+                .FromTable("ExternalIds").ForeignColumn("ResourceTypeId")
+                .ToTable("ExternalAuthenticators").PrimaryColumn("Id");
+            #endregion
+
+            #region
+            Delete.Table("Groups");
+            Delete.Table("GroupMemberships");
+            Delete.Table("ExternalAuthenticators");
+            Delete.Table("ExternalIds");
+            #endregion
+
+            #region Columns
+            Delete.Column("EmailAddress").FromTable("Users");
+            Delete.Column("DisplayName").FromTable("Users");
+            #endregion
+        }
+
+        public override void Up()
+        {
+            #region Existing Tables
+            Alter.Table("Users")
+                .AddColumn("EmailAddress").AsString(255).NotNullable()
+                .AddColumn("DisplayName").AsString(255).NotNullable();
+            #endregion
+
+            #region Independent Tables
+            Create.Table("Groups")
+                .WithColumn("Id").AsGuid().PrimaryKey().WithDefault(SystemMethods.NewGuid)
+                .WithColumn("Name").AsString(255).NotNullable();
+
+            Create.Table("ExternalAuthenticators")
+                .WithColumn("Id").AsGuid().PrimaryKey().WithDefault(SystemMethods.NewGuid)
+                .WithColumn("Name").AsString(50).NotNullable();
+            #endregion
+
+            #region GroupMemberships
+            Create.Table("GroupMemberships")
+                .WithColumn("RelationId").AsGuid().PrimaryKey().WithDefault(SystemMethods.NewGuid)
+                .WithColumn("GroupId").AsGuid().NotNullable()
+                .WithColumn("UserId").AsGuid().NotNullable();
+
+            Create.ForeignKey()
+                .FromTable("GroupMemberships").ForeignColumn("UserId")
+                .ToTable("Users").PrimaryColumn("Id");
+
+            Create.ForeignKey()
+                .FromTable("GroupMemberships").ForeignColumn("GroupId")
+                .ToTable("Groups").PrimaryColumn("Id");
+            #endregion
+
+            #region ExternalIds
+            Create.Table("ExternalIds")
+                .WithColumn("RelationId").AsGuid().PrimaryKey().WithDefault(SystemMethods.NewGuid)
+                .WithColumn("UserId").AsGuid().NotNullable()
+                .WithColumn("ResourceTypeId").AsGuid().NotNullable()
+                .WithColumn("ExtrenalId").AsString(255);
+
+            Create.ForeignKey()
+                .FromTable("ExternalIds").ForeignColumn("UserId")
+                .ToTable("Users").PrimaryColumn("Id");
+
+            Create.ForeignKey()
+                .FromTable("ExternalIds").ForeignColumn("ResourceTypeId")
+                .ToTable("ExternalAuthenticators").PrimaryColumn("Id");
+            #endregion
+        }
+    }
+}
diff --git a/src/Migrator/Migrator.csproj b/src/Migrator/Migrator.csproj
index a710f0a..fc31a73 100644
--- a/src/Migrator/Migrator.csproj
+++ b/src/Migrator/Migrator.csproj
@@ -145,6 +145,7 @@
   <ItemGroup>
     <Compile Include="Migrations\Migration201907011352ProjectApi.cs" />
     <Compile Include="Migrations\Migration201907081510EnhanceProjectApi.cs" />
+    <Compile Include="Migrations\Migration201907100900UserProfilesApi.cs" />
     <Compile Include="Migrator.cs" />
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
-- 
GitLab