about summary refs log tree commit diff
path: root/pkgs/servers/web-apps/kavita/restore-migrations.diff
blob: d158f503e329fd035eb8150bc455be38cf15177b (plain) (blame)
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
diff --git a/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs b/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs
new file mode 100644
index 00000000..0de7bf5d
--- /dev/null
+++ b/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs
@@ -0,0 +1,38 @@
+using System.Linq;
+using System.Threading.Tasks;
+using API.Entities.Enums;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Logging;
+
+namespace API.Data.ManualMigrations;
+
+/// <summary>
+/// v0.7.4 introduced Scrobbling with Kavita+. By default, it is on, but Comic libraries have no scrobble providers, so disable
+/// </summary>
+public static class MigrateDisableScrobblingOnComicLibraries
+{
+    public static async Task Migrate(IUnitOfWork unitOfWork, DataContext dataContext, ILogger<Program> logger)
+    {
+        if (!await dataContext.Library.Where(s => s.Type == LibraryType.Comic).Where(l => l.AllowScrobbling).AnyAsync())
+        {
+            return;
+        }
+        logger.LogInformation("Running MigrateDisableScrobblingOnComicLibraries migration. Please be patient, this may take some time");
+
+
+        foreach (var lib in await dataContext.Library.Where(s => s.Type == LibraryType.Comic).Where(l => l.AllowScrobbling).ToListAsync())
+        {
+            lib.AllowScrobbling = false;
+            unitOfWork.LibraryRepository.Update(lib);
+        }
+
+        if (unitOfWork.HasChanges())
+        {
+            await unitOfWork.CommitAsync();
+        }
+
+        logger.LogInformation("MigrateDisableScrobblingOnComicLibraries migration finished");
+
+    }
+
+}
diff --git a/API/Data/ManualMigrations/MigrateLoginRoles.cs b/API/Data/ManualMigrations/MigrateLoginRoles.cs
new file mode 100644
index 00000000..f649908a
--- /dev/null
+++ b/API/Data/ManualMigrations/MigrateLoginRoles.cs
@@ -0,0 +1,36 @@
+using System.Threading.Tasks;
+using API.Constants;
+using API.Entities;
+using Microsoft.AspNetCore.Identity;
+using Microsoft.Extensions.Logging;
+
+namespace API.Data.ManualMigrations;
+
+/// <summary>
+/// Added in v0.7.1.18
+/// </summary>
+public static class MigrateLoginRoles
+{
+    /// <summary>
+    /// Will not run if any users have the <see cref="PolicyConstants.LoginRole"/> role already
+    /// </summary>
+    /// <param name="unitOfWork"></param>
+    /// <param name="userManager"></param>
+    /// <param name="logger"></param>
+    public static async Task Migrate(IUnitOfWork unitOfWork, UserManager<AppUser> userManager, ILogger<Program> logger)
+    {
+        var usersWithRole = await userManager.GetUsersInRoleAsync(PolicyConstants.LoginRole);
+        if (usersWithRole.Count != 0) return;
+
+        logger.LogCritical("Running MigrateLoginRoles migration");
+
+        var allUsers = await unitOfWork.UserRepository.GetAllUsersAsync();
+        foreach (var user in allUsers)
+        {
+            await userManager.RemoveFromRoleAsync(user, PolicyConstants.LoginRole);
+            await userManager.AddToRoleAsync(user, PolicyConstants.LoginRole);
+        }
+
+        logger.LogInformation("MigrateLoginRoles migration complete");
+    }
+}
diff --git a/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs b/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs
new file mode 100644
index 00000000..07e98ef6
--- /dev/null
+++ b/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs
@@ -0,0 +1,31 @@
+using System.Threading.Tasks;
+using API.Entities.Enums;
+using Microsoft.Extensions.Logging;
+
+namespace API.Data.ManualMigrations;
+
+/// <summary>
+/// Added in v0.7.2.7/v0.7.3 in which the ConvertXToWebP Setting keys were removed. This migration will remove them.
+/// </summary>
+public static class MigrateRemoveWebPSettingRows
+{
+    public static async Task Migrate(IUnitOfWork unitOfWork, ILogger<Program> logger)
+    {
+        logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - Please be patient, this may take some time. This is not an error");
+
+        var key = await unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.ConvertBookmarkToWebP);
+        var key2 = await unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.ConvertCoverToWebP);
+        if (key == null && key2 == null)
+        {
+            logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - complete. Nothing to do");
+            return;
+        }
+
+        unitOfWork.SettingsRepository.Remove(key);
+        unitOfWork.SettingsRepository.Remove(key2);
+
+        await unitOfWork.CommitAsync();
+
+        logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - Completed. This is not an error");
+    }
+}
diff --git a/API/Startup.cs b/API/Startup.cs
index 21c4fa45..04f4a077 100644
--- a/API/Startup.cs
+++ b/API/Startup.cs
@@ -232,11 +232,19 @@ public class Startup
             Task.Run(async () =>
                 {
                     // Apply all migrations on startup
+                    var userManager = serviceProvider.GetRequiredService<UserManager<AppUser>>();
                     var dataContext = serviceProvider.GetRequiredService<DataContext>();
 
 
                     logger.LogInformation("Running Migrations");
 
+                    // v0.7.2
+                    await MigrateLoginRoles.Migrate(unitOfWork, userManager, logger);
+                    // v0.7.3
+                    await MigrateRemoveWebPSettingRows.Migrate(unitOfWork, logger);
+                    // v0.7.4
+                    await MigrateDisableScrobblingOnComicLibraries.Migrate(unitOfWork, dataContext, logger);
+
                     // v0.7.9
                     await MigrateUserLibrarySideNavStream.Migrate(unitOfWork, dataContext, logger);