You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lidarr/src/NzbDrone.Core/Datastore/Migration/001_initial_setup.cs

313 lines
16 KiB

using FluentMigrator;
using NzbDrone.Core.Datastore.Migration.Framework;
namespace NzbDrone.Core.Datastore.Migration
{
[Migration(1)]
public class InitialSetup : NzbDroneMigrationBase
{
protected override void MainDbUpgrade()
{
Create.TableForModel("Config")
.WithColumn("Key").AsString().Unique()
.WithColumn("Value").AsString();
Create.TableForModel("RootFolders")
.WithColumn("Path").AsString().Unique();
Create.TableForModel("Artists")
.WithColumn("ForeignArtistId").AsString().Unique()
.WithColumn("MBId").AsString().Nullable()
.WithColumn("AMId").AsString().Nullable()
.WithColumn("TADBId").AsInt32().Nullable()
.WithColumn("DiscogsId").AsInt32().Nullable()
.WithColumn("Name").AsString()
.WithColumn("NameSlug").AsString().Nullable().Unique()
.WithColumn("CleanName").AsString().Indexed()
.WithColumn("Status").AsInt32()
.WithColumn("Overview").AsString().Nullable()
.WithColumn("Images").AsString()
.WithColumn("Path").AsString().Indexed()
.WithColumn("Monitored").AsBoolean()
.WithColumn("AlbumFolder").AsBoolean()
.WithColumn("LastInfoSync").AsDateTime().Nullable()
.WithColumn("LastDiskSync").AsDateTime().Nullable()
.WithColumn("DateFormed").AsDateTime().Nullable()
.WithColumn("Members").AsString().Nullable()
.WithColumn("Ratings").AsString().Nullable()
.WithColumn("Genres").AsString().Nullable()
.WithColumn("SortName").AsString().Nullable()
.WithColumn("ProfileId").AsInt32().Nullable()
.WithColumn("Tags").AsString().Nullable()
.WithColumn("Added").AsDateTime().Nullable()
.WithColumn("AddOptions").AsString().Nullable()
.WithColumn("LanguageProfileId").AsInt32().WithDefaultValue(1)
.WithColumn("Links").AsString().Nullable()
.WithColumn("ArtistType").AsString().Nullable()
.WithColumn("Disambiguation").AsString().Nullable()
.WithColumn("PrimaryAlbumTypes").AsString().Nullable()
.WithColumn("SecondaryAlbumTypes").AsString().Nullable();
Create.TableForModel("Albums")
.WithColumn("ForeignAlbumId").AsString().Unique()
.WithColumn("ArtistId").AsInt32()
.WithColumn("MBId").AsString().Nullable().Indexed()
.WithColumn("AMId").AsString().Nullable()
.WithColumn("TADBId").AsInt32().Nullable().Indexed()
.WithColumn("DiscogsId").AsInt32().Nullable()
.WithColumn("Title").AsString()
.WithColumn("TitleSlug").AsString().Nullable().Unique()
.WithColumn("CleanTitle").AsString().Indexed()
.WithColumn("Overview").AsString().Nullable()
.WithColumn("Images").AsString()
.WithColumn("Path").AsString().Indexed()
.WithColumn("Monitored").AsBoolean()
.WithColumn("LastInfoSync").AsDateTime().Nullable()
.WithColumn("LastDiskSync").AsDateTime().Nullable()
.WithColumn("ReleaseDate").AsDateTime().Nullable()
.WithColumn("Ratings").AsString().Nullable()
.WithColumn("Genres").AsString().Nullable()
.WithColumn("Label").AsString().Nullable()
.WithColumn("SortTitle").AsString().Nullable()
.WithColumn("ProfileId").AsInt32().Nullable()
.WithColumn("Tags").AsString().Nullable()
.WithColumn("Added").AsDateTime().Nullable()
.WithColumn("AlbumType").AsString()
.WithColumn("AddOptions").AsString().Nullable()
.WithColumn("Duration").AsInt32().WithDefaultValue(0);
Create.TableForModel("Tracks")
.WithColumn("ForeignTrackId").AsString().Unique()
.WithColumn("ArtistId").AsInt32().Indexed()
.WithColumn("AlbumId").AsInt32()
.WithColumn("TrackNumber").AsInt32()
.WithColumn("Title").AsString().Nullable()
.WithColumn("Explicit").AsBoolean()
.WithColumn("Compilation").AsBoolean()
.WithColumn("DiscNumber").AsInt32().Nullable()
.WithColumn("TrackFileId").AsInt32().Nullable().Indexed()
.WithColumn("Monitored").AsBoolean()
.WithColumn("Ratings").AsString().Nullable()
.WithColumn("Duration").AsInt32().WithDefaultValue(0);
Create.Index().OnTable("Tracks").OnColumn("ArtistId").Ascending()
.OnColumn("AlbumId").Ascending()
.OnColumn("TrackNumber").Ascending();
Create.TableForModel("TrackFiles")
.WithColumn("ArtistId").AsInt32().Indexed()
.WithColumn("AlbumId").AsInt32().Indexed()
.WithColumn("Quality").AsString()
.WithColumn("Size").AsInt64()
.WithColumn("SceneName").AsString().Nullable()
.WithColumn("DateAdded").AsDateTime()
.WithColumn("ReleaseGroup").AsString().Nullable()
.WithColumn("MediaInfo").AsString().Nullable()
.WithColumn("RelativePath").AsString().Nullable()
.WithColumn("Language").AsInt32().WithDefaultValue(0);
Create.TableForModel("History")
.WithColumn("SourceTitle").AsString()
.WithColumn("Date").AsDateTime().Indexed()
.WithColumn("Quality").AsString()
.WithColumn("Data").AsString()
.WithColumn("EventType").AsInt32().Nullable().Indexed()
.WithColumn("DownloadId").AsString().Nullable().Indexed()
.WithColumn("Language").AsInt32().NotNullable().WithDefaultValue(0)
.WithColumn("ArtistId").AsInt32().WithDefaultValue(0)
.WithColumn("AlbumId").AsInt32().Indexed().WithDefaultValue(0)
.WithColumn("TrackId").AsInt32().WithDefaultValue(0);
Create.TableForModel("Notifications")
.WithColumn("Name").AsString()
.WithColumn("OnGrab").AsBoolean()
.WithColumn("OnDownload").AsBoolean()
.WithColumn("Settings").AsString()
.WithColumn("Implementation").AsString()
.WithColumn("ConfigContract").AsString().Nullable()
.WithColumn("OnUpgrade").AsBoolean().Nullable()
.WithColumn("Tags").AsString().Nullable()
.WithColumn("OnRename").AsBoolean().NotNullable();
Create.TableForModel("ScheduledTasks")
.WithColumn("TypeName").AsString().Unique()
.WithColumn("Interval").AsInt32()
.WithColumn("LastExecution").AsDateTime();
Create.TableForModel("Indexers")
.WithColumn("Name").AsString().Unique()
.WithColumn("Implementation").AsString()
.WithColumn("Settings").AsString().Nullable()
.WithColumn("ConfigContract").AsString().Nullable()
.WithColumn("EnableRss").AsBoolean().Nullable()
.WithColumn("EnableSearch").AsBoolean().Nullable();
Create.TableForModel("Profiles")
.WithColumn("Name").AsString().Unique()
.WithColumn("Cutoff").AsInt32()
.WithColumn("Items").AsString().NotNullable();
Create.TableForModel("QualityDefinitions")
.WithColumn("Quality").AsInt32().Unique()
.WithColumn("Title").AsString().Unique()
.WithColumn("MinSize").AsDouble().Nullable()
.WithColumn("MaxSize").AsDouble().Nullable();
Create.TableForModel("NamingConfig")
.WithColumn("ReplaceIllegalCharacters").AsBoolean().WithDefaultValue(true)
.WithColumn("ArtistFolderFormat").AsString().Nullable()
.WithColumn("RenameTracks").AsBoolean().Nullable()
.WithColumn("StandardTrackFormat").AsString().Nullable()
.WithColumn("AlbumFolderFormat").AsString().Nullable();
Create.TableForModel("Blacklist")
.WithColumn("SourceTitle").AsString()
.WithColumn("Quality").AsString()
.WithColumn("Date").AsDateTime()
.WithColumn("PublishedDate").AsDateTime().Nullable()
.WithColumn("Size").AsInt64().Nullable()
.WithColumn("Protocol").AsInt32().Nullable()
.WithColumn("Indexer").AsString().Nullable()
.WithColumn("Message").AsString().Nullable()
.WithColumn("TorrentInfoHash").AsString().Nullable()
.WithColumn("Language").AsInt32().NotNullable().WithDefaultValue(0)
.WithColumn("ArtistId").AsInt32().WithDefaultValue(0)
.WithColumn("AlbumIds").AsString().WithDefaultValue("");
Create.TableForModel("Metadata")
.WithColumn("Enable").AsBoolean().NotNullable()
.WithColumn("Name").AsString().NotNullable()
.WithColumn("Implementation").AsString().NotNullable()
.WithColumn("Settings").AsString().NotNullable()
.WithColumn("ConfigContract").AsString().NotNullable();
Create.TableForModel("MetadataFiles")
.WithColumn("ArtistId").AsInt32().NotNullable()
.WithColumn("Consumer").AsString().NotNullable()
.WithColumn("Type").AsInt32().NotNullable()
.WithColumn("RelativePath").AsString().NotNullable()
.WithColumn("LastUpdated").AsDateTime().NotNullable()
.WithColumn("AlbumId").AsInt32().Nullable()
.WithColumn("TrackFileId").AsInt32().Nullable()
.WithColumn("Hash").AsString().Nullable()
.WithColumn("Added").AsDateTime().Nullable()
.WithColumn("Extension").AsString().NotNullable();
Create.TableForModel("DownloadClients")
.WithColumn("Enable").AsBoolean().NotNullable()
.WithColumn("Name").AsString().NotNullable()
.WithColumn("Implementation").AsString().NotNullable()
.WithColumn("Settings").AsString().NotNullable()
.WithColumn("ConfigContract").AsString().NotNullable();
Create.TableForModel("PendingReleases")
.WithColumn("Title").AsString()
.WithColumn("Added").AsDateTime()
.WithColumn("Release").AsString()
.WithColumn("ArtistId").AsInt32().WithDefaultValue(0)
.WithColumn("ParsedAlbumInfo").AsString().WithDefaultValue("");
Create.TableForModel("RemotePathMappings")
.WithColumn("Host").AsString()
.WithColumn("RemotePath").AsString()
.WithColumn("LocalPath").AsString();
Create.TableForModel("Tags")
.WithColumn("Label").AsString().Unique();
Create.TableForModel("Restrictions")
.WithColumn("Required").AsString().Nullable()
.WithColumn("Preferred").AsString().Nullable()
.WithColumn("Ignored").AsString().Nullable()
.WithColumn("Tags").AsString().NotNullable();
Create.TableForModel("DelayProfiles")
.WithColumn("EnableUsenet").AsBoolean().NotNullable()
.WithColumn("EnableTorrent").AsBoolean().NotNullable()
.WithColumn("PreferredProtocol").AsInt32().NotNullable()
.WithColumn("UsenetDelay").AsInt32().NotNullable()
.WithColumn("TorrentDelay").AsInt32().NotNullable()
.WithColumn("Order").AsInt32().NotNullable()
.WithColumn("Tags").AsString().NotNullable();
Create.TableForModel("Users")
.WithColumn("Identifier").AsString().NotNullable().Unique()
.WithColumn("Username").AsString().NotNullable().Unique()
.WithColumn("Password").AsString().NotNullable();
Create.TableForModel("Commands")
.WithColumn("Name").AsString().NotNullable()
.WithColumn("Body").AsString().NotNullable()
.WithColumn("Priority").AsInt32().NotNullable()
.WithColumn("Status").AsInt32().NotNullable()
.WithColumn("QueuedAt").AsDateTime().NotNullable()
.WithColumn("StartedAt").AsDateTime().Nullable()
.WithColumn("EndedAt").AsDateTime().Nullable()
.WithColumn("Duration").AsString().Nullable()
.WithColumn("Exception").AsString().Nullable()
.WithColumn("Trigger").AsInt32().NotNullable();
Create.TableForModel("IndexerStatus")
.WithColumn("ProviderId").AsInt32().NotNullable().Unique()
.WithColumn("InitialFailure").AsDateTime().Nullable()
.WithColumn("MostRecentFailure").AsDateTime().Nullable()
.WithColumn("EscalationLevel").AsInt32().NotNullable()
.WithColumn("DisabledTill").AsDateTime().Nullable()
.WithColumn("LastRssSyncReleaseInfo").AsString().Nullable();
Create.TableForModel("ExtraFiles")
.WithColumn("ArtistId").AsInt32().NotNullable()
.WithColumn("AlbumId").AsInt32().NotNullable()
.WithColumn("TrackFileId").AsInt32().NotNullable()
.WithColumn("RelativePath").AsString().NotNullable()
.WithColumn("Extension").AsString().NotNullable()
.WithColumn("Added").AsDateTime().NotNullable()
.WithColumn("LastUpdated").AsDateTime().NotNullable();
Create.TableForModel("LyricFiles")
.WithColumn("ArtistId").AsInt32().NotNullable()
.WithColumn("AlbumId").AsInt32().NotNullable()
.WithColumn("TrackFileId").AsInt32().NotNullable()
.WithColumn("RelativePath").AsString().NotNullable()
.WithColumn("Extension").AsString().NotNullable()
.WithColumn("Added").AsDateTime().NotNullable()
.WithColumn("LastUpdated").AsDateTime().NotNullable()
.WithColumn("Language").AsInt32().NotNullable();
Create.TableForModel("LanguageProfiles")
.WithColumn("Name").AsString().Unique()
.WithColumn("Languages").AsString()
.WithColumn("Cutoff").AsInt32();
Create.TableForModel("DownloadClientStatus")
.WithColumn("ProviderId").AsInt32().NotNullable().Unique()
.WithColumn("InitialFailure").AsDateTime().Nullable()
.WithColumn("MostRecentFailure").AsDateTime().Nullable()
.WithColumn("EscalationLevel").AsInt32().NotNullable()
.WithColumn("DisabledTill").AsDateTime().Nullable();
Insert.IntoTable("DelayProfiles").Row(new
{
EnableUsenet = true,
EnableTorrent = true,
PreferredProtocol = 1,
UsenetDelay = 0,
TorrentDelay = 0,
Order = int.MaxValue,
Tags = "[]"
});
}
protected override void LogDbUpgrade()
{
Create.TableForModel("Logs")
.WithColumn("Message").AsString()
.WithColumn("Time").AsDateTime().Indexed()
.WithColumn("Logger").AsString()
.WithColumn("Exception").AsString().Nullable()
.WithColumn("ExceptionType").AsString().Nullable()
.WithColumn("Level").AsString();
}
}
}