aboutsummaryrefslogtreecommitdiff
path: root/Timeline/Migrations/20200131100517_RefactorUser.cs
blob: ade65eb1ba679b4680603c5f7e9111209facf23b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
using Microsoft.EntityFrameworkCore.Migrations;

namespace Timeline.Migrations.DevelopmentDatabase
{
    public partial class RefactorUser : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.RenameColumn(name: "name", table: "users", newName: "username");
            migrationBuilder.RenameIndex(name: "IX_users_name", table: "users", newName: "IX_users_username");

            migrationBuilder.AddColumn<string>(
                name: "nickname",
                table: "users",
                maxLength: 100,
                nullable: true);

            migrationBuilder.Sql(@"
UPDATE users 
    SET nickname = (
        SELECT nickname
        FROM user_details
        WHERE user_details.UserId = users.id
    );
            ");

            /*
            migrationBuilder.RenameColumn(name: "UserId", table: "user_avatars", newName: "user");

            migrationBuilder.DropForeignKey(
                name: "FK_user_avatars_users_UserId",
                table: "user_avatars");

            migrationBuilder.AddForeignKey(
                name: "FK_user_avatars_users_user",
                table: "user_avatars",
                column: "user",
                principalTable: "users",
                principalColumn: "id",
                onDelete: ReferentialAction.Cascade);

             migrationBuilder.RenameIndex(
                name: "IX_user_avatars_UserId",
                table: "user_avatars",
                newName: "IX_user_avatars_user");
             */

            migrationBuilder.Sql(@"
CREATE TABLE user_avatars_backup (
    id            INTEGER NOT NULL
                          CONSTRAINT PK_user_avatars PRIMARY KEY AUTOINCREMENT,
    data          BLOB,
    type          TEXT,
    etag          TEXT,
    last_modified TEXT    NOT NULL,
    user          INTEGER NOT NULL,
    CONSTRAINT FK_user_avatars_users_user FOREIGN KEY (
        user
    )
    REFERENCES users (id) ON DELETE CASCADE
);

INSERT INTO user_avatars_backup (id, data, type, etag, last_modified, user)
    SELECT id, data, type, etag, last_modified, UserId FROM user_avatars;

DROP TABLE user_avatars;

ALTER TABLE user_avatars_backup
    RENAME TO user_avatars;

CREATE UNIQUE INDEX IX_user_avatars_user ON user_avatars (user);
            ");

            // migrationBuilder.DropTable(name: "user_details");

        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.Sql(@"
CREATE TABLE user_avatars_backup (
    id            INTEGER NOT NULL
                          CONSTRAINT PK_user_avatars PRIMARY KEY AUTOINCREMENT,
    data          BLOB,
    type          TEXT,
    etag          TEXT,
    last_modified TEXT    NOT NULL,
    UserId        INTEGER NOT NULL,
    CONSTRAINT FK_user_avatars_users_UserId FOREIGN KEY (
        user
    )
    REFERENCES users (id) ON DELETE CASCADE
);

INSERT INTO user_avatars_backup (id, data, type, etag, last_modified, UserId)
    SELECT id, data, type, etag, last_modified, user FROM user_avatars;

DROP TABLE user_avatars;

ALTER TABLE user_avatars_backup
    RENAME TO user_avatars;

CREATE UNIQUE INDEX IX_user_avatars_UserId ON user_avatars (UserId);
            ");

            migrationBuilder.Sql(@"
CREATE TABLE users_backup (
    id       INTEGER NOT NULL
                     CONSTRAINT PK_users PRIMARY KEY AUTOINCREMENT,
    name     TEXT    NOT NULL,
    password TEXT    NOT NULL,
    roles    TEXT    NOT NULL,
    version  INTEGER NOT NULL
                     DEFAULT 0
);

INSERT INTO users_backup (id, name, password, roles, version)
    SELECT id, username, password, roles, version FROM users;

DROP TABLE users;

ALTER TABLE users_backup
    RENAME TO users;

CREATE UNIQUE INDEX IX_users_name ON users (name);
            ");
        }
    }
}