diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 17c18e75f4..b3a1768d3d 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -39,7 +39,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
- dotnet-version: '6.0.x'
+ dotnet-version: '8.0.x'
- name: Nuget Cache
uses: actions/cache@v2
@@ -84,10 +84,10 @@ jobs:
strategy:
matrix:
include:
- - os: win10-x64
+ - os: win-x64
format: zip
compression: zip
- - os: win10-x86
+ - os: win-x86
format: zip
compression: zip
- os: linux-x64
@@ -106,7 +106,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
- dotnet-version: '6.0.x'
+ dotnet-version: '8.0.x'
- uses: actions/setup-dotnet@v1
with:
dotnet-version: '5.0.x'
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 8c870059c7..b670023618 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -37,7 +37,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v1
+ uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
@@ -48,7 +48,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
- uses: github/codeql-action/autobuild@v1
+ uses: github/codeql-action/autobuild@v3
# ℹ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@@ -62,4 +62,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v1
+ uses: github/codeql-action/analyze@v3
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index c4c7d803c6..ea65cfaa6f 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -38,7 +38,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
- dotnet-version: '6.0.x'
+ dotnet-version: '8.0.x'
- name: Nuget Cache
uses: actions/cache@v2
@@ -76,10 +76,10 @@ jobs:
strategy:
matrix:
include:
- - os: win10-x64
+ - os: win-x64
format: zip
compression: zip
- - os: win10-x86
+ - os: win-x86
format: zip
compression: zip
- os: linux-x64
@@ -98,7 +98,7 @@ jobs:
- uses: actions/checkout@v2
- uses: actions/setup-dotnet@v1
with:
- dotnet-version: '6.0.x'
+ dotnet-version: '8.0.x'
- name: Nuget Cache
uses: actions/cache@v2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 561f36b193..31e2628537 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,29 @@
+# [4.44.0](https://github.com/Ombi-app/Ombi/compare/v4.43.22...v4.44.0) (2024-07-11)
+
+
+### Features
+
+* Adding postgres support to ombi (beta) ([#5050](https://github.com/Ombi-app/Ombi/issues/5050)) ([f8c6102](https://github.com/Ombi-app/Ombi/commit/f8c61027bf53d657d7955a98b69d7ab90b66a75a))
+
+
+
+## [4.43.22](https://github.com/Ombi-app/Ombi/compare/v4.43.21...v4.43.22) (2024-07-08)
+
+
+
+## [4.43.21](https://github.com/Ombi-app/Ombi/compare/v4.43.20...v4.43.21) (2024-06-26)
+
+
+
+## [4.43.20](https://github.com/Ombi-app/Ombi/compare/v4.43.16...v4.43.20) (2024-05-14)
+
+
+### Bug Fixes
+
+* upgrade multiple dependencies with Snyk ([#5104](https://github.com/Ombi-app/Ombi/issues/5104)) [skip ci] ([a1083f6](https://github.com/Ombi-app/Ombi/commit/a1083f67c73c968b9ff0a0feebe5a9aac6a7c7c9))
+
+
+
## [4.43.16](https://github.com/Ombi-app/Ombi/compare/v4.43.15...v4.43.16) (2024-04-01)
@@ -1839,40 +1865,3 @@
-## [4.35.18](https://github.com/Ombi-app/Ombi/compare/v4.35.17...v4.35.18) (2023-04-15)
-
-
-### Bug Fixes
-
-* **#4906:** :bug: Fixed an issue with power users and permissions ([80884bc](https://github.com/Ombi-app/Ombi/commit/80884bcd725c329867c278ad235cd4096cd4fe7a))
-
-
-
-## [4.35.17](https://github.com/Ombi-app/Ombi/compare/v4.35.16...v4.35.17) (2023-04-15)
-
-
-### Bug Fixes
-
-* **discover:** Fix denied requests displayed as approved ([#4901](https://github.com/Ombi-app/Ombi/issues/4901)) ([1e87f20](https://github.com/Ombi-app/Ombi/commit/1e87f2010491b0f3fdda70d2b19d9afd94438df7))
-* Fix denied movie shown as 'processing request' in details view ([#4900](https://github.com/Ombi-app/Ombi/issues/4900)) ([0069bfd](https://github.com/Ombi-app/Ombi/commit/0069bfdf54e0785bad45c832ca052f19fd4b940b))
-
-
-
-## [4.35.16](https://github.com/Ombi-app/Ombi/compare/v4.35.15...v4.35.16) (2023-04-13)
-
-
-### Bug Fixes
-
-* Support duplicates in Emby/JF collections ([#4902](https://github.com/Ombi-app/Ombi/issues/4902)) ([141f96d](https://github.com/Ombi-app/Ombi/commit/141f96da5e45d5b3fa5f496806b102e473da6607))
-
-
-
-## [4.35.15](https://github.com/Ombi-app/Ombi/compare/v4.35.14...v4.35.15) (2023-04-06)
-
-
-### Bug Fixes
-
-* **sonarr:** :bug: Stop the sonarr version endpoint from breaking when Sonarr is down [#4895](https://github.com/Ombi-app/Ombi/issues/4895) ([7bb8bec](https://github.com/Ombi-app/Ombi/commit/7bb8becfb140ef6012356752a71d53b5b404e482))
-
-
-
diff --git a/README.md b/README.md
index a8d056cd9b..e9dc7e0be5 100644
--- a/README.md
+++ b/README.md
@@ -407,21 +407,14 @@ Here are some of the features Ombi has:
Andrew Metzger
-
-
-
-
- Torkil
-
- |
-
Tom McClellan
- |
+
+
@@ -456,15 +449,15 @@ Here are some of the features Ombi has:
Sean Callinan
- |
-
+
Samuel Bartík
- |
+
+
@@ -499,15 +492,15 @@ Here are some of the features Ombi has:
Micky
- |
-
+
Maxence Lecanu
- |
+
+
@@ -522,6 +515,20 @@ Here are some of the features Ombi has:
Marley
|
+
+
+
+
+ Madeleine Schönemann
+
+ |
+
+
+
+
+ Lucane
+
+ |
@@ -535,15 +542,15 @@ Here are some of the features Ombi has:
Mike
- |
+
+
Tdorsey
- |
-
+
@@ -578,15 +585,15 @@ Here are some of the features Ombi has:
Maartenheebink
- |
+
+
M4tta
- |
-
+
@@ -621,15 +628,15 @@ Here are some of the features Ombi has:
Blake Drumm
- |
+
+
Tim OBrien
- |
-
+
@@ -645,17 +652,17 @@ Here are some of the features Ombi has:
|
-
-
+
+
- Madeleine Schönemann
+ Torkil
|
-
-
+
+
- Eli
+ Drew
|
@@ -664,15 +671,15 @@ Here are some of the features Ombi has:
Devin Buhl
- |
+
+
David Torosyan
- |
-
+
@@ -680,6 +687,13 @@ Here are some of the features Ombi has:
David
|
+
+
+
+
+ David Benson
+
+ |
@@ -700,7 +714,8 @@ Here are some of the features Ombi has:
Christopher Demicoli
- |
+
+
@@ -714,8 +729,7 @@ Here are some of the features Ombi has:
Calvin
- |
-
+
@@ -743,7 +757,8 @@ Here are some of the features Ombi has:
Aljosa Asanovic
- |
+
+
@@ -757,8 +772,7 @@ Here are some of the features Ombi has:
Alexander Russell
- |
-
+
@@ -766,13 +780,6 @@ Here are some of the features Ombi has:
Abe Kline
|
-
-
-
-
- Lucane
-
- |
@@ -793,15 +800,15 @@ Here are some of the features Ombi has:
Kris Klosterman
- |
+
+
Jono Cairns
- |
-
+
@@ -809,6 +816,13 @@ Here are some of the features Ombi has:
Jon Bloom
|
+
+
+
+
+ Joel Samson
+
+ |
@@ -829,7 +843,8 @@ Here are some of the features Ombi has:
James White
- |
+
+
@@ -843,8 +858,7 @@ Here are some of the features Ombi has:
Imgbot
- |
-
+
@@ -872,13 +886,21 @@ Here are some of the features Ombi has:
Grygon
- |
+
+
Fish2
+ |
+
+
+
+
+ Eli
+
|
diff --git a/src/Ombi.Api.CloudService/Ombi.Api.CloudService.csproj b/src/Ombi.Api.CloudService/Ombi.Api.CloudService.csproj
index 5939549de6..a0a4edab3e 100644
--- a/src/Ombi.Api.CloudService/Ombi.Api.CloudService.csproj
+++ b/src/Ombi.Api.CloudService/Ombi.Api.CloudService.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.CouchPotato/Ombi.Api.CouchPotato.csproj b/src/Ombi.Api.CouchPotato/Ombi.Api.CouchPotato.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.CouchPotato/Ombi.Api.CouchPotato.csproj
+++ b/src/Ombi.Api.CouchPotato/Ombi.Api.CouchPotato.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Discord/Ombi.Api.Discord.csproj b/src/Ombi.Api.Discord/Ombi.Api.Discord.csproj
index 70032d638a..ea91cee483 100644
--- a/src/Ombi.Api.Discord/Ombi.Api.Discord.csproj
+++ b/src/Ombi.Api.Discord/Ombi.Api.Discord.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.DogNzb/Ombi.Api.DogNzb.csproj b/src/Ombi.Api.DogNzb/Ombi.Api.DogNzb.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.DogNzb/Ombi.Api.DogNzb.csproj
+++ b/src/Ombi.Api.DogNzb/Ombi.Api.DogNzb.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Emby/Ombi.Api.Emby.csproj b/src/Ombi.Api.Emby/Ombi.Api.Emby.csproj
index f60971192c..6578445f9b 100644
--- a/src/Ombi.Api.Emby/Ombi.Api.Emby.csproj
+++ b/src/Ombi.Api.Emby/Ombi.Api.Emby.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.FanartTv/Ombi.Api.FanartTv.csproj b/src/Ombi.Api.FanartTv/Ombi.Api.FanartTv.csproj
index 70032d638a..ea91cee483 100644
--- a/src/Ombi.Api.FanartTv/Ombi.Api.FanartTv.csproj
+++ b/src/Ombi.Api.FanartTv/Ombi.Api.FanartTv.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Github/Ombi.Api.Github.csproj b/src/Ombi.Api.Github/Ombi.Api.Github.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.Github/Ombi.Api.Github.csproj
+++ b/src/Ombi.Api.Github/Ombi.Api.Github.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Gotify/Ombi.Api.Gotify.csproj b/src/Ombi.Api.Gotify/Ombi.Api.Gotify.csproj
index be32916f89..bb37e21565 100644
--- a/src/Ombi.Api.Gotify/Ombi.Api.Gotify.csproj
+++ b/src/Ombi.Api.Gotify/Ombi.Api.Gotify.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.GroupMe/Ombi.Api.GroupMe.csproj b/src/Ombi.Api.GroupMe/Ombi.Api.GroupMe.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.GroupMe/Ombi.Api.GroupMe.csproj
+++ b/src/Ombi.Api.GroupMe/Ombi.Api.GroupMe.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Jellyfin/Ombi.Api.Jellyfin.csproj b/src/Ombi.Api.Jellyfin/Ombi.Api.Jellyfin.csproj
index 0c745556ea..b338f214f6 100644
--- a/src/Ombi.Api.Jellyfin/Ombi.Api.Jellyfin.csproj
+++ b/src/Ombi.Api.Jellyfin/Ombi.Api.Jellyfin.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj b/src/Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj
+++ b/src/Ombi.Api.Lidarr/Ombi.Api.Lidarr.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj b/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj
index 2dd241a245..8b01997b32 100644
--- a/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj
+++ b/src/Ombi.Api.Mattermost/Ombi.Api.Mattermost.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.MediaServer/Ombi.Api.MediaServer.csproj b/src/Ombi.Api.MediaServer/Ombi.Api.MediaServer.csproj
index a1b98b7654..adac0e42b2 100644
--- a/src/Ombi.Api.MediaServer/Ombi.Api.MediaServer.csproj
+++ b/src/Ombi.Api.MediaServer/Ombi.Api.MediaServer.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.MusicBrainz/Ombi.Api.MusicBrainz.csproj b/src/Ombi.Api.MusicBrainz/Ombi.Api.MusicBrainz.csproj
index 1a6497ceb4..4a5eb42a07 100644
--- a/src/Ombi.Api.MusicBrainz/Ombi.Api.MusicBrainz.csproj
+++ b/src/Ombi.Api.MusicBrainz/Ombi.Api.MusicBrainz.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj b/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj
index 029acb3c5f..5fa7050c02 100644
--- a/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj
+++ b/src/Ombi.Api.Notifications/Ombi.Api.Notifications.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Plex/Ombi.Api.Plex.csproj b/src/Ombi.Api.Plex/Ombi.Api.Plex.csproj
index 70032d638a..ea91cee483 100644
--- a/src/Ombi.Api.Plex/Ombi.Api.Plex.csproj
+++ b/src/Ombi.Api.Plex/Ombi.Api.Plex.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Pushbullet/Ombi.Api.Pushbullet.csproj b/src/Ombi.Api.Pushbullet/Ombi.Api.Pushbullet.csproj
index 70032d638a..ea91cee483 100644
--- a/src/Ombi.Api.Pushbullet/Ombi.Api.Pushbullet.csproj
+++ b/src/Ombi.Api.Pushbullet/Ombi.Api.Pushbullet.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Pushover/Ombi.Api.Pushover.csproj b/src/Ombi.Api.Pushover/Ombi.Api.Pushover.csproj
index be32916f89..bb37e21565 100644
--- a/src/Ombi.Api.Pushover/Ombi.Api.Pushover.csproj
+++ b/src/Ombi.Api.Pushover/Ombi.Api.Pushover.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj b/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
index 97d0cb959a..d3ab9b35b8 100644
--- a/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
+++ b/src/Ombi.Api.Radarr/Ombi.Api.Radarr.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
@@ -11,7 +11,7 @@
-
+
diff --git a/src/Ombi.Api.RottenTomatoes/Ombi.Api.RottenTomatoes.csproj b/src/Ombi.Api.RottenTomatoes/Ombi.Api.RottenTomatoes.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.RottenTomatoes/Ombi.Api.RottenTomatoes.csproj
+++ b/src/Ombi.Api.RottenTomatoes/Ombi.Api.RottenTomatoes.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Service/Ombi.Api.Service.csproj b/src/Ombi.Api.Service/Ombi.Api.Service.csproj
index 38bcd678af..ebe80cda4b 100644
--- a/src/Ombi.Api.Service/Ombi.Api.Service.csproj
+++ b/src/Ombi.Api.Service/Ombi.Api.Service.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
@@ -13,7 +13,7 @@
-
+
diff --git a/src/Ombi.Api.SickRage/Ombi.Api.SickRage.csproj b/src/Ombi.Api.SickRage/Ombi.Api.SickRage.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.SickRage/Ombi.Api.SickRage.csproj
+++ b/src/Ombi.Api.SickRage/Ombi.Api.SickRage.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Slack/Ombi.Api.Slack.csproj b/src/Ombi.Api.Slack/Ombi.Api.Slack.csproj
index 70032d638a..ea91cee483 100644
--- a/src/Ombi.Api.Slack/Ombi.Api.Slack.csproj
+++ b/src/Ombi.Api.Slack/Ombi.Api.Slack.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Sonarr/Ombi.Api.Sonarr.csproj b/src/Ombi.Api.Sonarr/Ombi.Api.Sonarr.csproj
index 70032d638a..ea91cee483 100644
--- a/src/Ombi.Api.Sonarr/Ombi.Api.Sonarr.csproj
+++ b/src/Ombi.Api.Sonarr/Ombi.Api.Sonarr.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Telegram/Ombi.Api.Telegram.csproj b/src/Ombi.Api.Telegram/Ombi.Api.Telegram.csproj
index 89c47d2513..9d0efbe775 100644
--- a/src/Ombi.Api.Telegram/Ombi.Api.Telegram.csproj
+++ b/src/Ombi.Api.Telegram/Ombi.Api.Telegram.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Trakt/Ombi.Api.Trakt.csproj b/src/Ombi.Api.Trakt/Ombi.Api.Trakt.csproj
index fd9632e56a..d485b038a1 100644
--- a/src/Ombi.Api.Trakt/Ombi.Api.Trakt.csproj
+++ b/src/Ombi.Api.Trakt/Ombi.Api.Trakt.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.TvMaze/Ombi.Api.TvMaze.csproj b/src/Ombi.Api.TvMaze/Ombi.Api.TvMaze.csproj
index a1b98b7654..adac0e42b2 100644
--- a/src/Ombi.Api.TvMaze/Ombi.Api.TvMaze.csproj
+++ b/src/Ombi.Api.TvMaze/Ombi.Api.TvMaze.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api.Twilio/Ombi.Api.Twilio.csproj b/src/Ombi.Api.Twilio/Ombi.Api.Twilio.csproj
index 2b4bb3d8df..26a440276b 100644
--- a/src/Ombi.Api.Twilio/Ombi.Api.Twilio.csproj
+++ b/src/Ombi.Api.Twilio/Ombi.Api.Twilio.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Api.Webhook/Ombi.Api.Webhook.csproj b/src/Ombi.Api.Webhook/Ombi.Api.Webhook.csproj
index 7748aad45c..b9b0dd347e 100644
--- a/src/Ombi.Api.Webhook/Ombi.Api.Webhook.csproj
+++ b/src/Ombi.Api.Webhook/Ombi.Api.Webhook.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Api/Ombi.Api.csproj b/src/Ombi.Api/Ombi.Api.csproj
index ab0d14b5ec..2b1148b223 100644
--- a/src/Ombi.Api/Ombi.Api.csproj
+++ b/src/Ombi.Api/Ombi.Api.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/src/Ombi.Core.Tests/Engine/MovieRequestLimitsTests.cs b/src/Ombi.Core.Tests/Engine/MovieRequestLimitsTests.cs
index 5bb4c69cbc..538aca7a4f 100644
--- a/src/Ombi.Core.Tests/Engine/MovieRequestLimitsTests.cs
+++ b/src/Ombi.Core.Tests/Engine/MovieRequestLimitsTests.cs
@@ -300,13 +300,13 @@ public async Task UserPassedIn_MovieLimit_Set_Limit_Daily_AllRequestsToday()
{
UserId = "id1",
RequestType = RequestType.Movie,
- RequestDate = today.AddHours(-1),
+ RequestDate = today.AddMinutes(-1),
},
new RequestLog
{
UserId = "id1",
RequestType = RequestType.Movie,
- RequestDate = today.AddHours(-2),
+ RequestDate = today.AddMinutes(-2),
},
};
var repoMock = _mocker.GetMock>();
diff --git a/src/Ombi.Core.Tests/Engine/MusicRequestLimitTests.cs b/src/Ombi.Core.Tests/Engine/MusicRequestLimitTests.cs
index 477ab7502b..544a76a552 100644
--- a/src/Ombi.Core.Tests/Engine/MusicRequestLimitTests.cs
+++ b/src/Ombi.Core.Tests/Engine/MusicRequestLimitTests.cs
@@ -298,13 +298,13 @@ public async Task UserPassedIn_MusicLimit_Set_Limit_Daily_AllRequestsToday()
{
UserId = "id1",
RequestType = RequestType.Album,
- RequestDate = today.AddHours(-1),
+ RequestDate = today.AddMinutes(-1),
},
new RequestLog
{
UserId = "id1",
RequestType = RequestType.Album,
- RequestDate = today.AddHours(-2),
+ RequestDate = today.AddMinutes(-2),
},
};
var repoMock = _mocker.GetMock>();
diff --git a/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs b/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs
index 2012519608..5cfd322f44 100644
--- a/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs
+++ b/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs
@@ -304,7 +304,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Daily_AllRequestsToday()
{
UserId = "id1",
RequestType = RequestType.TvShow,
- RequestDate = today.AddHours(-1),
+ RequestDate = today.AddMinutes(-1),
EpisodeCount = 1,
},
new RequestLog
@@ -312,7 +312,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Daily_AllRequestsToday()
UserId = "id1",
RequestType = RequestType.TvShow,
EpisodeCount = 1,
- RequestDate = today.AddHours(-2),
+ RequestDate = today.AddMinutes(-2),
},
};
var repoMock = _mocker.GetMock>();
@@ -345,7 +345,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Daily_MultipleEpisodeRequests()
{
UserId = "id1",
RequestType = RequestType.TvShow,
- RequestDate = today.AddHours(-1),
+ RequestDate = today.AddMinutes(-1),
EpisodeCount = 5,
},
new RequestLog
@@ -353,7 +353,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Daily_MultipleEpisodeRequests()
UserId = "id1",
RequestType = RequestType.TvShow,
EpisodeCount = 4,
- RequestDate = today.AddHours(-2),
+ RequestDate = today.AddMinutes(-2),
},
};
var repoMock = _mocker.GetMock>();
diff --git a/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj b/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
index aff0294a52..f63762bd42 100644
--- a/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
+++ b/src/Ombi.Core.Tests/Ombi.Core.Tests.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
true
true
Debug;Release;NonUiBuild
@@ -9,7 +9,7 @@
-
+
diff --git a/src/Ombi.Core/Ombi.Core.csproj b/src/Ombi.Core/Ombi.Core.csproj
index e4826d3c9b..7f15da6dbb 100644
--- a/src/Ombi.Core/Ombi.Core.csproj
+++ b/src/Ombi.Core/Ombi.Core.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
@@ -13,8 +13,8 @@
-
-
+
+
diff --git a/src/Ombi.DependencyInjection/Ombi.DependencyInjection.csproj b/src/Ombi.DependencyInjection/Ombi.DependencyInjection.csproj
index da17631a6b..4df8707856 100644
--- a/src/Ombi.DependencyInjection/Ombi.DependencyInjection.csproj
+++ b/src/Ombi.DependencyInjection/Ombi.DependencyInjection.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
@@ -11,9 +11,9 @@
-
-
-
+
+
+
diff --git a/src/Ombi.HealthChecks/Ombi.HealthChecks.csproj b/src/Ombi.HealthChecks/Ombi.HealthChecks.csproj
index e779fe0c74..4a9148a50b 100644
--- a/src/Ombi.HealthChecks/Ombi.HealthChecks.csproj
+++ b/src/Ombi.HealthChecks/Ombi.HealthChecks.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
Debug;Release;NonUiBuild
diff --git a/src/Ombi.Helpers.Tests/Ombi.Helpers.Tests.csproj b/src/Ombi.Helpers.Tests/Ombi.Helpers.Tests.csproj
index 1ade8ef1c6..85a5ca2d48 100644
--- a/src/Ombi.Helpers.Tests/Ombi.Helpers.Tests.csproj
+++ b/src/Ombi.Helpers.Tests/Ombi.Helpers.Tests.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
false
@@ -10,7 +10,7 @@
-
+
diff --git a/src/Ombi.Helpers/Ombi.Helpers.csproj b/src/Ombi.Helpers/Ombi.Helpers.csproj
index f7cbc95a8c..e8ed983a84 100644
--- a/src/Ombi.Helpers/Ombi.Helpers.csproj
+++ b/src/Ombi.Helpers/Ombi.Helpers.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
@@ -13,8 +13,8 @@
-
-
+
+
diff --git a/src/Ombi.Hubs/Ombi.Hubs.csproj b/src/Ombi.Hubs/Ombi.Hubs.csproj
index f8f03b5d06..075612bff5 100644
--- a/src/Ombi.Hubs/Ombi.Hubs.csproj
+++ b/src/Ombi.Hubs/Ombi.Hubs.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
latest
Debug;Release;NonUiBuild
diff --git a/src/Ombi.I18n/Ombi.I18n.csproj b/src/Ombi.I18n/Ombi.I18n.csproj
index a3387cdeae..48f4229a42 100644
--- a/src/Ombi.I18n/Ombi.I18n.csproj
+++ b/src/Ombi.I18n/Ombi.I18n.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Mapping/Ombi.Mapping.csproj b/src/Ombi.Mapping/Ombi.Mapping.csproj
index 8f120cc6b2..7b6338274c 100644
--- a/src/Ombi.Mapping/Ombi.Mapping.csproj
+++ b/src/Ombi.Mapping/Ombi.Mapping.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Notifications.Templates/Ombi.Notifications.Templates.csproj b/src/Ombi.Notifications.Templates/Ombi.Notifications.Templates.csproj
index 99e7509b47..c447167a0e 100644
--- a/src/Ombi.Notifications.Templates/Ombi.Notifications.Templates.csproj
+++ b/src/Ombi.Notifications.Templates/Ombi.Notifications.Templates.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Notifications.Tests/Ombi.Notifications.Tests.csproj b/src/Ombi.Notifications.Tests/Ombi.Notifications.Tests.csproj
index f7afeb6103..5f002cfd20 100644
--- a/src/Ombi.Notifications.Tests/Ombi.Notifications.Tests.csproj
+++ b/src/Ombi.Notifications.Tests/Ombi.Notifications.Tests.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
Debug;Release;NonUiBuild
@@ -10,7 +10,7 @@
-
+
diff --git a/src/Ombi.Notifications/Ombi.Notifications.csproj b/src/Ombi.Notifications/Ombi.Notifications.csproj
index 0f074463d4..f022a838ca 100644
--- a/src/Ombi.Notifications/Ombi.Notifications.csproj
+++ b/src/Ombi.Notifications/Ombi.Notifications.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs b/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs
index dbba08d21f..8d37524e9f 100644
--- a/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs
+++ b/src/Ombi.Schedule.Tests/IssuesPurgeTests.cs
@@ -91,12 +91,12 @@ public async Task DoesNot_Delete_AnyIssues()
new Issues
{
Status = IssueStatus.Resolved,
- ResovledDate = DateTime.Now.AddDays(-2)
+ ResovledDate = DateTime.UtcNow.AddDays(-2)
},
new Issues
{
Status = IssueStatus.Resolved,
- ResovledDate = DateTime.Now.AddDays(-4)
+ ResovledDate = DateTime.UtcNow.AddDays(-4)
}
};
diff --git a/src/Ombi.Schedule.Tests/Ombi.Schedule.Tests.csproj b/src/Ombi.Schedule.Tests/Ombi.Schedule.Tests.csproj
index c483cb321f..97c9994971 100644
--- a/src/Ombi.Schedule.Tests/Ombi.Schedule.Tests.csproj
+++ b/src/Ombi.Schedule.Tests/Ombi.Schedule.Tests.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
Debug;Release;NonUiBuild
@@ -10,7 +10,7 @@
-
+
diff --git a/src/Ombi.Schedule/Ombi.Schedule.csproj b/src/Ombi.Schedule/Ombi.Schedule.csproj
index ff7077ee1b..433e93faea 100644
--- a/src/Ombi.Schedule/Ombi.Schedule.csproj
+++ b/src/Ombi.Schedule/Ombi.Schedule.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
diff --git a/src/Ombi.Settings.Tests/Ombi.Settings.Tests.csproj b/src/Ombi.Settings.Tests/Ombi.Settings.Tests.csproj
index f36894a892..714c69f2ef 100644
--- a/src/Ombi.Settings.Tests/Ombi.Settings.Tests.csproj
+++ b/src/Ombi.Settings.Tests/Ombi.Settings.Tests.csproj
@@ -1,6 +1,7 @@
- net6.0
+
+ net8.0
false
@@ -10,7 +11,7 @@
-
+
diff --git a/src/Ombi.Settings/Ombi.Settings.csproj b/src/Ombi.Settings/Ombi.Settings.csproj
index 4849417bc9..7427a43ef4 100644
--- a/src/Ombi.Settings/Ombi.Settings.csproj
+++ b/src/Ombi.Settings/Ombi.Settings.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
3.0.0.0
3.0.0.0
@@ -11,7 +11,7 @@
-
+
diff --git a/src/Ombi.Store/Context/Postgres/ExternalPostgresContext.cs b/src/Ombi.Store/Context/Postgres/ExternalPostgresContext.cs
new file mode 100644
index 0000000000..1b106604b9
--- /dev/null
+++ b/src/Ombi.Store/Context/Postgres/ExternalPostgresContext.cs
@@ -0,0 +1,16 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace Ombi.Store.Context.Postgres
+{
+ public sealed class ExternalPostgresContext : ExternalContext
+ {
+ private static bool _created;
+ public ExternalPostgresContext(DbContextOptions options) : base(options)
+ {
+ if (_created) return;
+
+ _created = true;
+ Database.Migrate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Store/Context/Postgres/OmbiPostgresContext.cs b/src/Ombi.Store/Context/Postgres/OmbiPostgresContext.cs
new file mode 100644
index 0000000000..a2b44180fd
--- /dev/null
+++ b/src/Ombi.Store/Context/Postgres/OmbiPostgresContext.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace Ombi.Store.Context.Postgres
+{
+ public sealed class OmbiPostgresContext : OmbiContext
+ {
+ private static bool _created;
+
+ public OmbiPostgresContext(DbContextOptions options) : base(options)
+ {
+ if (_created) return;
+ _created = true;
+
+ Database.Migrate();
+ }
+
+ public override void Dispose()
+ {
+ base.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Store/Context/Postgres/PostgresModuleInitializer.cs b/src/Ombi.Store/Context/Postgres/PostgresModuleInitializer.cs
new file mode 100644
index 0000000000..8fdab7cf3a
--- /dev/null
+++ b/src/Ombi.Store/Context/Postgres/PostgresModuleInitializer.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Runtime.CompilerServices;
+
+namespace Ombi.Store.Context.Postgres;
+
+public static class PostgresModuleInitializer
+{
+#pragma warning disable CA2255
+ // This is required to ensure that Npgsql uses a timestamp behavior that does not require a timezone
+ // Reference: https://stackoverflow.com/a/73586129
+ [ModuleInitializer]
+#pragma warning restore CA2255
+ public static void Initialize()
+ {
+ AppContext.SetSwitch("Npgsql.EnableLegacyTimestampBehavior", true);
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Store/Context/Postgres/SettingsPostgresContext.cs b/src/Ombi.Store/Context/Postgres/SettingsPostgresContext.cs
new file mode 100644
index 0000000000..d8f343e46a
--- /dev/null
+++ b/src/Ombi.Store/Context/Postgres/SettingsPostgresContext.cs
@@ -0,0 +1,16 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace Ombi.Store.Context.Postgres
+{
+ public sealed class SettingsPostgresContext : SettingsContext
+ {
+ private static bool _created;
+ public SettingsPostgresContext(DbContextOptions options) : base(options)
+ {
+ if (_created) return;
+
+ _created = true;
+ Database.Migrate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Ombi.Store/MigrationHelper.cs b/src/Ombi.Store/MigrationHelper.cs
index 58b6d6b68d..88136d4c1a 100644
--- a/src/Ombi.Store/MigrationHelper.cs
+++ b/src/Ombi.Store/MigrationHelper.cs
@@ -20,5 +20,13 @@ INSERT INTO AspNetRoles(Id, ConcurrencyStamp, Name, NormalizedName)
SELECT '{Guid.NewGuid()}','{Guid.NewGuid()}','{role}', '{role.ToUpper()}'
WHERE NOT EXISTS(SELECT 1 FROM AspNetRoles WHERE Name = '{role}');");
}
+
+ public static void InsertRolePostgres(this MigrationBuilder mb, string role)
+ {
+ mb.Sql($@"
+INSERT INTO public.""AspNetRoles""(""Id"", ""ConcurrencyStamp"", ""Name"", ""NormalizedName"")
+SELECT '{Guid.NewGuid()}','{Guid.NewGuid()}','{role}', '{role.ToUpper()}'
+WHERE NOT EXISTS(SELECT 1 FROM public.""AspNetRoles"" WHERE ""Name"" = '{role}');");
+ }
}
}
diff --git a/src/Ombi.Store/Migrations/ExternalPostgres/20231212135426_Initial.Designer.cs b/src/Ombi.Store/Migrations/ExternalPostgres/20231212135426_Initial.Designer.cs
new file mode 100644
index 0000000000..5ca9b77b97
--- /dev/null
+++ b/src/Ombi.Store/Migrations/ExternalPostgres/20231212135426_Initial.Designer.cs
@@ -0,0 +1,628 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using Ombi.Store.Context.Postgres;
+
+#nullable disable
+
+namespace Ombi.Store.Migrations.ExternalPostgres
+{
+ [DbContext(typeof(ExternalPostgresContext))]
+ [Migration("20231212135426_Initial")]
+ partial class Initial
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "6.0.22")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Ombi.Store.Entities.CouchPotatoCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("CouchPotatoCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AddedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("EmbyId")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Has4K")
+ .HasColumnType("boolean");
+
+ b.Property("ImdbId")
+ .HasColumnType("text");
+
+ b.Property("ProviderId")
+ .HasColumnType("text");
+
+ b.Property("Quality")
+ .HasColumnType("text");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("text");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.Property("TvDbId")
+ .HasColumnType("text");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("EmbyContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AddedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("EmbyId")
+ .HasColumnType("text");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("integer");
+
+ b.Property("ImdbId")
+ .HasColumnType("text");
+
+ b.Property("ParentId")
+ .HasColumnType("text");
+
+ b.Property("ProviderId")
+ .HasColumnType("text");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("integer");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("text");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.Property("TvDbId")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("EmbyEpisode");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AddedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Has4K")
+ .HasColumnType("boolean");
+
+ b.Property("ImdbId")
+ .HasColumnType("text");
+
+ b.Property("JellyfinId")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("ProviderId")
+ .HasColumnType("text");
+
+ b.Property("Quality")
+ .HasColumnType("text");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("text");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.Property("TvDbId")
+ .HasColumnType("text");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("JellyfinContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AddedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("integer");
+
+ b.Property("ImdbId")
+ .HasColumnType("text");
+
+ b.Property("JellyfinId")
+ .HasColumnType("text");
+
+ b.Property("ParentId")
+ .HasColumnType("text");
+
+ b.Property("ProviderId")
+ .HasColumnType("text");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("integer");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("text");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.Property("TvDbId")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ParentId");
+
+ b.ToTable("JellyfinEpisode");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.LidarrAlbumCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AddedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ArtistId")
+ .HasColumnType("integer");
+
+ b.Property("ForeignAlbumId")
+ .HasColumnType("text");
+
+ b.Property("Monitored")
+ .HasColumnType("boolean");
+
+ b.Property("PercentOfTracks")
+ .HasColumnType("numeric");
+
+ b.Property("ReleaseDate")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.Property("TrackCount")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("LidarrAlbumCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.LidarrArtistCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ArtistId")
+ .HasColumnType("integer");
+
+ b.Property("ArtistName")
+ .HasColumnType("text");
+
+ b.Property("ForeignArtistId")
+ .HasColumnType("text");
+
+ b.Property("Monitored")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("LidarrArtistCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("integer");
+
+ b.Property("GrandparentKey")
+ .HasColumnType("text");
+
+ b.Property("Key")
+ .HasColumnType("text");
+
+ b.Property("ParentKey")
+ .HasColumnType("text");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("integer");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("GrandparentKey");
+
+ b.ToTable("PlexEpisode");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexSeasonsContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ParentKey")
+ .HasColumnType("text");
+
+ b.Property("PlexContentId")
+ .HasColumnType("text");
+
+ b.Property("PlexServerContentId")
+ .HasColumnType("integer");
+
+ b.Property("SeasonKey")
+ .HasColumnType("text");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("PlexServerContentId");
+
+ b.ToTable("PlexSeasonsContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexServerContent", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AddedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Has4K")
+ .HasColumnType("boolean");
+
+ b.Property("ImdbId")
+ .HasColumnType("text");
+
+ b.Property("Key")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Quality")
+ .HasColumnType("text");
+
+ b.Property("ReleaseYear")
+ .HasColumnType("text");
+
+ b.Property("RequestId")
+ .HasColumnType("integer");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("text");
+
+ b.Property("Title")
+ .HasColumnType("text");
+
+ b.Property("TvDbId")
+ .HasColumnType("text");
+
+ b.Property("Type")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("PlexServerContent");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexWatchlistHistory", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("TmdbId")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("PlexWatchlistHistory");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.RadarrCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Has4K")
+ .HasColumnType("boolean");
+
+ b.Property("HasFile")
+ .HasColumnType("boolean");
+
+ b.Property("HasRegular")
+ .HasColumnType("boolean");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("RadarrCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SickRageCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("TvDbId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("SickRageCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SickRageEpisodeCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("integer");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("integer");
+
+ b.Property("TvDbId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("SickRageEpisodeCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SonarrCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("integer");
+
+ b.Property("TvDbId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("SonarrCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.SonarrEpisodeCache", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("integer");
+
+ b.Property("HasFile")
+ .HasColumnType("boolean");
+
+ b.Property("MovieDbId")
+ .HasColumnType("integer");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("integer");
+
+ b.Property("TvDbId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.ToTable("SonarrEpisodeCache");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.UserPlayedEpisode", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("EpisodeNumber")
+ .HasColumnType("integer");
+
+ b.Property("SeasonNumber")
+ .HasColumnType("integer");
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("integer");
+
+ b.Property("UserId")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("UserPlayedEpisode");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.UserPlayedMovie", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("TheMovieDbId")
+ .HasColumnType("integer");
+
+ b.Property("UserId")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("UserPlayedMovie");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyEpisode", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.EmbyContent", "Series")
+ .WithMany("Episodes")
+ .HasForeignKey("ParentId")
+ .HasPrincipalKey("EmbyId");
+
+ b.Navigation("Series");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinEpisode", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.JellyfinContent", "Series")
+ .WithMany("Episodes")
+ .HasForeignKey("ParentId")
+ .HasPrincipalKey("JellyfinId");
+
+ b.Navigation("Series");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexEpisode", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.PlexServerContent", "Series")
+ .WithMany("Episodes")
+ .HasForeignKey("GrandparentKey")
+ .HasPrincipalKey("Key");
+
+ b.Navigation("Series");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexSeasonsContent", b =>
+ {
+ b.HasOne("Ombi.Store.Entities.PlexServerContent", null)
+ .WithMany("Seasons")
+ .HasForeignKey("PlexServerContentId");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.EmbyContent", b =>
+ {
+ b.Navigation("Episodes");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.JellyfinContent", b =>
+ {
+ b.Navigation("Episodes");
+ });
+
+ modelBuilder.Entity("Ombi.Store.Entities.PlexServerContent", b =>
+ {
+ b.Navigation("Episodes");
+
+ b.Navigation("Seasons");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/Ombi.Store/Migrations/ExternalPostgres/20231212135426_Initial.cs b/src/Ombi.Store/Migrations/ExternalPostgres/20231212135426_Initial.cs
new file mode 100644
index 0000000000..9ba6ab96c1
--- /dev/null
+++ b/src/Ombi.Store/Migrations/ExternalPostgres/20231212135426_Initial.cs
@@ -0,0 +1,430 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+#nullable disable
+
+namespace Ombi.Store.Migrations.ExternalPostgres
+{
+ public partial class Initial : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "CouchPotatoCache",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ TheMovieDbId = table.Column(type: "integer", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_CouchPotatoCache", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "EmbyContent",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ ProviderId = table.Column(type: "text", nullable: true),
+ EmbyId = table.Column(type: "text", nullable: false),
+ Title = table.Column(type: "text", nullable: true),
+ ImdbId = table.Column(type: "text", nullable: true),
+ TvDbId = table.Column(type: "text", nullable: true),
+ TheMovieDbId = table.Column(type: "text", nullable: true),
+ Type = table.Column(type: "integer", nullable: false),
+ Quality = table.Column(type: "text", nullable: true),
+ Has4K = table.Column(type: "boolean", nullable: false),
+ Url = table.Column(type: "text", nullable: true),
+ AddedAt = table.Column(type: "timestamp with time zone", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_EmbyContent", x => x.Id);
+ table.UniqueConstraint("AK_EmbyContent_EmbyId", x => x.EmbyId);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "JellyfinContent",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ ProviderId = table.Column(type: "text", nullable: true),
+ JellyfinId = table.Column(type: "text", nullable: false),
+ Title = table.Column(type: "text", nullable: true),
+ ImdbId = table.Column(type: "text", nullable: true),
+ TvDbId = table.Column(type: "text", nullable: true),
+ TheMovieDbId = table.Column(type: "text", nullable: true),
+ Type = table.Column(type: "integer", nullable: false),
+ Quality = table.Column(type: "text", nullable: true),
+ Has4K = table.Column(type: "boolean", nullable: false),
+ Url = table.Column(type: "text", nullable: true),
+ AddedAt = table.Column(type: "timestamp with time zone", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_JellyfinContent", x => x.Id);
+ table.UniqueConstraint("AK_JellyfinContent_JellyfinId", x => x.JellyfinId);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "LidarrAlbumCache",
+ columns: table => new
+ {
+ Id = table.Column(type: "integer", nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ ArtistId = table.Column(type: "integer", nullable: false),
+ ForeignAlbumId = table.Column(type: "text", nullable: true),
+ TrackCount = table.Column(type: "integer", nullable: false),
+ ReleaseDate = table.Column(type: "timestamp with time zone", nullable: false),
+ Monitored = table.Column(type: "boolean", nullable: false),
+ Title = table.Column